(10)面向对象-权限修饰符&匿名内部类
一.包
- 带包的文件在DOC中编译
javac -d . HelloWorld.java
java 包名.HelloWorld - 四种权限修饰符
本类 同一包下(子类与无关类) 不同包下(子类) 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
二.内部类
- 外部类访问内部类成员
Outer.Inner oi = new Outer().new Inner();
外部类名.内部类名 对象名 = 外部类对象.内部类对象 - 外部类访问静态内部类中的非静态方法
Outer.Inner oi = new Outer.Inner(); //等号右边实际上是 Outer.new Inner();
外部类名.内部类名 对象名 = 外部类名.内部类对象 - 外部类访问静态内部类中的静态方法
Outer.Inner.method(); - 局部内部类:只能在其所在的方法中访问
- 局部内部类访问局部变量必须用final修饰
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈
这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会
在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
但是jdk1.8取消了这个事情,可以不加final
(11)Eclipse使用&Object类型
一.Eclipse
- IDE 集成开发环境 Intergrated Development Environment
- 下载 http://eclipse.org/
- 快捷键
alt + shift + s 再 + c 生成空参构造
alt + shift + s 再 + o 根据本地字段(成员变量)生成有参构造
alt + shift + s 再 + r 生成get set方法
alt + shift + r 改名
二.常见对象
- API (Application Programming Interface)应用程序编程接口
Java API 就是Java提供给我们使用的类,这些类将底层的实现封装了起来 - Object
hashCode(); //哈希值
Class clazz = *.getClass(); String name = clazz.getName(); //获取类名
toString(); //类名@hashCode十六进制表现形式
equal(Object obj); //Object中的equal方法是比较对象的地址值,需要重写。因为开发中通常比较的是对象的属性值
(12)String类
一. 面试题
//常量池中没有这个字符串对象,就创建一个,如果有就直接用即可
String s1 = "abc";
String s2 = "abc";
syso(s1 ==s2); //true
syso(s1.equals(s2)); //true
String s1 = new String("abc"); //会创建两个对象,常量池中一个,对象中一个
//对象中的那个相当于常量池中的副本
String s1 = new String("abc"); //记录的是堆内存对象的地址值
String s2 = "abc"; //记录的是常量池中的地址值
syso(s1 == s2); //false
syso(s1.equals(s2)); //true
String s1 = "a" +"b" + "c"; //java中有常量优化机制
String s2 = "abc";
String s3 = "ab";
String s4 = s3 + "c"; //底层会创建一个StringBuffer或StringBuilder对象,append进行拼接,然后
//调用toString方法转化成String类型对象,所以s4中存的是String对象的地址值
syso(s1 ==s2); //true
syso(s1.equals(s2)); //true
syso(s4 == s2); //false