- 类是一种自定义的数据类型,可以用类来定义变量,用类定义的变量都是引用变量,他们将会引用到类的对象,引用变量存于栈内存,实际对象放在堆内存。
- 类常见三大成员:成员变量、成员方法、构造器。各成员之间可以相互调用,static修饰的成员不能访问没有static修饰的成员。
- 成员变量用于定义该类的数据,方法用于定义类的功能,构造器用于构造该类的实例,Java通过new来调用构造器,从而返回该类的实例。
- static用于修饰方法、成员变量,static修饰的成员表明他属于这个类本身而不是该类的单个实例,可以通过类调用,也可以通过实例来调用。
- this关键字总是指向调用该方法的对象,构造器中应用该构造器正在实例化的对象,在方法中引用调用该方法的对象。
- 方法重载(@overload),方法名相同,参数不相同,不关心返回值相等与否。仅仅返回值不一样系统报错。
- 当系统加载类或者创建类的实例的时候,将自动为成员变量分配内存空间,并自动为成员变量赋初值。
- 局部变量定义后必须进过显示的初始化后才能使用,为变量赋初值,系统才会为局部变量分配内存。
- 栈内存中的变量无需系统垃圾回收,一般随方法或代码块的结束而结束。
访问控制符,private < default < protected < public。private只能同一个类中访问(表头设置居中失败了。。)
类所在位置\修饰符 private default protected public 同一个类中 true true true true 同一个包中 true true true 子类中 true true 全局范围内 true - public修饰的类,文件名必须与类名一致,外部类只能使用public或默认访问控制符修饰,因为它不在任何一个类内部,private和protected无效。
- 构造器(构造方法)用于创建对象时初始化,可重载。
- 为了在构造器B中调用构造器A的初始化代码,又不希望重新创建一个Java对象,用this关键字来调用构造器A。
- 重写(@Override),子类重写继承于父类的方法。方法名、形参列表相同,返回值类型比父类原函数返回值类型更小或相等,抛出的异常比父类方法声明抛出的异常更小或相等。
- 如果父类的方法是private类型,对子类就是隐藏的,子类无法重写。
- 在调用父类的构造方法时,super必在子类构造方法的第一行,否则会报错。
- super用于限定该对象调用从父类继承得到的实例变量或方法。
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
public class BaseClass { public int book = 66; public void base() { System.out.println("父类的普通方法"); } public void test() { System.out.println("父类的方法,会被子类覆盖"); } } public class AddClass extends BaseClass{ //AddClass子类 public void test() { System.out.println("B子类覆盖父类的方法"); } public void sub() { System.out.println("B子类的普通方法"); } } public class SubClass extends BaseClass{ //SubClass子类 public void test() { System.out.println("子类覆盖父类的方法"); } public void sub() { System.out.println("子类的普通方法"); } public static void main(String[] args) { BaseClass p = new SubClass(); p.base(); //调用父类的普通方法 p.test(); //调用SubClass子类重写父类的test();方法 BaseClass p1 = new AddClass(); p1.base(); //调用父类的普通方法 p1.test(); //调用AddClass子类重写父类的test();方法 } }
- instanceof前一个操作符通常是一个引用类型变量,后一个操作数通常是一个类或者接口,用于判断前面的对象是否是后面的类,或者子类、实现类的实例。
- instanceof运算符的作用是在进行强制类型转换之前,判断是否可以成功转换,保证代码的健壮性。
- 编译时类型,引用变量定义的类型。运行时类型,引用变量初始化时的类型。
- 不要在父类的构造器中调用将要被子类重写的方法,因为子类实例化时使用父类的构造器将执行子类重写的方法,而此时子类对象为null,将引发空指针异常。
初识化块是类的第四个成员,创建对象时,系统先调用类里定义的初始化块,如果有两个,前面的先执行,后面的随后执行,构造方法随后再执行。
public class Person { public int a; // 初始化代码块 { a = 9; } // 系统默认的无参构造方法,会执行但无法初始化属性的值,如果里面写上this.a = 99;则a的值变为99 public Person() { } public static void main(String[] args) { Person person = new Person(); System.out.println(person.a); //输出 a 的值为9 } }
- 继承中有静态初始化块,非静态初始化块,无参构造方法,有参构造方法(父类、子类都有)的执行顺序:
父类静态初始化块—>>子类静态初始化块—>>父类非静态初始化块—>>父类无参构造方法—>>父类的有参构造方法—>>子类非静态初始化块—>>子类无参构造方法—>>子类的有参构造方法。 - 有初始化块存在时,系统默认的无参的构造方法不能给属性初始化为初值。
Java疯狂讲义读书笔记第五章
最新推荐文章于 2024-11-15 18:38:47 发布