JavaSE札记(一)

JavaSE笔记(一)

此乃本人学习马士兵老师的JavaSE视频后,留下的宝贵遗产,在此记录,以备日后复习之用!

 

简称表示:

${JDK_HOMEJDK安装目录。

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数据类型划分:

基本数据类型(48)

1、数值型:包含整数类型(byteshortintlong)和浮点类型(floatdouble)

2、字符型:char

3、布尔型:boolean

引用数据类型:

1、(class)

2、接口(interface)

3、数组(array)

 

 

 

数值类型表示:

八进制整数:必须以0开头;

十六进制整数:必须以 0x 或 0X 开头;

Java的整型常量默认为 int 型,声明long型常量,可以在数字后面加 或 

Java的浮点型常量默认为 double 型,声明 float 型常量,可以在数字后面加 或 

 

 

数值类型占用空间极其范围:

 

类型

占用存储空间

范围

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(xboolean类型,xtrue,则表达式结果为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修饰)只可以被同一个包内的类访问。

 

 

 

类的继承与权限控制

通过继承,子类拥有了父类中除了私有成员之外的所有成员(成员变量和成员方法);

 

 

 

方法重写(overwriteoverride)

注意:

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);

}

 

}