类和对象
面试题:OOP语言的三大特征:
继承、封装、多态
OOP:面向对象程序设计语言 Object-Oriented
类:
- 属性、成员变量、实例成员变量//字段
- 行为、方法、成员方法、实例成员方法
- 实例化一个对象:Person person=new Person();
static
- static 静态成员变量:方法区
final修饰之后放在哪个内存区域不一定
public static int count=0;
public static final int SIZE=30;
public final int size2=32;
- 静态成员变量的访问通过类名.属性进行访问;
通过对象的引用去访问,但是不建议。 - 静态成员方法的调用通过类名.方法进行调用 ;
所有被static所修饰的不管是方法成员 ,调用和访问都只需要通过类名,就可以做到;
所有被static所修饰的不管是方法成员,都不依赖于对象,属于类,并且只有一份,存储在方法区。
为什么main函数是static所修饰?
如果不是静态的,那么main函数的调用需要对象
成员变量:如果没有赋值,那么它的默认值就是自己所对应的0值。
- 引用类型-》null 数组 类 String
- 简单类型-》0 char ‘\u0000’ boolean=false
- 局部变量:必须进行初始化
System.out.println(person.name.length());
//空指针异常,name默认值为Null,NUll.length()
- 在静态方法内部不能访问非静态的数据成员,原因:静态的方法不依赖于对象,对象的产生,并不影响调用静态方法、而非静态的数据成员依赖于对象。对象被实例化之后,name产生。
封装:
初始化方式:
提供一系列的get、set方法
alt+insert(f12):自动生成get、set方法(shift)
fn+esc解锁fn键
构造函数:
- 方法名和类名一样
- 如果在实现类的时候,没有写构造方法,那么编译器会自动生成一个不带有参数的构造方法。但是,如果你自己写了一个不带有参数的构造方法,那么编译器不会为你自动生成不带有参数的构造方法
- 私有构造方法:单例设计模式
- 构造方法也能发生重载
一个对象的产生分为两步:
- 为对象分配内存
- 调用合适的构造方法,构造方法不止一个
this代表什么?
当前对象的引用
this(1);//调用有参构造,必须放在第一行
@override 注解
Person person = new Person();
System.out.println(person);//默认调用Object的toString方法