JavaSE札记(一)
此乃本人学习马士兵老师的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);
}
}