class="p0" style="margin-bottom: 0pt; margin-top: 0pt;">此乃本人学习马士兵老师的JavaSE视频后,留下的宝贵遗产,在此记录,以备日后复习之用!
?
简称表示:
${JDK_HOME}?:JDK安装目录。
cmd窗口:命令行窗口。
[C]:标示该文件为一个类。
[I]:标示该文件为一个接口。
?
下载安装JDK
JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
将?${JDK_HOME}/bin?配置到?PATH?环境变量中;
cmd窗口使用?echo%PATH%?命令可查看?PATH?变量的内容;
?
Java标示符命名规则:
1、标示符由字母、数字、下划线(_)、美元符号($)组成;
2、标示符由字母、下划线(_)、美元符号($)开头;
3、Java标示符大小写敏感,长度无限制。
?
?
?
Java变量划分:
局部变量:方法或者语句块内部定义的变量。
成员变量:方法外部、类的内部定义的变量。
?
?
?
Java数据类型划分:
基本数据类型(4类8种):
1、数值型:包含整数类型(byte、short、int、long)和浮点类型(float、double)
2、字符型:char
3、布尔型:boolean
引用数据类型:
1、类(class)
2、接口(interface)
3、数组(array)
?
?
?
数值类型表示:
八进制整数:必须以0开头;
十六进制整数:必须以?0x?或?0X?开头;
Java的整型常量默认为?int?型,声明long型常量,可以在数字后面加?l?或?L?。
Java的浮点型常量默认为?double?型,声明?float?型常量,可以在数字后面加?f?或?F?。
?
?
数值类型占用空间极其范围:
?
类型
占用存储空间
范围
byte
1字节
-128?~?127
short
2字节
-2#15?~?2#15-1
int
4字节
-2#31?~?2#31-1
long
8字节
-2#63?~?2#63-1
float
4字节
?double
8字节
??
基础数据类型转换
Boolean类型不可转换为其他类型
整型、字符型、浮点型的数据在混合计算中可以互相转换,规则如下:
1、byte,short,char?-->?int?-->?long?-->?float?-->?double?;
2、byte,short,char?之间不会相互转换,他们三者在计算中首先会转换成?int?类型再进行计算;
3、大容量数据类型转换为小容量数据类型时,必须强制转型;有可能造成精度降低或者溢出;
?
Java运算符
算术运算符:+,?-,?*,?/,?%,?++,?--?;
关系运算符:>,?>=,?<,?<=,?==,?!=?;
逻辑运算符:!(逻辑非),?&(逻辑与),?|(逻辑或),?^(逻辑异或),?&&(短路与),?||(短路或)?;
位运算符:&,?|,?^,?~,?>>,?<<,?>>>?;
赋值运算符:=?;
扩展赋值运算符:+=,?-=,?*=,?/=?;
字符串连接运算符:+?;
三目条件运算符:x?y:z(x为boolean类型,若x为true,则表达式结果为y,否则为z)?;
?
Java语句
条件语句:
if
if...?else
if...?else?if
if...?else?if...?else?if...?else
?
switch
switch(x){
case?a:
...
case?b:
...
.
.
.
default:
...
}
switch语句注意事项:
1、case条件穿透,需要和break语句合并使用;
2、语句体相同的多个case可以合并在一起;
3、default语句可以省略,但是不推荐省略;
?
循环语句:
for
while
do...?while
?
?
while?和?do?while?语句比较:
while(boolean?x){语句;}?先判断x的值,若为true,则执行循环体,然后再判断表达式的值并反复执行,直到条件不成立时,终止循环。
do(语句;)?while(boolean?x);?先执行语句,再判断x的值,若为true,再执行语句,然后再判断x值,知道条件不成立时,终止循环。
?
?
break?和?continue
break?用在循环体中,强行退出循环;
continue?用在循环体中,跳过某次循环,开始下一次循环;
?
?
?
构造方法:方法名和类名同名,方法前不能加返回值,void也不行!!!
?
?
?
方法重载(overload):名字相同、参数不同(个数不同或者参数类型不同)的多个方法。构造方法也可以构成重载。
注意:不能根据返回值类型来判断方法重载!!!
?
?
?
this关键字
?
?
?
static?关键字?:
使用?static?声明的成员变量为静态成员变量,它为该类的公共变量,在第一次使用时被初始化,对于该类的所有对象来说,static?成员变量只有一份,所有对象共享。
使用?static?声明的方法为静态方法,调用该方法时,不会将对象的引用传递给它;在static?方法中不可访问非static?的成员。
可以通过对象引用或者类名(无需实例化)直接访问静态成员。
?
?
${JDK_HOME}\jre\lib\rt.jar?java核心jar包(RunTime)
?
?
?
Java权限修饰符:public?protected?(default)?private
Java权限修饰符置于类成员定义之前,用于限定其他对象对该类对象成员的访问权限:
修饰符
类内部
同一包中
子类中
任何地方
private
yes
? ? ?(default)
yes
yes
? ?protected
yes
yes
yes
?public
yes
yes
yes
yes
对于类级别的权限修饰符,只可以用?public?和?(default):
1、public修饰的类可以在任何地方被访问;
2、无任何权限修饰符修饰的类(即被default修饰)只可以被同一个包内的类访问。
?
?
?
类的继承与权限控制
通过继承,子类拥有了父类中除了私有成员之外的所有成员(成员变量和成员方法);
?
?
?
方法重写(overwrite、override)
注意:
1、重写的方法必须和被重写的方法具有相同的方法名称、相同的参数列表、相同的返回类型!
2、重写的方法不能使用比被重写的方法更严格的访问权限!
?
?
?
super关键字
?
?
?
继承中的构造方法
1、子类实例化的过程中,必须调用其父类的构造方法;
2、子类可以在自身的构造方法中使用super(参数列表)来调用父类的构造方法;
3、super(参数列表)必须写在子类构造方法的第一行;
4、子类可以使用this(参数列表)来调用本身其他的构造方法;
5、如果子类的构造方法中没有显示的调用父类构的造方法,则系统默认调用父类无参的构造方法;
6、如果子类的构造方法中没有显示的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。
?
?
?
对象转型:
向上转型:子类对象当做父类对象使用;
向下转型:父类对象当做子类对象使用;
?
?
?
抽象类
1、使用?abstract?关键字修饰的类叫做抽象类;
2、使用?abstract?关键字修饰的方法叫做抽象方法;
3、含有抽象方法的类必须被声明为抽象类;
4、抽象类被继承时,抽象方法必须被重写;如果子类不想重写父类的抽象方法,则子类必须声明为抽象类;
5、抽象类不能被实例化;
6、抽象方法只需声明,无需实现。
?
?
?
final关键字
1、final?的变量的值不能被改变;
2、final?的方法不能被重写;
3、final?的类不能被继承;
?
?
?
interface(接口)
1、接口是抽象方法和常量值的集合;
2、接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,没有变量和方法的实现;
3、多个无关的类可以实现同一个接口;一个类可以实现多个无关的接口;
4、接口中的属性默认为?public?static?final?修饰,也只能是?public?static?final?修饰;
5、接口中定义的抽象方法,默认为?public?修饰,也只能是?public?修饰;
6、接口可以继承;
?
?
?
异常处理
try{
...
}?catch(Exception?e)?{
...
}?finally?{
...
}
注意:重写方法需要抛出和被重写方法所抛出的异常类型一致的异常,或者不抛出异常。
?
?
?
异常类关系
java.lang.Object
|--java.lang.Throwable
????|--java.lang.Error
????|--java.lang.Exception
????????|--java.lang.RuntimeException
?
?
?
数组(引用类型,非基础类型)
一维数组的声明:
int?arr?[];
int?[]?arr;
一维数组的初始化:
动态初始化:
int?[]?arr;
arr?=?new?int?[2]?;
arr[0]?=?11;
arr[1]?=?12;
静态初始化:
int?[]?arr?=?{1,4,2};
二维数组的声明:
int?[][]?a;
int?arr?[][];
二维数组的初始化:
int?[][]?a?=?{{1,2},{3,4,5},{6}};
//?int?[3][2]?a?=?{{1,2},{3,4,5},{6}};?//非法
?
int?[][]?ar?=?new?int?[3][4];
?
int?[][]?arr?=?new?int?[3][];
arr[0]?=?new?int[2];
arr[1]?=?new?int[4];
arr[2]?=?new?int[3];
?
注意:
1、Java语言中,声明数组时不能指定其长度(数组中元素的个数);
2、Java中使用?new?关键字创建数组对象,格式为:arr?=?new?int?[5]?;
3、多维数组的声明和初始化应该按照由高维到低维的顺序进行,例如:
int?[][]?arr?=?new?int?[3][];
arr[0]?=?new?int[2];
arr[1]?=?new?int[4];
arr[2]?=?new?int[3];
?
?
?
数组的拷贝:
使用?java.lang.System?类的静态方法:
public?static?void?arraycopy(Object?src,?int?srcPos,?Object?dest,?int?destPos,?int?length)
此方法用于数组拷贝,效率非常高效;
将数组?src?从第?srcPos?个元素开始的?length?个元素拷贝到?dest?数组从第?destPos?个位置开始的?length个长度;
如果源数组拷贝的元素个数超过目标数组边界,则会抛出?IndexOutOfBoundsException异常。
?
?
?
JavaSE常用类
查看API!
?
?
?
基础类型的包装类:
char?-->?Character
int?-->?Integer
float?-->?Float
double?-->?Double
boolean?-->?Boolean
?
包装类常用方法(以java.lang.Integer类为例,其他类类似):
public?long?longValue();
public?int?intValue();
public?double?doubleValue();
public?static?int?parseInt(String?s)?throws?NumberFormatException;
public?static?Integer?valueOf(String?s)?throws?NumberFormatException;
?
?
?
Java的打包解包机制(JDK1.5之后增加的内容)
打包:自动将基础数据类型转换为对应的对象类型;
解包:自动将对象类型转换为对应的基础数据类型;
?
?
?
递归调用:在方法内部,对自身进行调用,称之为方法的递归调用。
?
迭代方法:(汉诺塔的问题不能用迭代方法完成,只能使用递归方法完成)
public?int?mthd(int?n){
if(n?==?1)?{
return?1;
}?else?{
return?n*mthd(n-1);
}
?
}
?
?