【JavaSE】Java面向对象三大类以及异常处理(下)

一.String类

1.1String类的两种实例化方式:

直接赋值:

String str = "Java";//str是一个对象,所以“Java”就应该保存在堆内存中
System.out.println(str);

String 也有构造方法:

public String (String str);

传统赋值:

String str = new String("Java");
System.out.println(str);

1.2字符串相等比较:

== 与 equals

== 比较的是对象内存地址的数值

equals 比较的是字符串内容的比较

例如:

Integer a = 55;
Integer b = 55;
System.out.println(a == b);//true
System.out.println(a = new Integer(55));//false
System.out.println(a.equals(b));//true
System.out.println(a.equals(new Integer(55)));//true

1.3String两种实例化的区别

     1.3.1

String str1 = "Java";
String str2 = "Java";
String str3 = "Java";
System.out.println(str1 == str2);//true
System.out.println(str2 == str3);//true
System.out.println(str3 == str1);//true

str1,str2,str3,只开辟了一块内存空间,共用一个地址。

     1.3.2

String str = new String("Java");

Java占了一个内存空间,new出来一个新的内存空间,造成了内存浪费。而且也可能会造成对字符串共享的问题。

 

在String类中提供有方法入池操作:public String intern();

String str1 = new String("Java").intern();
String str2 = "Java";
System.out.println(str1 == str2);//true

String类中两种对象实例化的区别:

1.直接赋值:只会产生一块对内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用(推荐使用)

2.构造方法:会开辟两块对内存空间,有一块为垃圾空间,不会自动保存在对象池中,可以使用intern()方法来手工入池。

1.4字符串常量不可变更

字符串一旦定义不可变更

例:

String str = "Java";
str = str + "Easy";
str += "???";
System.out.println(str);//Java Easy ???

以上字符串的变更是字符串对象的变更而不是字符串常量的变更。

1.6字符与字符串

String< -- >char

1.  字符数组char[ ]->String

public String(char[ ] value1);

public String(char[ ] value1,int offset,int count);

2.  将字符串按照索引转为单个字符String->char

public char charAt(int index);取得指定索引的字符返回

3.  将字符串转为字符数组String->char[ ]

public char[ ] toCharArray( );

1.7字节与字符串

byte[ ] -> String

//String类构造方法

public String(byte[ ] bytes)

String -> byte[ ]

**********public byte[ ] get Bytes( )**********

public byte[ ] get Bytes(String charset):按照指定编码转为字节数组

1.8字符串比较

1.8.1不区分大小写的相等比较

public boolean equalsIgnoreCase(String anotherString);

1.8.2比较两个字符串的关系

public int compareTo(String anotherString)

//>0:表示本字符串大于目标字符串

//=0:表示两者相等

//<0:表示本字符串小于目标字符串

1.9字符串查找

从一个完整的字符串之中判断指定内容是否存在

1.9.1判断指定字符串是否存在

public boolean contains(String prefix);

1.9.2判断是否以指定字符串开头

public boolean startsWith(String prefix);

public boolean startsWith(String prefix,int offset);

1.9.3判断是否以指定字符串结尾

public boolean endsWith(String suffix);

1.10字符串的替换*******************

public String replaceAll(String regex,String replacement);

//将目标字符串全部替换为str.replaceAll("1","_"):将str中的所有1换成_

1.11字符串拆分*******************

public String[ ] split(String regex);将字符串全部拆分

public String[ ] split(String regex,int limit);

特殊字符需要转译后拆分   eg:\\.

1.12字符串截取*******************

public String substring(int brginIndex):从指定索引截取到结尾

public String substring(int beginIndex,int endIndex):从指定索引截取部分内容

1.13字符串的其他操作方法

1.  去除字符串的左右空格,保留中间空格:

public String trim( );

2.  字符串大小写转换(全部大小写):

public String toUpperCase( );

public String toLowerCase( );

3.  判断字符串是否为空字符串("",不判断null):

public boolean isEmpty( );

1.14两只SB(StringBuffer、StringBuilder)*******************

1.  字符串拼接反发:

public synchronized StringBuffer append(各种数据类型)

2.  StringBuffer与String的相互转换:

String->StringBuffer:

I.  append( );

II.  调用StringBuffer构造方法 new StringBuffer("");

StringBuffer->String

调用StringBuffer.toString( );

3.  StringBuffer常用操作方法

3.1字符串反转

reverse( ):StringBuffer

3.2删除指定范围的数据

delete(int start,int end):StringBuffer

insert(int offset,各种数据类型):StringBuffer

解释String、StringBuffer与StringBuilder的区别

1.String内容不可变,两个SB内容可以修改。

2.StringBuffer(JDK1.0),采用同步处理,线程安全,效率较低

3.StringBuilder(JDK1.5),采用异步处理,线程不安全,效率较高,当在String对象进行“+”,编译时会将String类变为StringBuilder进行append( )处理。

二.Object类(RealFather)

使用Object类接收所有类的对象

例:

class Person{

}
class Student{

}
public class Test{
    public static void main(String[ ] args){
        fun(new Person());
        fun(new Student());
    }
    public static void fun(Object obj){
        System.out.println(obj);
    }
}

1.toString( )---取得对象的信息

系统输出默认调用toString( )方法。

Object类toString( )只是简单输出当前所引用的类名称以及对象地址。

如果想在类中取得本类属性信息,需要覆写toString( );

2.equals( )---对象比较

3.接受引用数据类型

Object可以接收所有引用数据类型:数组、类、接口。

三.包装类

1.包装类的分类

a.数值型包装类(Number的直接子类):

Byte、Double、Short、Long、Float、Integer。

会发生类型转换异常。NumberFormatException

b.对象型包装类(Object的直接子类):

Boolean、Character(char)

2.装箱与拆箱

装箱:将基本数据类型变为包装类对象。利用每个包装类提供的构造方法实现。

拆箱:将包装类中包装的基本类型数据类型去除。利用xxValue();

对于Interge var = ? 在[-128,127]的赋值,Intrger对象在常量池产生,会复用已有对象;这个区间外的所有数据,都在堆上产生,不会服用以后对象。

Integer i1 = 10;
Integer i2 = 10;
i1 == i2;//true
Integer i3 = 200;
Integer i4 = 200;
i3 == i4;//false

阿里编码规范:int or Integer?

I.[强制]所有POJO类(简单Java类)属性必须使用包装类。

II.[强制]RPC方法返回值和参数必须使用包装类。

III.[推荐]所有的局部变量使用基本类型。

【简单Java类】【类中只有成员变量、构造方法、getter/setter】

3.类与字符串的转换。

3.1String -->基本数据类型

String --> int:Integer.parseInt(str);

3.2基本数据类型-->String

a.""+基本数据类型

b.String类提供的静态方法valueOf(基本类型)---推荐,不产生垃圾空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值