Java基础——根类与String类

简介: Java基础——根类与String类

转眼间我们已经工作完一周了,这周开始阿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())
}
  1. 我们一般在编写类的时候都重写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);
}
  1. 比较的引用类型的地址值,开发中我们调用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方法的区别
  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值;
  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。

Scanner

  • hasNextInt():判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
  • nextInt(): 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,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的判断功能

  • boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
  • boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
  • boolean contains(String str):判断大字符串中是否包含小字符串
  • boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
  • boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
  • boolean isEmpty():判断字符串是否为空

String的获取功能

  • int length():获取字符串的长度。
  • char charAt(int index):获取指定索引位置的字符
  • int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
  • int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
  • int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
  • int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
  • int lastIndexOf(int ch):从最后往前数返回指定字符在此字符串中第一次出现处的索引。
  • int lastIndexOf(String str):从最后往前数返返回指定字符串在此字符串中第一次出现处的索引。
  • int lastIndexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置往前数第一次出现处的索引。
  • int lastIndexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置往前数第一次出现处的索引。
  • String substring(int start):从指定位置开始截取字符串,默认到末尾。
  • String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

String的转换功能

  • byte[] getBytes():把字符串转换为字节数组。
  • char[] toCharArray():把字符串转换为字符数组。
  • static String valueOf(char[] chs):把字符数组转成字符串。
  • static String valueOf(int i):把int类型的数据转成字符串。
    注意:String类的valueOf方法可以把任意类型的数据转成字符串。
  • String toLowerCase():把字符串转成小写。
  • String toUpperCase():把字符串转成大写。
  • String concat(String str):把字符串拼接。

String的其他功能

  • String replace(char old,char new): 把一个字符串中的所有old字符用new字符替换
  • String replace(String old,String new):把一个字符串中的所有old小串用new新串替换
  • String trim():去掉两端的空格
  • int compareTo(String str):按照字典顺序比较字符串(暂时不用掌握)
  • int compareToIgnoreCase(String str):不区分大小写的按照字典顺序比较字符串(了解)

String和字符数组的转换

  • String --> char[]==>toCharArray();
  • char[] --> String
    ==> new String(char[] chs);
    ==> static String valueOf(char[] chs);

String和字节数组的转换

  • String --> byte[]==>getBytes();
  • byte[] -->String==>new String(byte[] bys);


相关文章
|
26天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
110 65
|
18天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
41 17
|
10天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
14天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
54 4
|
15天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
32 2
|
19天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
23天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
23天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
23天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
23 3
|
26天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
22 5