JAVA基础10 Object类和String类



常见类:

.Object:Object是类层次结构的分类;Object类是每个类的超类.

Object常见的成员方法:

A.public int hashCode():返回的是该对象的哈希码值,哈希码值是通过哈希码表(Hashtable)里面的哈希算法算出来的,可以理解为地址值.

B.public final Class<?> getClass():返回的是Object正在运行的类;

C.public String getName():String的形式返回此class对象所表示的实体(,接口,数组类,基本类型或void)名称

补充:getClass()Object中的方法,getName()Class类中的方法;

D.toString():返回的是该对象的字符串表示,通常,toString()方法会返回一个以文本方式表示此对象的字符串;Eclipce的快捷键重写toString()方法  shift+Alt+s再按s

E.public static String toHexString(int i):16进制无符号整数形式返回一个整数参数的字符串表示形式

当没有重写toString()方法时:

s.toString()相当于s.getClass().getName()+@+(该方法所在的类名.toHexString(int i))

创建对象,直接输出对象名时,输出的是s.getClass().getName()+@+(该方法所在的类名.toHexString(int i))

toString()的源码:

public String toString() {

   return getClass().getName() + "@" +Integer.toHexString(hashCode()) ;

    }

    

getClass()返回的当前正在运行的类:Student

getName():返回的是全路径名称,是以String字符串形式显示来,org.westos_02.Student

@:地址标记

当类中重写了toString()方法时:

创建对象,直接输出对象名,输出按toString()方法所示输出.

例如:有类Student继承了Object;若在Student类中重写了toString()方法,输出的按toString()格式输出,若没有重写toString()方法,则输出s.getClass().getName()+@+(该方法所在的类名.toHexString(int i))

代码如下:


 

运行结果:

 

拓展:

Integer.toHexString(hashCode():返回一个整数的16进制数据

Integer:int型的一个包装类类型

Character:char类型的一个包装类类型;

F.public boolean equals(object obj):表示其他的某个对象是否与此对象相等;默认判断地址值;

Object中的源码:

 public boolean equals(Object obj) {

        return (this == obj);

}

若要比较两个对象是否相等,看两个对象中的内容是否相等,就需要重写equal()方法;

补充:obj instanceof Student:表示的是该obj对象是否是Student的实例化(考点!):instanceof

G.protected void finalize():当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法.什么时候调用这个方法不确定,要看GC垃圾回收器这个线程什么时候空闲!(System)

H.protected Object clone():创建并返回此对象的一个副本,返回的是Object类型;

注意:Object类中的clone方法执行特定的复制操作;若要复制的对象不能实现接口Cloneable,则会抛出CloneNotSupportException.

哪个方法执行复制操作,哪个方法抛出CloneNotSupportException.方法所在的类实现Cloneable接口.

例如:Student重写了clone()方法,所以类Student就要实现Cloneable接口,重写的clone()方法和测试类的主方法就要抛出CloneNotSupportException.

代码如下:

 

运行结果:

 

 

  1. String:

    String类代表字符串,JAVA中所有字符串面值;

    字符串是常量,一旦被赋值,其值不能被更改;

    方法区:字符串常量池

    如果我们创建一个字符串对象,给对象进行赋值,这个值在常量池中找,有的话就返回,没有就在常量池开辟空间.

    String类中常用的构造:

    public String():无参构造;

    public String(byte[] bytes):将字节数组转换为字符串;

    public String(byte[] bytes,int offest,int length):将字节数组的一部分转换为字符串;

    public String(char[] value):将字符数组转换为字符串;

    public String(char[] value,int offest,int count):将字符数组的一部分转换为字符串;

    public String(String original):将一个常量转换为字符串:由于String类型是不可变的,所以无需使用此构造方法;

    补充:数组中有没有length()?字符串中有没有length()?

    length:是数组的长度属性;数组中没有这个方法;

    字符串中有length()方法,返回字符串长度;`

    为了更好地理解String的构造方法,引出以下例子帮助理解:

    代码如下:

     

    运行结果:

     

     

    面试题:

    String s1=new String(hello);创建了几个对象;

    String s2=hello;创建了几个对象;

    答案:s1创建了两个对象,s2创建了一个对象,hello是在常量池中找到的;

    拓展:System.out.println(s1==s2);//false

            System.out.println(s1.equals(s2));//true

    ==比较的是地址值;

    equals默认比较的也是地址值,String重写了Object中的toString()方法,比较的是内容;

    以下代码可以更好地理解==equals的区别:

    代码如下:

     

    运行结果:

     

    当字符串进行相加时:

    如果是字符串变量相加:先开辟空间,后相加;

    如果是字符串常量相加:先相加,然后在常量池中找,是否有这个值,有就直接返回地址值,没有就创建

     

    例如:String类型变量,s1,s2,s3;展示了变量相加和常量相加的不同点:

    代码如下:

     

    运行结果:

     

     

    String类常用的成员方法:

    String类的常用的判断功能:

     boolean equals(Object obj):将此字符串与指定的对象比较

    boolean equalsIgnoreCase(String str):将此字符串和另一个字符串进行比较,忽略大小写

    boolean contains(String str):判断此字符串中是否包含str这个子字符串

    boolean startsWith(String str):判断是否以str子字符串开头

    boolean endsWith(String str):判断是否已str字符串结尾

    boolean isEmpty():判断字符串是否为空

    注意:

    String s = "" ;表示s字符串是空字符串

    String s = null ;空对象,连对象都没有.

    String类的获取功能:

     int length():获取字符串的长度

    char charAt(int index):返回指定索引处的字符!(重点)//遍历字符串用

    int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引(重点)

    为什么这里的参数是int类型,而不是char类型

    'a'97都代表'a'

    int indexOf(String str):返回指定字符串在此字符串第一次出现的索引!

    int indexOf(int ch,int fromIndex):返回此字符中从指定位置开始后第一次出现的索引

    int indexOf(String str,int fromIndex):返回此字符串中从指定位置开始后第一次出现的索引

     

    (重点)

    String substring(int start):截取:从指定位置开始截取,默认截取到末尾:包含start这个索引

    String substring(int start,int end):从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置

     

    需求:键盘录入一个字符串,求这个字符串中大写字符,小写字符,数字字符一共有多少个?

    分析: 1)定义三个统计变量;

             2)利用循环和length()以及charAt()相结合,遍历字符串;

  1. 判断每一个字符属于哪一种字符:

    问题:如何判断:

  1. 利用ACSII码表:A----65

    a-----97

    0-----48

    b.a<=charAt(x)&&charAt(x)<=z     统计小写字符变量++;

       A<=charAt(x)&&charAt(x)<=Z     统计大写字符变量++;

       0<=charAt(x)&&charAt(x)<=9     统计数字字符变量++;

     

    代码如下:

     

     

    运行结果:

     

     

    字符串的转换功能:(重点)

     byte[] getBytes():将一个字符串转换字节数组

    char[] toCharArray():(重点方法):将一个字符串转换成字符数组

    static String valueOf(char[] chs):将字符数组转换成字符串

    static String valueOf(int i):int类型的数据转换字符串

    注意:

    String类中的valueOf方法可以将任何数据类型转换成String

    String toLowerCase():将字符串转换成小写

    String toUpperCase():将字符串转换成大写

    String concat(String str):字符串拼接功能

    需求:键盘录入一个字符串,把这个字符串的首字母转成大写,其余为小写;

    分析: 1)截取第一个字符并转成大写

  1. 截取其余的转成小写

  2. 利用concat()进行拼接

    代码如下:

     运行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值