Java SE 核心 Ijava
一、Object类
在 Java 继承体系中,java.lang.Object 类位于顶端(是全部对象的直接或间接父类)。若是一个类没有写 extends 关键字声明其父类,则该类默认继承 java.lang.Object 类。Object 类定义了“对象”的基本行为,被子类默认继承。
public class Object
类 Object 是类层次结构的根类。每一个类都使用 Object 做为超类。
11个方法:3个重载方法。9个方法。
1)toString():获得对象的字符串表示形式。
2)equals(Object o):比较两个对象是否相等的。(比较内容)。
3)getClass():获得对象的大Class 对象。
4)hashCode():获得对象的哈希码。
5)wait():线程等待。(重载)
6)notify():唤醒线程。
7)notifyAll():唤醒全部线程。
8)clone():克隆 对象。
9)inalize():垃圾回收相关的。
二、String类
是字符串类型,是引用类型,是“不可变”字符串,无线程安全问题。在 java.lang.String中
注意事项:String str =“abc”;和 String str=new String(“abc”);的区别!
1)String 在设计之初,虚拟机就对他作了特殊的优化,将字符串保存在虚拟机内部的字符串常量池中。一旦咱们要建立一个字符串,虚拟机先去常量池中检查是否建立过这个字符串,若有则直接引用。String 对象由于有了上述的优化,就要保证该对象的内容自建立开始就不能改变!因此对字符串的任何变化都会建立新的对象,而不是影响之前的对象!
2)String 的 equals 方法:两个字符串进行比较的时候,咱们一般使用 equals 方法进行比较,字符串重写了 Object 的 equals 方法,用于比较字符串内容是否一致。虽然 java 虚拟机对字符串进行了优化,可是咱们不能保证任什么时候候“==”都成立!
3)编程习惯:当一个字符串变量和一个字面量进行比较的时候,用字面量.equals 方法去和变量进行比较,即:if("Hello".equals(str))由于这样不会产生空指针异常。而反过来用,即:if(str.equals("Hello"))则咱们不能保证变量不是 null,若变量是 null,咱们在调用其 equals 方法时会引起空指针异常,致使程序退出。若都为变量则 if(str!=null&&str.equals(str1))也可。
4)String 另外一个特有的 equals 方法:euqalsIgnoreCase,该方法的做用是忽略大小写比较字符串内容,经常使用环境:验证码。if("hello".equalsIgnoreCase(str))。
5)String 的基本方法:
① String toLowerCase():返回字符串的小写形式。如:str.toLowerCase()
② String toUpperCase():返回字符串的大写形式。如:str.toUpperCase()
③ String trim():去掉字符串两边的空白(空格\t\n\r),中间的不去。如:str.trim()
④ boolean startsWith():判断字符串是否以参数字符串开头。如:str.startsWith("s")
⑤ boolean endsWith():判断字符串是否以参数字符串结尾。如:str.endsWith("s")
⑥ int length():返回字符串字符序列的长度。如:str.length()
6)indexOf 方法(检索):位置都是从 0 开始的。
①int indexOf(String str):在给定的字符串中检索 str,返回其第一次出现的位置,找不到则返回-1。
②int indexOf(String str,int from):在给定的字符串中从 from 位置开始检索 str,返回第一次出现的位置,找不到则返回-1(包含 from 位置,from 以前不看)
③int lastIndexOf(String str):在给定的字符串中检索 str,返回其最后一次 出 现 的位置,找不到则返回-1(也可认为从右往左找,第一次出现的位置)。
④int lastIndexOf(String str,int from):给定字符串从 from 位置开始检索str,返回最后一次出现的位置,找不到则返回-1(包含 from 位置,from 以后的不看)
7)charAt 方法:char charAt(int index):返回字符串指定位置(index)的字符。
8)substring 方法(子串):字符串的截取,下标从 0 开始的。
①String substring(int start,int end):返回下标从 start 开始(包含)到 end 结束的字符串(不包含)。
②String substring(int start):返回下标从 start 开始(包含)到结尾的字符串。
9)getBytes 方法(编码):将字符串转换为相应的字节。
①byte[] getBytes():以当前系统默认的字符串编码集,返回字符串所对应的二进制序列。
如:byte[] array=str.getBytes(); System.out.println(Arrays.toString(array));
②byte[] getBytes(String charsetName):以指定的字符串编码集,返回字符串所对应的二进制序列。这个重载方法须要捕获异常,这里可能引起没有这个编码 集的异常,UnsupportedEncodingException,如:str="常"; byte[] bs=info.getBytes("UTF-8");
注意事项:
Windows 的默认编码集 GBK:英文用 1 个字节描述,汉字用 2 个字节描述;
ISO-8859-1 欧洲经常使用编码集:汉字用 3 个字节描述;GBK 国标;GB2312国标;UTF-8 编码集是最经常使用的:汉字用 3 个字节描述。
编码:将数据以特定格式转换为字节;解码:将字节以特定格式转换为数据。
String(byte[] bytes, String charsetName) :经过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。如:String str=new String(bs,"UTF-8");
10)split 方法(拆分):字符串的拆分。
String[] split(String regex):参数 regex 为正则表达式,以 regex 所表示的字符串为分隔符,将字符串拆分红字符串数组。其中,regex 所表示的字符串不被保留,即不会存到字符串数组中,可理解为被一刀切,消失!
11)replace 方法:字符串的替换。
String replaceAll(String regex,String replacement):将字符串中匹配正则表达式 regex的字符串替换成 replacement。如:String str1=str.replaceAll("[0-9]+", "chang");
12)String.valueOf()方法:重载的静态方法,用于返回各种型的字符串形式。
String类经常使用方法
问题序列:
1)为何String对象称为“不可变对象?
2)看图
3)String类和常量池
在Java的内存分析中,咱们会常常听到关于“常量池”的描述,实际上常量池也分了如下三种:
1. 全局字符串常量池(String Pool)
全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每一个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
2. class文件常量池(Class Constant Pool)
class常量池是在编译的时候每一个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
3. 运行时常量池(Runtime Constant Pool)
运行时常量池是在类加载完成以后,将每一个class常量池中的符号引用值转存到运行时常量池中,也就是说,每一个class都有一个运行时常量池,类在解析以后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
4)Java经常使用类的基本用法(结合Java API文档学习)
String类经常使用方法一
String类经常使用方法二
三、StringBuilder
与 String 对象不一样,StringBuilder 封装“可变”的字符串,有线程安全问题。对象建立后,可经过调用方法改变其封装的字符序列。
StringBuilder 经常使用方法:
1)追加字符串:StringBuilder append(String str)
2)插入字符串:StringBuilder insert(int index,String str):插入后,原内容依次后移
3)删除字符串:StringBuilder delete(int start,int end)
4)替换字符串:StringBuilder replace(int start,int end,String str):含头不含尾
5)字符串反转:StringBuilder reverse()
StringBuilder和StringBuffer
StringBuilder和StringBuffer很是相似,均表明可变的字符序列。 这两个类都是抽象类AbstractStringBuilder的子类,方法几乎如出一辙。
StringBuilder和StringBuffer称之为“可变字符序列”。那二者有什么区别呢?
1)StringBuffer JDK1.0版本提供的类,线程安全,作线程同步检查, 效率较低。
2)StringBuilder JDK1.5版本提供的类,线程不安全,不作线程同步检查,所以效率较高。 建议采用该类。
四、Date时间类(java.util.Date)
java.util.Date 类用于封装日期及时间信息,通常仅用它显示某个日期,不对他做任何操做处理,做处理用 Calendar 类,计算方便。查看API文档你们能够看到其实Date类中的不少方法都已通过时了。JDK1.1以前的Date包含了:日期操做、字符串转化成时间对象等操做。JDK1.1以后,日期操做通常使用Calendar类,而字符串的转化使用DateFormat类。
五、Calendar日历类
java.util.Calendar 类用于封装日历信息,其主做用在于其方法能够对时间份量进行运算。
1)经过 Calendar 的静态方法获取一个实例该方法会根据当前系统所在地区来自行决定时区,帮咱们建立 Calendar 实例,这里要注意,实际上根据不一样的地区,Calendar 有若干个子类实现。而 Calendar 自己是抽象类,不能被实例化!咱们不须要关心建立的具体实例为哪一个子类,咱们只须要根据 Calendar 规定的方法来使用就能够了。
2)日历类所解决的根本问题是简化日期的计算,要想表示某个日期还应该使用 Date 类描述。Calendar 是能够将其描述的时间转化为 Date 的,咱们只须要调用其 getTime()方法就能够获取描述的日期的 Date 对象了。
3)经过日历类计算时间:为日历类设置时间,日历类设置时间使用通用方法 set。set(int field,int value),field 为时间份量,Calendar 提供了相应的常量值,value 为对应的值。
4)只有月份从 0 开始:0 为 1 月,以此类推,11 为 12 月,其余时间是正常的从 1 开始。也可使用 Calendar 的常量 calendar.NOVEMBER……等。
5)Calendar.DAY_OF_MONTH 月里边的天---号;
Calendar.DAY_OF_WEEK 星期里的天---星期几
Calendar.DAY_OF_YEAR 年里的天
6)获取当前日历表示的日期中的某个时间单位可使用 get 方法.
六、DateFormat类和SimpleDateFormat类
把时间对象转化成指定格式的字符串。反之把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,通常使用它的的子类SimpleDateFormat类来实现。
七、包装类(包装类均位于java.lang包,八种包装类和基本数据类型的对应关系)正则表达式
Java 语言的 8 种基本类型分别对应了 8 种“包装类”。每一种包装类都封装了一个对应的基本类型成员变量,同时还提供了针对该数据类型的实用方法。
1)包装类的目的:用于将基本类型数据看成引用类型看待。
2)包装类的名字:除了 Integer(int),Character(char)外,其他包装类名字都是基本类型名首字母大写。
3)拆、装箱:Integer i=new Integer(1);建立一个以对象形式存在的整数 1,这种从基本类型转为引用类型的过程称之为“装箱”,反之叫“拆箱”。
4)装箱:方式一:Double d=new Double(2.2);//装箱
方式二:Double d=Double.valueOf(2.2);//基本类型都有 valueOf 方法
5)拆箱:double num=d.doubleValue();//拆箱
6)包装类使用前提:JDK1.5+
已经有了基本数据类型了,为什么还要提供对应的包装类型的?
缘由:
1:包装类中提供了各类用于操做基本数据类型的方法,主要的方法就是基本数据类型和字符串之间的相互的转换。
2:有些时候,基本数据类型不能直接使用,必须看成 Object 的实例才能使用。必须有对应的包装的类型才能知足需求。
自动装箱和拆箱
自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5后,Java引入了自动装箱(autoboxing)/拆箱(unboxing)
自动装箱底层实现:经过调用 Integer.valueOf(int) 实现。
自动拆箱底层实现:经过调用 对象.intValue()来实现的。
包装类空指针异常问题
null表示i没有指向任何对象的实体,但做为对象名称是合法的(无论这个对象名称存是否指向了某个对象的实体)。因为实际上i并无指向任何对象的实体,因此也就不可能操做intValue()方法,这样上面的写法在运行时就会出现NullPointerException错误因此自动装箱与拆箱的功能是所谓的“编译器蜜糖(Compiler Sugar)”,虽然使用这个功能很方便,但在程序运行阶段得了解Java的语义,如不熟悉特殊状况,可能会出错!
编程