包装类:
在Java中,每个基本类型在java.lang包中,都有相应的包装类,把基本数据转换为对象,其中包装类Integer是Number的直接子类。
基本数据类型: byte short int long float double char boolean
包装类: Byte Short Integer Long Float Double Character BooleanNumber 直接父类: Object类
注意:包装类可以定义属性和方法,属于引用数据类型,默认值为null。
自动装箱和自动拆箱:
在JDK1.5更改为自动完成,自动装箱--基本数据类型转变为包装类的过程--例如:Integer i = 5;
自动拆箱--包装类转变为基本数据类型的过程--例如:Int a = new Integer(5);
为什么要使用包装类,包装类的作用。
答:因为java语言是面向对象的语言,但是java中的基本数据类型却不是面向对象的,而在实际的使用中经常需要将基本数据转化成对象,便于操作。比如说在集合中存储数据时,只能存储对象
作用:
[1]作为和基本数据类型对应的类型存在,方便涉及到对象的操作
[2]包含每种基本数据类型相关的属性以及相关的操作方法
String转Int:
包装类Integer的静态方法可以将字符串类型的数字“123”转换成基本整型变量n,它的实现语句是Interger.parseInt(“123”);
注意:1.此方法是静态方法,所以允许类名称直接调用。
2此方法抛出异常,属于运行时异常。出现异常的情况:实参是字符串,此字符串如果包含非数字型字符,则会出现该异常。
String类型:----是一个表示字符串的类,使用final修饰,不能派生子类。存在很多方法操作字符串。(引用数据类型)
String s ="a"+”b”+”c” 创建 1 个对象。
注意:String类使用连接符,如果字符串使用连接符”+”进行连接时,在JVM进行编译时会自动优化,把多个字符串连接成一个字符串,是在内部完成,并不是产生多个对象。
1.trim()方法:
String类的trim()方法作用是去掉字符串左右两端的空格
-----trim()方法,表示只能去掉字符串左右两端的空格,中间部分的空格它无能无力。
2.subString(int index, int end)方法:截取字符串,包括index不包括end。
实例:"hamburger".substring(4, 8) 返回的结果是“urge”//[0,1]取的是h
3.concat(String)方法:把指定的字符串连接到此字符转的结尾。注意:(1)如果字符串长度为0,进行调用此方法,返回的是新字符串。例如:String s =“”;//字符串长度为零--
s= s.concat(“abc”); // 连接字符串”abc”,返回的是”abc”
(2)如果字符串为null,调用此方法,出现空指针异常。例如String s = null; s= s.concat(“abc”);//出现异空指针常。
4.toUpperCase()方法:toUpperCase()方法,把字符串的字母字符全部变为大写
5.length()方法;求字符串的长度。注意:数组求长度是arr.length,集合求大小是size()方法。
String类中“==”比较和equals()方法比较:
(1)如果使用比较运算符”==”比较的是引用数据类型,则他们比较的是对象在内存当中的地址值是否相同;如果比较的是基本数据类型,则他们比较的是各自所代表的具体的值,来判断是否相同。
(2)equals(Object obj) 方法,String类重写了equals()方法,表示两个对象所包含的内容是否相同;不是比较的地址值
(3)每通过一个new关键字,创建对象,都会重新在堆内存当中开辟空间,所以分配的引用地址值也不同。
(4)如果字符串出现了一次之后,会在字符串常量池中进行存储,如果再出现,则字符串常量池中不会再开辟空间,而是引用一下即可。内存分析例子如下两图:
可变字符串序列StringBuffer/StringBuilder:
在不改变字符串内存地址的情况下,允许改变字符串的内容,java语言中存在这两个类,StringBuffer和StringBuilder。
注意:(1)都被final修饰的类,不能派生子类。
(2)都可以表示字符串,都属于java.lang包中的类。
(3)直接父类都是Object。
(4)StringBuffer线程安全,效率低,StringBuilder线程非安全,效率高。
String、StringBuffer、StringBuilder区别与联系。
答:联系: (1) 三者之间都可以表示字符串,(2) 三者都使用final修饰,都不能派生子类,同时他们的共同的直接父类:Object(3) StringBuffer和StringBuilder都是可变字符序列,底层数组结构都是char类型的数组,方法功能也很相似。
区别:
String表示字符序列不可变,StringBuffer和StringBuilder表示字符序列可变。
StringBuffer:jdk1.0版,线程安全,但是效率低
StringBuilder:jdk1.5版,线程不安全,但是效率高
String str=”bjsxt”;和String str= new String(“bjsxt”);的区别
答:相同点:两者都可以创建对象。
不同点:String str = “bjsxt”;首先会在字符串常量池中进行查找,如果有,则不再创建, 反之进行创建,同时它没有在堆内存中进行创建,而是直接在字符串常量池中创建;
String str = new String(“bjsxt”);它会在堆内存中创建对象,在字符串常量池中进行查找,如果存在直接引用即可。
日期类:
Java.util.Date包含一个和它同名的子类,它就是java.sql.Date类。 父类提供了无参构造方法,子类没有无参构造方法。
DateFormat类:
日期格式化类,可以实现字符串和日期类型之间的格式转换,其中将日期类型转换为指定字符串格式的方法名是format
注意:(1)此类是一个抽象类,如果想实例化对象,需要借助子类完成。
(2)此类只有一个子类,它就是SimpleDateFormat类,根据构造方法,传入日期格式,同时调用format方法,传入Date类型的实参。
Math类:
random()方法:
使用Math.random( )返回带正号的 double值,该值大于等于0.0且小于1.0。使用该函数生成[30,60]之间的随机整数的语句是(int)(Math.random()*31+30);
随机产生数[a,b]的公式如下: (int)(Math.random()*(b-a+1)+a);注意:random方法的范围[0,1].......
说明:a b都是整数类型,而且都表示闭区间,也就是包含a和b。
pow(x,y)方法:求x的y次方。
Enum类:
JDK1.5后提供了enum关键字,用以定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法和构造方法。
注意: (1) 枚举类型是JDK1.5之后出现的新特性
(2) 对于枚举最大的作用和体现:只能定义全局常量,可以代替接口中定义的常量
(3) 在for-each语句中,数据类型可以是枚举类型
实例:for(枚举类型 变量名称:枚举名称.values()){
System.out.println(变量名称);
}
(4)枚举是一种特殊的”类”,继承抽象类Enum,父类中存在很多的方法,允许子类 使用,发现父类的方法都是普通方法且使用final修饰。
(5)enum不能使用extends继承其他类,因为它默认继承了java.lang.Enum