Java基本数据类型

a Java是强类型语言，
b 变量必须声明，并且初始化以后使用
c 变量必须有明确的类型
d 变量不能重复定义
变量的作用域
a 在声明的地方开始，到块结束为止
b 离开变量的作用域结束，变量将回收。

数据类型转换:
自动类型转换(隐式类型转换)
从小类型到大类型, 自动完成

Java中的方法
1 方法就是函数: y=f(x)=3x+6;
2 方法的语法
(修饰词)(返回值类型)(方法名)(参数列表){
//方法体
}
3 方法需要有return语句, 返回和返回值类型
兼容的数据
4 方法的参数和方法内部的变量 都是局部变量,
这些变量作用域只在方法内部!
5 实参: 方法调用的参数
形参: 方法的参数定义,是临时变量.
Java运算符和选择循环结构的使用

ava中字面量的运算被Javac优化了, 优化为一个固定的常量.
&& || 是短路的逻辑运算.
& | 是非短路运算
大多数使用 短路运算.
if else switch for(；;)的使用
break continue
1 break 结束本次循环
2 continue 继续当前循环
数组

数组的声明:
int[] ary;
int ary[]; //不推荐的写法!
b 数组的初始化:
1 动态初始化: 必须指明数组的长度
int[] ary = new int[10];
int[] ary = new int[]{3,1,4,1,5,9};
2 静态初始化: 只能在声明数组时候使用!
int[] ary = {3,1,4,1,5,9};
//ary = {2,7,1,8};//编译错误
ary = new int[]{2,7,1,8};
3 数组成员自动初始化为"零"值.
"零"值: 0, 0.0, '\u0000', false, null
如果越界访问会出现异常(错误)
ArrayIndexOutOfBoundsException
1 Java数组的大小是固定的
2 利用数组复制到方法可以变通的实现数组扩展
3 System.arraycopy() 可以复制数组
4 Arrays.copyOf() 可以简便的创建数组副本
5 创建数组副本的同时将数组长度增加就变通的实现了
数组的扩展
Book类的创建

构造器(构造方法)  用来描述对象的创建过程的.
声明在类内部, 方法名与类名一致
的方法叫构造方法, 构造方法不能声明返回值类型.
构造方法可以包含参数, 参数一般是创建对象实例
必须依赖的条件(前提条件).

new运算: 创建对象实例
1 根据类的属性在堆中分配对象空间.
2 根据参数类型调用构造器.
3 new运算返回对象的引用地址.
对象的创建过程
1 根据类的属性在堆中分配对象空间,并且自动初始化.
2 根据参数类型调用构造器.

this 是对当前对象的引用, 是当前对象本身.
可以使用this明确的访问当前对象的属性或者方法
类似于"我".
this() 是调用本类的其他构造器, 可以使用构造器的
重用, 简化代码的实现.
* this() 必须写在构造器的第一行!

构造方法经常会重载
案例: Book.java
方法签名 = 方法名+参数类型列表
方法重载:a 方法名一样 b 方法参数不一样
也可以说: 方法名一样, 方法签名不同的方法

默认构造器
案例: ConstructorDemo.java
1 如果类没有声明任何构造器,Javac自动提供一个
默认构造器, 无参数默认构造器
2 如果提供构造器声明, Javac将不再提供默认构
造器.

对象的方法, 表示对象的功能, 依赖于对象存在.
案例: Point.java
如: p1.distance() 和 p2.distance()
方法是动作,是功能,一般用动词声明.
方法也经常重载, 重载:方法名一样, 参数不一样
重载体现了, 功能的多态.
重载的方法经常互相重用.

为了避免引用参数传递的副作用, 建议一切结果使用
返回值带回.
类的继承@@重构下以前的对齐格式

子类是类型的具体化(特化), 父类是子类的泛化(概念抽象化)
1 子类继承父类的属性和方法
2 构造器不能继承！
3 实例化子类，会递归分配所有父类的空间
4 子类默认调用父类的无参数构造器

对象的实例化过程：
1 检查类是否加载，如果没有加载就加载这个类，
要加载所有父类。
懒惰式加载（按需加载）：如果第一次用到就加载，
只加载一次。通过CLASSPATH指定的路径寻找类文件，
加载以后是一个对象，类型是Class。
获得这个类对象：Student.class-> Class 实例
2 在内存堆中分配对象空间。递归分配所以父类属性空间。
属性默认自动初始化。自动初始化为“0”值。
3 进行属性的赋值。
4 递归调用父类构造器。(默认调用父类无参数构造器！)
5 调用本类构造器。

访问控制
1 public
2 protected
3 default 很少使用，很少使用package作为访问控制的边界
4 private

声明属性和方法尽可能私有。这样才能做到尽可能的封装。
提供适当的属性访问方法，适当的开放属性的访问。

不建议使用非公有类。就是说所有类都应该是公有的，并且
一个源文件一个类。

继承中的语法现象
1 父类型可以引用子类型的实例，父类型的实现是多态的！
2 子类可以覆盖父类的方法，修改父类的行为。
方法覆盖：子类覆盖了父类“相同方法签名”的方法。
方法的覆盖是由方法动态绑定实现的，就是Java虚拟机运行
时候确定执行那个方法，java最终执行子类的方法。
JavaBean规范

规范：
a 必须有包.
b 是一个Java类，具有无参数构造器。
c 有用getXxx() 和 setXxx() 声明的Bean属性。
如：getName() 和 setName(String n) 声明的
Bean属性为：name, 与是否有实例变量name无关.
boolean类型的get方法可以有两种形式：
getMarried() 或者 isMarried()
d 必须实现序列化接口(在学习IO的时候具体学习。)
e JDK提供的类几乎都符合JavaBean规范。
如：String

JavaBean 最大的好处：“使用方便”
static,final的用法@@类的强制类型转换

static 修饰词(关键字)，都是用来修饰类的成员的。
1
期间分配的，所有类和类的实例共享的一个变量，相当于全局
变量。一般使用类名访问静态属性：
Koo.x = 3;
2 静态的方法。是属于类的方法，可以通过类名访问。
是全体类公有的工具方法。静态方法和类的实例无关。
在静态方法中不可以访问“this”，或者说：静态方法只能
访问静态成员。
3 静态代码块，是在类加载期间运行的代码块，由于类只加载
一次，所以静态代码块只执行一次！
用途不是很常见,一般用来在类加载以后初始化一些静态资源
时候使用，如：加载配置文件。

final 最终的
1 final 修饰的类，不能再被继承。
Java 的String就是final类，不能被继承！
Math 也是final
在实际项目开发中，原则上不允许使用final类！
Spring, Hibernate,Struts 2, 这个框架经常动态继承
代理我们的类。使用final的类可能造成这些框架的工作问题

2 final修饰的方法，不能再被覆盖。
在实际项目开发中，原则上不允许使用final方法！

3 final 修饰的变量，初始化以后不允许再修改了。
a final 临时变量
b final 方法参数
c final 的成员变量
4 final static -- Java使用final static修饰的变量作为常量。
一般要求常量名都有大写字母。

引用类型转换（是引用变量的类型的转换！）
1 向下转型（自动类型转换），是小类型到大类型的转换
如：
Circle c = new Circle(1,2,3);
Shape s = c;//表示圆一定是图形
2 向上造型（强制类型转换），是大类型到小类型。
如：
Shape s = 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 运算符，用来检查引用对象的类型。
经常与“引用类型强制转换”配合，实现安全的类型转换，
避免类型转换异常。