语法.一
2012-07-29 21:36 江湖么名 阅读(229) 评论(0) 编辑 收藏 举报面向对象三大基本特征:继承、封装、多态。
面向对象:具备三大特征
基于对象:只使用封装这个特性。
继承:大类和小类的关系(父与子),是一种is a关系, 小类 is 大类
组装:整体和部分的关系。has a
java支持 基本数据类型 和 引用数据类型
基本数据类型:
boolean(1位)
byte(1) short(2) int(4) long(8) char(2) float(4) double(8)
引用数据类型
类、接口、数组
null只和引用类型有关
java默认数据类型为int, 当超过时,java并不会默认按long操作,需要的话,在数值后面加L
八进制:0开头 十六进制0x
java7新增二进制数,0b或0B开头
‘uxxxx',直接使用unicode值定义char变量
java默认浮点数位double
想要为float,可以在数值末尾家f或F,也可以用D或d来说明是double,没必要.
--------------------------------------
java定义类的语法
[修饰符] class 类名
{
零到多个构造器定义;
零到多个Field;
零到多个方法...
}
--------------------------------------
Field定义语法(中文可以叫成员变量)
[修饰符] Field类型 Field名 [=默认值]
修饰符:修饰符可以省略,也可以为public protected private static final
其中public protected private只能有一个
final修饰的类:是最终类,即不能被当成父类。
Field类型:Java允许的任何数据类型,包括基本类型和现在介绍的引用类型
Field名:合法标识符
默认值:可选的默认值
--------------------------------------
定义方法的语法格式
[修饰符] 方法返回值类型 方法名 (形参列表)
{
//语句
}
修饰符:修饰符可以省略,也可以为public protected private static final abstract
其中public protected private只能有一个, final abstract只能有一个
方法返回值类型: Java允许的任何数据类型,没有为void
方法名:合法标识符
形参列表:
static用于修饰方法或field,标识他是属于整个类的。
--------------------------------------
构造器定义
[修饰符] 构造器名 (形参列表)
{
//语句
}
修饰符:修饰符可以省略,也可以为public protected private之一
构造器名:必须与类名相同
形参列表:
注意:构造器不能定义返回值,也不能用void声明他无返回值。否则会被当成普通方法被定义。
--------------------------------------
对象的产生
对象有构造器创建,通过new来调用对应某个构造器来创建这个类的实例
例
Person p;
p = new Person();
this引用 对象自己
static方法不能使用this 即静态成员不能访问非静态成员
--------------------------------------
对象引用.方法()
类.方法() //用static修饰过的方法
--------------------------------------
可变形参: 方法,在最后一个形参的类型后面加三个点(...),表明该形参可以接受多个参数值。
多个参数值被当作数组传入。
public void put(int a, String... books)
{
for (String temp : books)
{
System.out.println(temp);
}
}
--------------------------------------
重载
两同一不同。
同一个类中方法名相同,参数列表不同。
--------------------------------------
封装
private(当前类访问权限)
只能在类内部访问
default(包访问权限)不使用任何修饰符时
被相同包下的其他类访问
protected(子类访问权限)
public(公共访问权限)
private default protected public
同一个类中 ok ok ok ok
同一个包中 ok ok ok
子类中 ok ok
全局范围内 ok
--------------------------------------
包
为了解决重名问题,包提供命名空间
指定一个类在某个包下
在第一个非注释行写下且一个文件中只能有一条这个语句
package packagename;
一旦指定后,位于这个文件中的所有类名的完整类名都应该是包和类名的组合。
package lee;
class MyClass
{
static public void main(String[] args)
{
System.out.println("this is MyClass\n");
}
}
编译javac -d . MyClass.java (不使用-d 就不会生成相应的目录结构, 且java lee.MyClass也不行,必须手工创建lee目录)
编译后,生成lee目录,目录下为MyClass.class
java规定:位于包中的类,在文件系统中也必须要有与包名层次相同的目录结构。
执行 java lee.MyClass
加载过程
虚拟机加载lee.MyClass时,它会依次搜索CLASSPATH环境变量所指定的系列路径,
查找这些路径下是否包含lee路径。并在lee路径下查找是否包含MyClass.class文件。
所以同一个包下的文件不一定放在一个地方,可以一个C盘,一个D盘,只要在CLASSPATH中,
并且在lee下,就可以使用。
使用其他包的类,必须加包前缀
lee.sub.Apple a = new lee.sub.Apple();
为了简化包前缀,引入了import
import出现在package之后,类定义之前。
一个文件可以有多个import
例 import lee.sub.Apple;
导入所有类
import lee.sub.*;//注,子包内的类不会被导入。
import不是万能的,如果两个包内的类文件同名,编译器就不能辨别要使用哪个包了
这是只能使用带包前缀的类名。
java默认为所有源文件导入java.long下的包
--------------------------------------
继承语法
修饰符 class SubClass extends SuperClass
{
//类定义
}
注:子类不能获得父类的构造器(什么意思?)
--------------------------------------
方法覆盖(Override)
原则: 两同两小一大
两同: 方法名、形参列表相同
两小: 子类的返回值类型应比父类返回值类型更小或相等
子类方法声明抛出的异常应比父类方法声明抛出的异常更小或相等
一大: 子类方法的访问权限应比父类的更大或相等。
子类中访问被覆盖的父类方法可以用super关键字或父类类名作为调用者。
父类总用private声明的,子类不能重写,即使写了同名函数,也只是定义了一个新函数。不是重写。
方法重载(overload)和方法重写(override)
重载:同一个类的多个同名函数(父类和子类也有可能发生重载,即子类定义与父类同名但形参列表不同的函数时)
重写:子类和父类的同名函数
--------------------------------------
子类被构造时,必会调用父类构造器,分下面3种情况
1.如果第一句用super显示构造函数,系统将根据参数列表调用父类构造函数。例 super(1)
2.如果用this显示调用本类的另一构造函数,执行另一个构造函数时,会调用父类构造函数
3.既没super调用,也没this调用,系统会在执行子类构造函数之前调用父类无参构造函数。
--------------------------------------
多态
无虚拟方法的概念,直接就转化为子类的方法
Base b = new Client();
b.test();
test是client的方法。(两者都定义了)
强制类型转换
基本数据类型:只能数据类型之间转换
引用类型:只能有继承关系。将父转为子时,则运行时必须为子才行。(即Base b = new Client(); 这里Base可以)
否则报 ClassCastException
可以用intanceof来判断是否可以成功转换(要么对象和后面类型相同,要么具有父子继承关系)
if ( obj instanceof ObjType )
{
ObjType o = (ObjType)obj;
}·
--------------------------------------
初始化块 一个类据说只能有两块,但没必要,因为都会被执行到。
普通初始化快,静态出事话块
定义
class
{
[修饰符] {
}
...
}
修饰符时static是静态初始化块。(静态初始化化块是类相关的)
先执行类的初始化(静态),然后是对象的初始化
执行顺序
base static init 父类静态初始化块 类初始化阶段
Client static init 子类静态初始化块
base init 父类初始化快 对象初始化阶段
Base 父类构造体
Client init 子类初始化块
Client 子类构造体
第二次创建
base init
Base 2
Client init
Client
--------------------------------------