java初级笔记----final、static、匿名对象、内部类

时间:2023-02-25 16:43:48

一、final
1、final可以用来修饰类,方法,成员变量,
2、final修饰类不可以被继承,但是可以继承其他类。
3、final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。
4、final修饰的变量称为常量,这些变量只能赋值一次。
修饰成员变量,需要在创建对象前赋值,否则报错。

二、static
不需要创建对象,即可调用static修饰的方法或变量。
1、被static修饰的成员变量属于类,不属于这个类的某个对象。
(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
2、被static修饰的成员可以并且建议通过类名直接访问
3、static可以修饰成员变量成员方法
什么时候使用static修饰成员变量?
加static修饰成员的时候,这个成员会被类的所有对象所共享。一般我们把共性数据定义为静态的变量
什么时候使用static修饰成员方法?
静态的方法只能访问静态的成员,如果静态方法中引用到了静态的其他成员,那么这个方法需要声明为静态的方法。
4、 在多态中,非静态编译看父类运行看子类,父类没有编译失败。
但多态中的静态方法,编译看父类,运行仍然看父类。因为静态和对象没有关系,属于静态绑定。

三、匿名对象
匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
例:new Person();
1、只能使用一次
2、匿名对象可以作为方法接收的参数、方法返回值使用

四、内部类
将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。 其他类也称为外部类。
1、在内部类中可以直接访问外部类的所有成员。包括私有
2、外部类访问内部类成员,必须建立内部类对象。
3、访问方法:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
五、局部内部类

局部内部类代码演示
定义类
class Party {//外部类,聚会
public void puffBall(){// 吹气球方法
class Ball {// 内部类,气球
public void puff(){
System.out.println("气球膨胀了");
}
}
//创建内部类对象,调用puff方法
new Ball().puff();
}
}
访问内部类
public static void main(String[] args) {
//创建外部类对象
Party p = new Party();
//调用外部类中的puffBall方法
p.puffBall();
}

六、匿名内部类
匿名内部类的本质是一个实现了接口或继承了某个类的子类匿名对象.

public class Test {
public static void main(String[] args) {
//使用匿名内部类
/*
* 定义实现类,重写方法,创建实现类对象,一步搞定
* 格式:
* new 接口或者父类(){
* 重写抽象方法
* };
* 从 new开始,到分号结束
* 创建了接口的实现类的对象
*/

new Smoking(){
public void smoking(){
System.out.println("人在吸烟");
}
}.smoking();
}
}

七、包
java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。
当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。
在项目中,我们将相同功能的类放到一个包中,方便管理。并且日常项目的分工也是以包作为边界。
类中声明的包必须与实际class文件所在的文件夹情况相一致,即类声明在a包下,则生成的.class文件必须在a文件夹下,否则,程序运行时会找不到类。

八、权限
protected :不同包的子类可以调用
defau:相同的包可以diaoy

九、代码块
程序中用大括号括起来的代码叫代码块。
构造代码块是定义在类中成员位置的代码块
特点:
优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
每创建一个对象均会执行一次构造代码块。