一、API

1.1 API概述

API (Application Programming Interface),Java API是一本程序员的字典,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

1.2 API使用步骤

1. 打开帮助文档。 
2. 点击显示,找到索引,看到输入框。 
3. 你要找谁?在输入框里输入,然后回车。 
4. 看包。java.lang下的类不需要导包,其他需要。 
5. 看类的解释和说明。 
6. 学习构造方法。

1.3 了解内容

1、类的基本功能
2、构造方法(创建对象方式)
3、方法(拥有功能)

二、Object类

2.1 概念

是所有类的父类,也叫做基类(超类),所有类都直接或间接继承于Object类,一个类如果没有显式继承任何一个类,那么默认继承Object类。

2.2 常用方法

2.2.1 finalize()方法

protected void finalize()

当垃圾回收器确定不存在对该对象的更改引用时,由对象的垃圾回收器调用此方法。子类重置系统资源或执行其他清除。

对于任何给定对象,Java虚拟机最多只调用一次finalize()方法。

2.2.2 hashCode()方法

int hashCode()

用于返回对象的哈希码值(可以理解为计算机关键对象存储地址计算的值),用于标识当前对象在内存地址中的编号。
在这里插入图片描述

2.2.3 equals()方法

boolean equals(Object obj)

用于判断指定对象与当前对象是否相等,在Object类中与==相同

		//一般子类会重写父类的这个方法
		public boolean equals(Object obj) {
    		return (this == obj);
		}

一般类会重写equals方法根据属性进行判断

@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Student other = (Student) obj;
			if (name == null) {
				if (other.name != null)
					return false;
			} else if (!name.equals(other.name))
				return false;
			return true;
		}

2.2.4 toString()方法

String toString()

返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

控制台输入输出都是字符串,将对象输出至控制台,实际上是调用该对象的toString方法,将该对象返回的字符串输出至控制台

		public String toString() {
    		return getClass().getName() + "@" + Integer.toHexString(hashCode());
		}

Object提供的toString()方法,返回的是当前对象的类名(全路径)@16进制hashcode值

一般子类会重写属性为拼接字符串打印每个属性的方法

		@Override
		public String toString() {
			return "Student [name=" + name + ", age=" + age + "]";
		}

面试题


finalfinalize()区别

  • final是关键字,finalize是方法
  • final代表最终的,可以用来修饰类、方法、属性
  • finalize方法是回收方法,当GC发现对于当前对象没有引用自动调用进行回收,每个对象只能调用一次finalize方法

hash值相同的两个对象值一定相同吗

  • 不一定,但是java中规定,如果两个对象值相同,那么hash值一定也相同
  • System.out.println(“Aa”.hashCode()); // 2112
  • System.out.println(“BB”.hashCode()); // 2112

为什么重写equals()方法必须重写hashCode()方法

  • java中规定,如果两个对象值相同,那么hash值一定也相同
  • 如果equals方法返回true那么两个对象的hash值一定相同
  • 反之不一定成立

equals()==的区别

  • equals()是Object提供的方法,==是比较运算符
  • == 常用与比较基本数据类型中数值类型值是否相等,比较引用数据类型时,比较的是两个对象是否为同一个对象(物理地址是否相同)
  • equals()是Object类提供的方法源码中使用的就是==,一般子类会重写equals()方法进行内容的比较
  • ==既能比较基本数据类型也能比较引用数据类型,equals()只能比较引用类型(参数为Object,只能使用多态传入任意对象类型)

三、String类

3.1 String类概述

  • String 类代表字符串。Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。

  • 在程序中使用双引号包裹的多个字符字符常量都可以称之为字符串类的对象

String类 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写小写的所有字符的字符串的副本。

3.2 String类的特点

String中保存的是字符串常量

  • 字符串不变:字符串的值在创建后不能被更改
		String str1="hello";
		String str2=" world!";
		String str1+=str2;
		//在常量池中会创建"hello" " world!" "hello world!"三个常量
		//str1起始保存"hello"地址,在修改后保存"hello world!"地址
		//变量修改修改的是保存的地址  实际数据还在内存中
  • 因为String对象是不可变的,所以它们可以被共享。
		String s1 = "abc";
		String s2 = "abc";
		// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。

在创建字符串常量时,首先会向常量池查找,如果已经存在则直接返回,不存在则创建

  • String的本质是
    • JDK8之前是char[] 数组
    • JDK8之后是byte[] 数组

3.3 常用构造方法

3.3.1 String()构造方法

 		public class StringTest {
			public static void main(String[] args) {
				String str1="";
				String str2=new String();
				System.out.println(str1==str2);//false
				System.out.println(str1.equals(str2));//true
			}
		}

与虽然str1与str2都代表""空字符串,但是由于str2是使用new关键字调用构造方法创建,存储在堆中,所以str1余str2地址不同

3.3.2 String(byte[] arr)构造方法

		public class StringTest {
			public static void main(String[] args) {
				byte [] b={65,66,67};
				String str1=new String(b);
				System.out.println(str1);//ABC
			}
		}

jdk8以后使用字节数组保存字符串,通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

3.3.3 String(char[] arr)构造方法

		public class StringTest {
			public static void main(String[] args) {
				char [] c={'a','b','c'};
				String str1=new String(c);
				System.out.println(str1);//abc
			}	
		}

3.3.4 String(String str)构造方法

public class StringTest {
	public static void main(String[] args) {
	String str1=new String("abc");
	System.out.println(str1);
	}
}

使用指定的字符串常量创建字符串对象

3.3.5 String(char[] arr,int startIndex,int endIndex)构造方法

public class StringTest {
	public static void main(String[] args) {
		char [] c={'a','b','c','d','e','f','g'};
		String str1=new String(c,2,5);
		//第一个int为起始索引   第二个int为长度
		//使用指定字符数组指定索引长度的内容创建字符串
		System.out.println(str1);//cdefg
	}
}

3.3.6 构造方法练习

将字节数组内容转换为字符串

不使用工具类思路:创建字符串变量遍历字节数组转换为字符之后拼接

	    //将字节数组内容转换为字符串输出
		byte [] b={65,66,67,68,69,70,71,72,73,74};
		//不使用工具类思路:创建字符串变量遍历字节数组转换为字符之后拼接
		String str1="";
		for (int i = 0; i < b.length; i++) {
			str1+=(char)b[i];
		}
		System.out.println(str1);//ABCDEFGHIJ

使用String构造方法思路:使用字节数组创建字符串构造方法创建

		//将字节数组内容转换为字符串输出
		byte [] b={65,66,67,68,69,70,71,72,73,74};
		//使用String构造方法思路:使用字节数组创建字符串构造方法创建
		String str2=new String(b);
		System.out.println(str2);//ABCDEFGHIJ

3.4 常用方法

3.4.1 length()方法

int length()

用于返回当前字符串中字符个数(返回底层数组长度)

	 String str="dasdasdgwerfwe";
	 System.out.println(str.length());//14

3.4.2 charAt(int index)方法

char charAt(int index)

用于获取当前字符串中指定索引对应的字符

	 String str="abcdefghijk";
	 System.out.println(str.charAt(0)); //a

3.4.3 concat(String str)方法

String concat(String str)

由于字符串是常量不可以修改,所以字符串String提供的方法会返回一个新字符串

	 String str1="abc";
	 String str2="def";
	 String str3=str1.concat(str2);
	 System.out.println(str1);//abc
	 System.out.println(str2);//def
	 System.out.println(str3);//abcdef

3.4.4 contains(String str)方法

boolean contains(String)

判断指定字符串在当前字符串中是否存在

	 String str1="abcdef";
	 System.out.println(str1.contains("b"));//true

3.4.5 startsWith(String str)/endsWith(String str)方法

boolean startsWith(String str)
boolean endsWith(String str)

判断当前字符串是否以指定字符串开头或结尾

	 String str1="Abcdef.com";
	 //判断字符串是否以A开头 以.com结尾
	 System.out.println(str1.startsWith("A"));
	 System.out.println(str1.endsWith(".com"));

3.4.6 getBytes()方法

byte[] getBytes()

用于获取当前字符串所代表的字节数组

	 String str1="Abcdef.com";
	 byte []b=str1.getBytes();
	 for (int i = 0; i < b.length; i++) {
		System.out.println(b[i]);
	}

3.4.7 indexOf(String str)/lastIndexOf(String str)方法

int indexOf(String str)
int lastIndexOf(String str)

用于获取指定字符串在当前字符串中第一次或最后一次出现的索引

	 String str1="Ab.cd.ef.com";
	 System.out.println(str1.indexOf("."));//2
	 System.out.println(str1.lastIndexOf("."));//8

3.4.8 replace(String str,String str)方法

String replace(String str,String str)

将当前字符串中指定字符串替换为另一个字符串

 String str1="你个死人,你全家都死了";
 String str2=str1.replace("死", "**");
 System.out.println(str2);

3.4.9 split(String str)方法

String[] split(String str)

使用指定分隔符分割字符串为字符串数组

	 String str1="色情,恐怖,枪,爆炸";
	 String[] splitArr = str1.split(",");
	 for(int i=0;i<splitArr.length;i++){
		 System.out.println(splitArr[i]);
	 }

3.4.10 substring(int index)方法

String substring(int index)

返回当前字符串指定索引后的字符串

String substring(int startIndex,int endIndex)

返回当前字符串前索引(包含)到后索引(不包含)之间的字符串内容

	 String str1="abcdefg";
	 String str2=str1.substring(3);
	 String str3=str1.substring(4,6);//截取的长度为后-前 起始为前索引
	 System.out.println(str1);
	 System.out.println(str2);
	 System.out.println(str3);

3.4.11 toCharArray()方法

char[] toCharArray()

将当前字符串创建新的char数组返回

	 String str1="abcdefg";
	 char[] charArray = str1.toCharArray();
	 for (int i = 0; i < charArray.length; i++) {
		System.out.println(charArray[i]);
	}

3.4.12 toUpperCase() /toLowerCase() 方法

String toUpperCase()
String toLowerCase()

将当前字符串中字母转换为大写/小写创建新的字符串返回

	String str1="abcdefg";
	System.out.println(str1.toUpperCase());//ABCDEFG
	System.out.println(str1.toLowerCase());//abcdefg

每日一点点进步
不进则退

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐