java基础入门程序员

Java基础——根类与String类

2019-02-18  本文已影响3人  阿Q说代码

转眼间我们已经工作完一周了,这周开始阿Q要不定时更新知识了,先让我们来学习一下java中的Object与string类吧。

Object类

API:Application Programming Interface 应用程序编程接口,Java API就是Java提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。

Object:所有类都直接或者间接的继承自Object类,是类层次结构的根类。
public int hashCode()

  1. 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
  2. 不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。

代码:

    public static void main(String[] args) {
        Object object = new Object();
        int hashCode = object.hashCode();
        System.out.println(hashCode);       //26171428

        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);
        Student s3 = s1;
            
        System.out.println(s1.hashCode());  //6330655
        System.out.println(s2.hashCode());  //31782850
        System.out.println(s3.hashCode());  //6330655  与s1的hashCode值相同
    }

public final Class getClass():此方法被final修饰表示不能被重写。此方法返回此 Object 的运行时类对象,也就是Class类的一个对象,此对象用来描述类的class文件。

public static void main(String[] args) {
    Student s = new Student("张三", 23);//创建Student对象 s
    //s对象调用getClass()返回一个描述Student类的class文件的对象,也就是Class类的对象
    Class clazz = s.getClass();     
    //clazz对象调用 Class类的getName() 返回一个String类型,类的全路径名
    String name = clazz.getName();
    System.out.println(name);   
    Student s1 = new Student(); //新创建了一个s1对象 
    //s1对象调用getClass() 返回一个描述Student类的class文件的对象,也就是Class类的对象
    Class clazz1 = s1.getClass();       
    //因为clazz和clazz1都是描述Student类的class文件的对象 所以他俩是同一个对象
    System.out.println(clazz == clazz1);    
}

Object的toString()

  1. 我们在打印一个对象的时候,默认调用的是对象的toString方法,如果该对象没有重写toString(),那么调用的是Object的toString()方法,因为继承了Object嘛;

  2. Object的toString方法返回类的全路径名称 + @ + 16进制哈希值, 这样返回一般没有意义;

    Object类中toString()的源码

    public Stirng toString() {
     return  getClass().getName() + "@" + Integer.toHexString(hashCode()) 
    }
    
  3. 我们一般在编写类的时候都重写Object的toString(),一般要求是把类里面的属性都显示出来;

代码:

public class Student {
    String name;
    int age;
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}
public static void main(String[] args) {
    Student s = new Student("张三", 23);
    System.out.println(s);      //这句话就相当于 System.out.println(s.toString());
}

Object的equals()

  1. Object中equals方法的源码

    public boolean equals(Object obj){
     return (this == obj);
    }
    
  2. 比较的引用类型的地址值,开发中我们调用equals方法是想比较对象里面的属性值,所以在编写类的时候一般重写Object中的equals方法,让其比较对象的属性值。

    代码:

public class Student {
   String name;
   int age;
   public Student(String name, int age){
       this.name = name;
       this.age = age;
   }
   //重写equals方法
   //参数必须是Object,因为重写Object的方法,方法体必须和Object的equals方法一模一样
   @Override
   public boolean equals(Object obj) {      
       Student s = (Student)obj;//因为obj不能调用Student特有的内容,所以向下转型
       return this.name.equals(s.name) &&this.age == s.age;                             //this.name.equals(s.name) 这儿的equals方法是String类重写Object后的equals方法
    }
  }
  public static void main(String[] args) {
      Student s1 =  new Student("张三", 23);
      Student s2 =  new Student("张三", 23);
      boolean b = s1.equals(s2);        //比较2个对象属性是否相同
      System.out.println(s1 == s2);     //false 比较的是两个对象的地址值是否相同
      System.out.println(b);            //true
   }
==号和equals方法的区别

Scanner

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);        //创建键盘录入对象
        if(sc.hasNextInt()) {               //判断键盘录入的是否是int类型的数据
            int i = sc.nextInt();           //键盘录入的数据存储在i中
            System.out.println(i);
        }else {
            System.out.println("输入的类型错误");
        }
    }

bug问题:先用nextInt()接收int类型,再用nextLine()接收字符串的时候,会导致nextLine() 直接把回车接收到了, nextLine 不能继续接收字符串了。

  1. 先获取一个数值后,再创建一个新的键盘录入对象获取字符串。
  2. 把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。

String类

构造方法

    String s = "abc";  s就是String的一个对象
    public String():空构造
    public String(byte[] bytes):把字节数组转成字符串
    public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
    public String(char[] value):把字符数组转成字符串
    public String(char[] value,int index,int count):把字符数组的一部分转成字符串
    public String(String original):把字符串常量值转成字符串

代码:

    public static void main(String[] args) {
        String s = "abc";
        System.out.println(s1);         //打印出:abc
        
        String s1 = new String();
        System.out.println(s1);         //s1是个空串
        
        byte[] arr1 = {97,98,99};       
        String s2 = new String(arr1);   //解码,将计算机读的懂的转换成我们读的懂
        System.out.println(s2);         //打印出:abc
        
        byte[] arr2 = {97,98,99,100,101,102};
        String s3 = new String(arr2,2,3);   //将arr2字节数组从2索引开始转换3个
        System.out.println(s3);         //打印出:cde
        
        char[] arr3 = {'a','b','c','d','e'};    //将字符数组转换成字符串
        String s4 = new String(arr3);
        System.out.println(s4);         //打印出:abdcde
        
        String s5 = new String(arr3,1,3);   //将arr3字符数组,从1索引开始转换3个
        System.out.println(s5);         //打印出:bcd
        
        String s6 = new String("heima");
        System.out.println(s6);         //打印出 :heima
    }

String的判断功能

String的获取功能

String的转换功能

String的其他功能

String和字符数组的转换

String和字节数组的转换

String类的知识就先讲到这里了,想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

上一篇下一篇

猜你喜欢

热点阅读