枚举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 数值