Java 知识点整理-4.面向对象(包、权限修饰符、内部类1~38)+ 面向对象一点补充
其他
2018-11-16 00:27:12
阅读次数: 0
1、包package的概述:Ⅰ.将字节码(.class)进行分类存放。 Ⅱ.包其实就是文件夹。
2、包的命名:域名倒着写。
3、定义包的格式:package 包名; 多级包用.分开即可。
4、定义包的注意事项:ⅰ.package语句必须是程序的第一条可执行的代码。ⅱ.package语句在一个java文件中只能有一个。ⅲ. 如果没有package,默认表示无包名。
5、带包的类用cmd编译和运行:Ⅰ.javac编译的时候带上-d即可。javac -d .类名.java。Ⅱ.通过java命令执行。java 包名.类名。
6、import关键字的概述:import是让有包的类对调用者可见,不用写全类名。
7、import关键字的使用:Ⅰ.导包格式 :import 包名; 这种方式导入的是 类的名称,可以最后写*(*代表通配符,会到该包下挨个匹配,匹配上就导入),但不建议,在开发中我们用的都是导入具体的类。Ⅱ.package,import,class有顺序关系。
8、四种权限修饰符:
|
本类 |
同一个包下(子类和无关类) |
不同包下(子类) |
不同包下(无关类) |
private |
√ |
|
|
|
默认 |
√ |
√ |
|
|
protected |
√ |
√ |
√ |
|
public |
√ |
√ |
√ |
√ |
9、在不同包下的无关类,不允许访问,因为是protected修饰的。
10、类及其组成所使用的常见修饰符:Ⅰ.修饰符:ⅰ.权限修饰符:private,默认的,protected,public。ⅱ. 状态修饰符:static,final。ⅲ. 抽象修饰符:abstract。
11、类及其组成所使用的常见修饰符:Ⅱ.类:ⅰ.权限修饰符:默认修饰符,public (外部类是不能私有的,因为创建私有类的实例化将无意义)。ⅱ.状态修饰符:final。ⅲ. 抽象修饰符:abstract。ⅳ. 用的最多的就是:public。
12、类及其组成所使用的常见修饰符:Ⅲ.成员变量:ⅰ.权限修饰符:private,默认的,protected,public。ⅱ.状态修饰符:static,final。ⅲ. 用的最多的就是:private。
13、类及其组成所使用的常见修饰符:Ⅳ.构造方法:ⅰ.权限修饰符:private(当一个类中所有方法是静态的,我们会将构造方法私有),默认的,protected,public。ⅱ. 用的最多的就是:public。
14、类及其组成所使用的常见修饰符:Ⅴ.成员方法:ⅰ.权限修饰符:private,默认的,protected,public。ⅱ. 状态修饰符:static,final。ⅲ. 抽象修饰符:abstract。ⅳ. 用的最多的就是:public。
15、类及其组成所使用的常见修饰符:Ⅵ.除此以外的组合规则:ⅰ.成员变量:public static final 公共静态常量。ⅱ. 成员方法: public static public abstract public final。
16、内部类概述:在类中定义的类。
17、内部类访问特点:Ⅰ.内部类可以直接访问外部类的成员,包括私有。将内部类看作外部类的一个成员,像一个成员方法一样。Ⅱ.外部类要访问内部类的成员,必须创建对象。
18、内部类访问特点:Ⅲ.外部类名.内部类名 对象名 = 外部类对象.内部类对象;(new 外部类名().new 内部类名();)
19、成员内部类私有使用:private class 内部类名{} 如果想调用私有的成员内部类中的方法,只能在外部类本类中创建公共方法并在该公共方法中实例化私有成员内部类,再用私有的成员内部类对象调用原先想调用的方法。然后在主方法中实例化外部类,用外部类对象调用公共方法。
20、静态成员内部类:static class 内部类名{} 看作一个静态的成员,用类名.调用。
21、静态成员内部类访问方式:外部类名.内部类名 对象名 = 外部类名.内部类对象;(外部类名.new 内部类名();但书写习惯是new在前,所以:new 外部类名.内部类名();) 静态内部类里有静态方法,调用方式:外部类名.内部类名.方法名();
22、类名加()即调了类的一个构造,创建了一个对象。
23、在内部类的方法中想调用外部类的成员变量,且内部类有同名的成员变量,格式为:外部类名.this.成员变量名。
24、内部类之所以能获取外部类的成员,是因为他能获取到外部类的引用(外部类名.this)。
25、局部内部类访问局部变量:局部内部类跟局部变量一个意思,在该方法内有效。只能在其所在的方法中访问,出了该方法访问不到
26、如果想访问局部内部类中的方法,在该内部类所在的方法中,实例化该类。再用该类的对象去调想访问的方法。主方法中实例化外部类,用外部类调用该内部类所在的方法,即可创建内部类对象,并调用所需方法。
27、局部内部类访问局部变量必须用final修饰。
28、解释27: 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和所在的方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果调用该方法的局部内部类对象在堆里还没有马上消失,还想用这个局部变量,就用不到了,方法已经弹栈消失了。如果用final修饰会在类加载的时候进入常量池(常量池属于方法区的一部分)延长局部变量生命周期,即使方法弹栈,常量池的常量还在,也可以继续使用。
29、但是jdk1.8取消了这个事情(jdk1.8不加final也没有问题),所以我认为这是个bug。
30、匿名内部类是局部内部类的一种,必须写在方法里。 class 外部类{方法名(){匿名内部类}} 是内部类的简化写法。
31、匿名内部类前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。
32、匿名内部类格式:new 类名或者接口名(){重写方法;},本质是一个继承了该类或者实现了该接口的子类匿名对象。
33、匿名内部类解释Ⅰ:new 类名(){} 继承一个类。 new 接口名();接口是抽象的,实例化是不行的。
new 接口名(){重写抽象方法;} 实现该接口(该接口即为父类),整个代表该接口的子类 对象。再加.方法名(); 即可以调{}内重写后的方法。
34、匿名内部类解释Ⅱ:将创建子类继承父类、重写方法和new 子类对象(父类引用指向子类对象)、调用方法一步喝成,并省略创建子类,new 子类对象(对象即为类名加构造())的过程,直接通过父类创建子类对象并重写抽象方法,再通过.方法名(); 直接调用重写的方法。好处:不用创建子类了,不用起类名了。
35、匿名内部类重写多个方法调用:匿名内部类只针对重写一个方法时候使用。多个方法还是用有名字的类。
36、如果非要用匿名内部类重写多个方法调用:接口名 标识符 = new 接口名(){重写抽象方法;} (父类引用指向子类对象 ),再用 标识符.重写方法1; 标识符.重写方法2;…… 但弊端是若子类有自己的方法,则无法调用。又因为没有子类类名,无法向下强转。
37、匿名内部类在开发中的应用:匿名内部类当做参数传递 对象名.调用方法名(new 父类名(){重写抽象方法;});
本质是把匿名内部类看作一个对象,一个多做了方法重写的对象。
38、链式编程,每次调用方法后还能继续调用方法,证明调用方法返回的是对象。
39、如果一个方法的形式参数是一个类类型(引用类型),则需要传入该类的对象或其子类对象,本质是匿名对象。
40、匿名对象就是没有名字的对象,应用在仅仅只调用一次方法的时候。匿名调用可以节省代码。但不适合调用多次方法时使用。匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。匿名对象可以作为实际参数传递。
41、private仅仅是封装的一种体现形式,不能说封装就是私有。封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
42、this代表当前对象的引用,可以用来区分成员变量和局部变量重名。
43、构造方法没有返回值类型,连具体的void都没有,否则会被当成普通方法。没有具体的返回值,想加只能写return;
44、创建对象等式右边解析:new 类名+构造方法 = new 对象;
45、方法重写:子父类出现了一模一样的方法,返回值可以是子父类,return new 子父类名();。解释:子父类重写方法时,父类被重写的方法的返回值是引用类型且是子类重写的方法的返回值的父类。可以这样定义是因为,子类比父类更加的强大。
46、抽象类就比一般类多了个定义抽象方法的功能。
47、匿名内部类的字节码文件名字是由 外部类加$加数字 组成,是第几个匿名内部类,数字就是几。有名字的最后就是内部类的名字。
转载自blog.csdn.net/from_heat/article/details/83502404