面向对象基础
1、面向对象编程:oop
2、面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
3、对象是具体的实例,类是抽象的,是对象的模板
4、 类 = 属性 + 方法
5、三大特性:封装、继承、多态
6、break和return的区别:
break用于跳出switch和结束循环
return用于结束方法体
方法
静态方法:直接通过类名去调用方法
public class Dem01 {
public static void main(String[] args) {
Student.say();
}
}
public class Student {
public static void say(){
System.out.println("学生在说话");
}
}
非静态方法:先实例化对象,通过对象调用方法
public class Dem01 {
public static void main(String[] args) {
Student student = new Student();
student.say();
}
}
public class Student {
public void say(){
System.out.println("学生在说话");
}
}
值传递和引用传递
值传递:
方法调用时,实参把它的值传递给对应的形参,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实参和形参,后面方法中的操作都是对形参这个值的修改,不影响实参的值。
结论:当方法参数为基本类型时,是将外部变量值拷贝到局部变量中而进行逻辑处理的,故方法是不能修改原基本变量的。
引用传递:
也称为传地址。方法调用时,实参的引用(地址,而不是参数的值)被传递给方法中相对应的形参,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
结论:对于引用类型的方法参数,会将外部变量的引用地址,复制一份到方法的局部变量中,两个地址指向同一个对象。
类与对象
Person类:抽象的
package www.Dongyi.oop;
public class Person {
//属性
String name;
int age;
//方法
public void richMan(){
System.out.println(this.name+"在赚钱,并且成为了富豪");
System.out.println("他才"+this.age+"岁");
}
}
Demo01测试类
package www.Dongyi.oop;
public class Demo1 {
public static void main(String[] args) {
Person p1= new Person();
Person p2= new Person();
p1.name="张三";
p1.age=4;
p2.name="李四";
p2.age=5;
//直接在main方法里调用
System.out.println(p1.name+" "+p1.age);
System.out.println(p2.name+" "+p2.age);
System.out.println("============================");
//通过实例化对象来调用方法
p1.richMan();
p2.richMan();
}
}
构造器
1、一个类即使什么也不写,也会存在一个默认构造方法
2、显示定义构造器
(1)new的本质在调用构造方法
(2)初始化对象的值
(3)一旦定义了有参构造。无参就必须显式定义
3、快捷键 alt+insert
有参构造:

无参构造:

完整代码:
package www.Dongyi.oop;
public class Person2 {
String name;
public Person2() {
}
public Person2(String name) {
this.name = name;
}
}
package www.Dongyi.oop;
public class Application {
public static void main(String[] args) {
Person2 person2 = new Person2("阿董");
System.out.println(person2.name);
}
}
alt+insert失效问题
1、File–>settings
2、依次安装Gherkin—>Cucumber for Java—>Cucumber for Groovy
3、选好之后重启IDER
4、若依旧失效,关闭数字键盘(num lk),重新按下快捷键alt+insert,就可以正常使用了
创建对象内存分析
public class Pet {
public String name;
public int age;
//无参构造
public void shout(){
System.out.println("叫了一声");
}
}
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 2;
dog.shout();
System.out.println(dog.name+" "+dog.age);
Pet cat = new Pet();
}
}
对象是通过引用来操作的:栈---->堆(地址),真正操作的是堆