1. 程式人生 > >Java高級特性 實用類

Java高級特性 實用類

用戶 所有 sets 就是 不能 實例 輸入 輸出 運算

枚舉enum

枚舉是一個類,就是一個引用數據類型

枚舉類中根據需求定義多個枚舉值,

枚舉值一旦被定義,不允許被改變,靜態的常量

01.在Student類中定義Gender類型的sex私有屬性:

private Gender sex;

02.創建Gender的枚舉

public enum Gender{

MAN("男"),WOMEN("女");

private String sex;

private Gender(String sex){
this.sex=sex;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {


this.sex = sex;
}

}

03.在測試類中調用

stu.setSex(Gender.MAN)

String sex = stu.getSex().getSex();
System.out.println(sex);//控制臺輸出--->男

1.我們是用的封裝不能從根本上禁止用戶的輸入

2.使用枚舉,從根本上限定用戶的輸入

3.所有的枚舉值都是靜態常量,可以通過枚舉類.枚舉值

4.枚舉類中構造方法,必須是私有的 private

基本數據類型的包裝類

1.集合中的泛型,<>不允許出現基本數據類型,包裝類可以

2.定義了一個基本數據類型的變量,變量名能點出來東西

3.基本數據類型不能轉換成對象,包裝類可以

4.所有的包裝類都是由final修飾的,不允許被繼承

5.在基本數據類型需要轉換成對象的時候,使用包裝類

6.jdk1.5以後,允許基本數據類型和包裝類進行混合運算,底層有裝箱和拆箱操作

基本數據類型 包裝類
byte Byte
short Short
int Integer
long Long
float Float
double Double
上面的六種都是數值類型!都是 extends Number implements Comparable<T>



public abstract class Number implements java.io.Serializable 支持 序列化


char Character
boolean Boolean

上面兩種都是 implements java.io.Serializable, Comparable<T>

比如說:
public Serializable getNum(Serializable s){
}

我們調用getNum(參數可以是8種包裝類中的任何一個)
返回值也可以是 8種包裝類中的任何一個

裝箱和拆箱--->包裝類和基本數據類型的轉換

01.裝箱:把基本數據類型轉換成對應的包裝類Integer num=1

02.拆箱:把包裝類轉換成對應的基本數據數據類型 int num2=num

基本數據類型轉換:

01.自動類型轉換

02.強制類型轉換

引用數據類型轉換

01.向下轉換

02.向上轉換

/**
* 1.所有的包裝類都有對應的基本數據類型作為參數,來構造自己的實例
*/
@SuppressWarnings("unused")
@Test
public void Test01(){
Byte b=new Byte((byte) 1);
Short s=new Short((short) 1);
Integer i=new Integer(1);
Long l=new Long(1);
Float f=new Float(1.0);
Double d=new Double(1.0);

Character c=new Character(‘1‘);
Character c2=new Character((char) 20);
Boolean bo=new Boolean(true);
}
/**
* 1.Float有三種實例化的方法參數分別是double float 和String
* 2.除了Character以外的的7種包裝類都有將String 作為參數 來構建自己的實例
* 6種數值類型的的包裝類都繼承了Number
* 所以在使用String作為參數來創建自己的實例時
* 如果參數不能轉換成數值 則拋出NumberFormatException
*/
@SuppressWarnings("unused")
@Test
public void Test02(){
Byte b=new Byte("1");
Short s=new Short("1");
Integer i=new Integer("1");
Long l=new Long("1");
Float f=new Float("1");
Double d=new Double("1");

//Character c=new Character("1");
Boolean bo=new Boolean("1");
Boolean bo2=new Boolean(true);
System.out.println(bo+"\n"+bo2);
}
/**
* 1.除了Character以外的的7種包裝類都有parseXxx(String s)
* 比如說Byte b=new Byte("1");
* b.parseByte(String);
* 01.4種整型對應的包裝類都是parseXxx(String s,int radix)radix進制轉換
* 02.其他4種沒有parseXxx(String s,int radix)
* 03.Character壓根沒有parseXxx()
*/
@SuppressWarnings("unused")
@Test
public void Test03(){
Byte b=new Byte("1");
Short s=new Short("1");
Integer i=new Integer("1");
Long l=new Long("1");

Float f=new Float("1");
Double d=new Double("1");
Character c=new Character(‘1‘);
Boolean bo=new Boolean("true");

System.out.println(bo);
}
/**
* 4.進制轉換 需要學習位運算
*/
@Test
public void Test04(){
System.out.println("2進制的10對應的數據----->"+Integer.toBinaryString(10));
System.out.println("8進制的10對應的數據----->"+Integer.toOctalString(10));
System.out.println("16進制的10對應的數據----->"+Integer.toHexString(10));
}
/**
* 5.valueOf
* 把基本數據類型轉換成對應的包裝類---->裝箱
* xxxValue 8中包裝類型都有
* 把xxx類型轉換成對應的基本數據類型--->拆箱
*/
@Test
public void Test05(){
int num=3;
Integer i=Integer.valueOf(num);
num=i.intValue();
}
/**
* 6.經典的面試題
* 因為Integer.valueOf(num)會緩存-128~127之間的數據
* 如果我們的數據在這個區間,不回去創建新的對象,而是從緩存中獲取
* 否則會new Integer()
*/
@Test
public void Test06() {
int num1=127;
int num2=127;
System.out.println(num1==num2);
Integer a1=new Integer(127);
Integer b1=new Integer(127);
System.out.println(a1==b1);
Integer a=127;
Integer b=127;
System.out.println(a==b);
Integer c=128;
Integer d=128;
System.out.println(c==d);
System.out.println("1"+1+1);
}

/**
* 111
* 211
*/

@Test
public void Test07() {
System.out.println("1"+1+1);
System.out.println(1+1+"1"+1);
}

Math
01.就是一個算術類
02.是final修飾
03.除了構造方法之外所有的方法都是靜態方法,方便我們使用

天花板函數:
ceil 天 向上取整 3.1 ==》4 3.0 ==》3
floor 地 向下取整 3.9 ==》3

四舍五入
round(2.5)==>3
round(2.498)==>2

Random
隨機的boolean 數值

Java高級特性 實用類