JAVA语言基础07
1 访问控制修饰符
1) public
2) protected
3) [default] 很少使用,很少使用package作为访问控制的边界
4) private
* 一般自然现象: 都是尽可能的封装典型.
声明属性和方法尽可能私有。这样才能做到尽可能的封装。
提供适当的属性访问方法,适当的开放属性的访问。
一个源文件可以有多个类, 但是只能有一个public类,
文件名要与Public类一致. 如果有其他类, 就只能是默认修饰
不建议使用非公有类。就是说所有类都应该是公有的,并且
一个源文件一个类。
2 引用类型转换(是引用变量的类型的转换!)
1) 向下转型(隐式/自动类型转换),是小类型到大类型的转换
如:
Circle c = new Circle(1,2,3);
Shape s = (Shape) c;//表示圆一定是图形
2) 向上造型(强制类型转换),是大类型到小类型。
如:
Shape s = (Shape) new Circle(1,2,3);
Cirlcle c = (Circle)s; //当s实际引用圆时候,能够转换成功
s = new Rectangle(1,1,2,2);
Circle c2 = (Circle) s;//出现类型转换异常,因为
// s引用的是Rectangle 不是圆实例。
3) instanceof 运算符,用来检查引用对象的类型。
经常与“引用类型强制转换”配合,实现安全的类型转换,
避免类型转换异常。
3 Java Bean
关于JavaBean规范
1) JavaBean 不是语法规范,是习惯性编程规范,用这个规范
写的类使用方便。有时候JavaBean的类也称为:POJO
Plan Old Java Object
2) 简化规范:
a 必须有包.
b Java类,具有无参数构造器。
c 有用getXxx() 和 setXxx() 声明的Bean属性。
如:getName() 和 setName(String n) 声明的
Bean属性为:name, 与是否有实例变量name无关.
boolean类型的get方法可以有两种形式:
getMarried() 或者 isMarried()
d 必须实现序列化接口(在学习IO的时候具体学习。)
e JDK提供的类几乎都符合JavaBean规范。
如:String
3) JavaBean 最大的好处:“使用方便”
4 static 静态 关键字, 修饰: 属性, 方法, 内部类, 代码块
static修饰的资源属于类级别, 是全体对象实例共享的资源
(属性, 方法, 内部类)
1) 静态属性, 使用static修饰的属性, 是在类的加载期间初始化
是属于类的, 全体类的实例共享的变量, 使用类名访问属性.
实例变量: 属于对象的属性.
2) static 方法, 使用static声明的方法, 属于类的方法, 一般
用来表示工具方法. 在类加载以后就可以自己调用, 不需要创建任何
类的实例.
3) 静态代码块,是在类加载期间运行的代码块,由于类只加载
一次,所以静态代码块只执行一次!
用途不是很常见,一般用来在类加载以后初始化一些静态资源
时候使用,如:加载配置文件。
4) 静态内部类(在内部类专题讲解)
5 final 最终的
1) final 修饰的类,不能再被继承。
Java 的String就是final类,不能被继承!
Math 也是final
Integer (包装类)
在实际项目开发中,原则上不允许使用final类!
Spring, Hibernate,Struts 2, 这个框架经常动态继承
代理我们的类。使用final的类可能造成这些框架的工作问题
2) final修饰的方法,不能再被覆盖。
在实际项目开发中,原则上不允许使用final方法!
3) final 修饰的变量,初始化以后不允许再修改了。
a. final 局部变量
b. final 方法参数
c. final 的成员变量
4) final static -- Java使用final static修饰的变量作为常量。
一般要求常量名都有大写字母。
常量不是: const
java 的关键字: 50个 if else for
保留关键字: goto const
不是关键字: null true false 是字面量
常量 和 字面量/直接量
public static final int ACE = 13;
Math.PI
Math.E
//ACE 常量 13是直接给出的字面量
"达内"字符串字面量
常量和字面量都是不可改变的常数, 广义上都称为"常量"
减少硬编码!"硬编码" 是指在代码中直接使用"字面量"
将字面量替换为常量/变量
public static final int ZERO=0;
for(int i=0; i<54; i++){
}
for(int i=ZERO; i<cards.length; i++){
}