关键字this、static
this:本类对象的引用
- this(属性):在构造函数中调用另一个构造函数。
- this.属性:访问成员属性。
- this.方法:调用成员方法。
static:静态成员是类成员,不是对象成员。
- 静态变量:当属性值被所有对象共享时使用。
- 静态方法:当访问的成员都是静态或者在工具类中使用。由于jvm先加载类再加载对象,为了防止静态成员在没有创建本类对象之前访问对象成员,java限制静态方法只能访问静态成员。
构造函数
当自定义了构造函数后,默认的构造函数就不存在了。一般自定义构造函数时都要先定义无参构造函数,防止子类构造函数找不到父类的无参构造函数而编译失败。
构造函数、构造代码块、静态代码块之间的区别
- 构造函数与构造代码块都是给对象进行初始化的,静态代码块是给类进行初始化的。
- 构造函数是对特定对象进行初始化,构造代码块对所有对象进行初始化。当所有对象的初始属性>值都相同时,可以将初始化动作定义在构造代码块中,当创建对象调用构造函数时系统会自动先调用构造代码块,而不用利用super语句在带参构造函数中手动调用。
- 静态代码块一般用于定义项目启动时必须先执行的操作,这种代码自动执行。
- 调用顺序:静态代码块–>构造代码块–>构造函数。
内部类
使用场景
当描述事物时,事物的内部还有事物,且内部事物有功能描述,则该事物用内部类来描述,
由于内部类是外部类的成员,为了封装性,一般将内部类修饰为私有,并对外提供访问接口。内部类与外部类之间的访问规则
由于内部类处于成员位置,因此可以直接访问外部类中的成员。外部类要访问内部类,必须先建立内部类对象。
局部内部类
- 由于处于局部位置,不可以被成员修饰符修饰。
- 可直接访问外部类中的成员,但是不能访问它所在局部的普通变量,只能访问被final修饰的局部变量,保证了线程的安全。
匿名内部类(局部内部类的一种)
- 好处:简化书写,将定义内部类、继承、复写、创建对象、调用糅合成一步。
- 定义匿名内部类的前提:内部类必须继承自抽象类或者实现接口。
- 使用场景:当内部类中的方法不超过3个时使用,既保证了代码的可阅读性,又简化书写。
- 匿名内部类格式示范
<pre> interface AbsDemo { void show(); } class Outer { int x = 3; public void function() { new AbsDemo() { void show() { System.out.println("x="+x); } }.show(); } } </pre>
静态内部类
- 当内部类中定义了静态成员,该内部类也要被静态修饰。(因为所有的静态成员必须在所有的非静态变量之前加载,而内部非静态类是在创建外部类对象之后才加载的,即加载顺序为:外部类–>静态成员–>内部非静态类,这就产生内部非静态类加载与其包含的静态成员加载之间的矛盾,解决方法是将包含静态成员的内部类也修饰为静态)。
- 由于静态内部类处于外部类的成员位置,因此静态内部类只能访问外部类中的静态成员。
外部其他类如何直接访问公有内部类
访问普通内部类:Outer.Inner in = new Outer().new Inner()
访问静态内部类:普通成员new Outer.Inner().function();静态成员:new Outer.Inner.function()
08-26
11-12