一.封装
1.封装的实现是用private修饰类中的成员变量,比如说private String name; 就对类中的成员对象进行了封装。并且此时的name也只能在当前类中使用,不能在其他的类中使用也不无法通过初始化一个对象后通过对象.name使用了。
2.非要使用private修饰的成员变量,需要通过setName和getName使用。
这里的getName和setName是可以通过快捷键设置的:
如果有多个成员变量可以按住Ctrl或者Shift就可以多选择了,这就是封装的使用。
二.访问修饰限定符
其中的default就是默认
这个就是default的类型的,不用加上default,加上default就过不了idea的编译器。
三.包
1.包简单的来说可以理解为一个文件夹,这是一个导包,所以我们很早之前就已经接触包了。
2.我们自己也可以创建一个包,在src中创建。
3.包的名称:首先要全部都是小写,其次就是域名逆置的写法,比如说:com.baidu.www,这就是创建了包之后的样子
4.在src中的test和在www中的test类是不会冲突的,因为他们在两个不同的包内,这里还可以在baidu中创建一个包。
5.这里不是import就不是导包,这里的package指的是声明包的路径。代表着Test的这个类在这个包下面。
6.如果没有package的包,都是在src这个默认的包下面,自定义包都会有package。
7.可以通过import导入我们自己的自定义包来使用。
8.不导入包的时候的写法就是把原来导入的包写在创建的对象中。
9.这里还可以通过*来导入java.util包中的所有类。
这里不要误会,java会在用到谁的时候调用谁不会全部调用。但是不代表*就没有缺点。在java.util和Java.sql中都Date的类那么如果这个时候都写Date类的话编译器就没办法知到Date是那个包中的Date了。这个时候只有一个解决办法。就是把包都补齐就可以使用了,所以一般来说还是用什么类就调用什么包。
10.这就是包访问权限也就是默认的访问修饰限定符default。
四.static成员
1.当一个类中的成员变量被static修饰的时候这个成员变量就不会再属于对象,变成了类变量。
2.这个类成员直接通过类名. 来直接访问。也可以通过对象. 来调用,但是我们建议用类名. 调用
3.类变量存储在方法区
4.静态成员变量不依赖于对象。
5.在静态方法中不能直接调用依赖对象的方法,因为静态方法不需要依赖对象。 但是可以在静态方法中通过初始化一个实例化对象之后再使用依赖对象的方法。
五.代码块
1.普通代码块:指的就是方法里面的代码块,可以理解为满足条件的时候执行括号里面的内容。也可以代表一个作用域。
2.构造代码块(实例代码块):方法外面的代码块,一般用来初始化非静态成员变量。
3.静态代码块最先执行,之后是实例代码块,然后才是构造方法。(实例化多个对象的时候,静态代码块只执行一次)
4.静态代码块:可以初始化静态变量。
5.实例成员变量和构造方法是有先后顺序的。(一般的类中都是先写出成员变量)因为二者都是初始化非静态成员变量,只有最后一次赋值才是真正的值,所以二者有先后顺序。
六.内部类
1.实例内部类
定义在类的内部,方法的外部:
实例内部类不能直接实例化:
实例内部类只能这样实例化:
实例内部类中的方法调用也是和普通类一样。
在实例内部类中也可以使用外部类的属性和方法:
在实例内部类中有和外部类同名的属性的时候,在new了一个内部类的对象之后,调用内部类的方法。打印出来的属性是属于内部类的:
在实例内部类中一定要访问和外部内同名的属性需要加上外部类 类名 + this + .
实例内部类也会产生字节码文件:
外部类不能直接访问实例内部类中的成员,只能通过实例化内部类对象来调用内部类的成员。
2.静态内部类
静态内部类:
静态内部类创建对象:
生成静态内部类对象的时候,不需要外部类对象的引用。所以外部内就没有生成对象,就没办法在静态内部类中直接调用外部类中非静态的属性和方法:
需要访问外部内对象的属性和方法,只能实例化一个外部类对象,通过外部类对象类引用他自己的属性和方法。
3.匿名内部类
这就是匿名内部类的创建:(理解为相当于一个类实现了这个接口,同时重写了test的方法)
方法的调用:(注意最后的分号)
发生了动态绑定:(相当于创建了一个类,然后这个类实现接口并且重写接口中的方法,在通过实例化一个类的对象)
4.局部内部类
局部内部类就是在外部类的方法内中创建:
局部内部类只能在该方法中使用,不能在其他地方使用。
并且局部内部类不能被public static等修饰符修饰
局部内部类也有自己独立的字节码文件:
局部内部类几乎不会使用。
七.匿名对象
第二个是匿名对象,只能使用一次。