一.API使用步骤:
1.打开帮助文档。
2.点击显示,找到索引,看到输入框。
3.你要找谁?在输入框里输入,然后回车。
4.看包。java.lang下的类不需要导包,其他需要。
5.看类的解释和说明。
6.学习构造方法。
7.使用成员方法。
练习:获取键盘录入的字符串
查看类
java.util.Scanner:该类需要import导入后使用。
查看构造方法
public Scanner(InputStream source): 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
查看成员方法
public int nextInt():获取下一个int数字。
public String nextLine():获取下一行完整字符串。
使用Scanner类,完成接收键盘录入数据的操作,代码如下:
//1.导包
import java.util.Scanner;
public class Demo01_Scanner {
public static void main(String[] args) {
//2. 创建键盘录入数据的对象
Scanner sc = new Scanner(System.in);
//3. 接收数据
System.out.println("请录入一个字符串:");
String line = sc.next();
//4. 输出数据
System.out.println("您输入的字符串:"+line);
}
}
二. Object类
2.1 toString 方法
java.lang.object java中所有类的根类 所有的类都直接或间接继承自Object类
构造方法
public Obiect()
方法
public String toString()返回该对象的字符串表示.
在Object类中打印的是地址值,子类一般会重写此方法
返回对象的属性值
创建Person类, 并调用方法toString()
public static void main(Srting[] args){
Person s = new Person();
String str = s.toString();
System.out.println(str);
System.out.println(s.toString());
}
在输出语句中打印对象, 就是在调用对象的toString()方法
toString方法的重写
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person"+name+":"+age;
}
// 省略构造器与Getter Setter 空参构造 实参构造
}
Person类重写Object类的toString方法 返回对象的属性值
对于当前Person类来说就是返回name和age的值
电脑快捷键生成:alt + instert ------>toString
Person p = new Person("liuyan",66);
//当我们打印一个引用类型变量时 其实默认调用它的toString方法
System.out.println(p);
System.out.println(p.toString());
2.2equals方法
方法声明:
public boolean equals(Object obj):指示其他对象是否与此对象"相等";
如果不重写此方法 比较的是两个对象的地址值
子类一般会重写此方法 不再比较地址值 而是比较属性值
== 如果比较基本类型 比较的是基本类型的数值是否相等
如果比较引用类型 比较的是地址值是否相同;
equals 比较String类型 比较的是对象的内容是否相同
电脑快捷键生成: alt + instert ------> qeuals + hashCode
2.3hashCode方法
Object类
public int hashCode() 获取对像的哈希值
哈希值:可以理解为一个唯一值 相当于人一出生的身份号 可以理解为是逻辑地址值
//如果不重写hashC方法 比较两个对象的哈希值 就相当于比较两个对象的地址值
object obj = new object();
System.out.println(obj.hashCode());
System.out.println(obj.hashCode == obj);
//hashCode方法是可以重写的 实际上String类重写了Object的hashCode 主要按照内容进行重写的
// 比较两个字符串的hashCode不是比较地址值 而是比较两个字符串的内容
String s = "abc";
String s1 = "aac";
String s2 = "abc";
sout(s.hashCode());
sout(s1.hashCode());
sout(s.hashCode() == s1.hashCode()); //false 比较内容
sout(s.hashCode() == s2.hashCode()); //true 比较内容
//如果两个字符串的hashCode值不同 说明这两个字符串一定不同
//如果两个字符串的hashCode值相同 不能说明这两个字符串一定是相同的
//因为可能会出现特殊情况 字符串不同 计算的hashCode值相同
//(如:"重地" 与"通话" 这两个字符串的hashCode值是一样的 还需进行equals方法比较)
//此时hashCode值 无法确定这两个字符串是否相等 需要继续比较equals
//这样先比较hashCode 后比较equals的方式 可以提高比较的效率
**结论:
如果不重写Obiect类的hashCode方法 比较两个对象的hashCode就是比较两个对象的地址值
如果重写了Object类的hashCode方法 比较两个对象的hashCode就是比较两个对象的内容
如果想确定内容是否真的相同
可以先比较两个对象的hashCode
不同 说明这两个字符串一定不同
相同 不能说明这两个对象一定是相同 需要继续比较equals
不同 一定不同
相同
三.String类
3.1 字符串特点
java.lang.String
特点:
1. 所有字符串字面值 都是字符串对象 "abc"
2. 字符串是常量 一旦创建 不能改变
3. 因为不可改变 所以可以共享
3.2 字符串比较
构造方法
public String();
public String(String str);
例子:
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
String s4 = new String("abc");
sout(s1 == s3); //true 比较地址值 因为共享 故地址值也相同
sout(s1.equals(s3)); //true 比较内容
sout(s2 == s4); //false 比较地址值
sout(s2.equals(s4)); //true 比较内容
sout(s3 == s4); //比较地址值 false
sout(s3.equals(s4)); //比较内容 true
String s5 ="";
s5 += "abc"; //底层会对+=进行优化 得到一个新的对象
sout(s5 ==s1); // 地址值不相同
3.3 字符 字节数组 转换为字符串
String 构造方法
public String(char[] chs);
public String(char[] chs, int start, int length);
public String(byte[] bytes);
public String(byte[] bytes, int start, int length);
char[] chs ={'a','b','c','d','e'};
将字符数组转换为字符串
String s = new String(chs);
sout(s);
将字符数组的一部分转换为字符串 从索引1开始 转换3个
String s2 = new String(chs, 1 ,3);
sout(s2);
byte[] bytes = {65,66,67,68};
将字节数组转换为字符串
String s4 = new String(bytes);
sout(s4);
将字节数组的一部分转换为字符串 从0索引开始 转换2个
String s5 = new String(bytes, 0 ,2);
sout(s5);
3.3.1将字符串转换为字符数组
String类
public char[] toCharArray()
3.3.2将字符串转换为字节数组
String类
public byte[] getBytes();
String str = "Hello World";
//将字符串转换为字符数组
char[] chars = str.toCharArray();
for(int i = 0; i<chars.length;i++){
sout(chars[i])
}
//将字符串转换为字节数组
byte[] strbytes = str.getBytes();
fori{sout(strBytes[i])}
3.4 字符串遍历
String类
public char charAt(int index) 根据索引找字符
长度
数组 length属性
集合 size()方法
字符串 length()方法
String s = "I Love Java";
//获取字符串长度
sout(s.length());
for(int i = 0;i<s.length(); i++){
char ch = s.charAt(i);
sout(ch);
}
3.5 根据字符找索引
String类
方法: int indexOf(int ch) 查找当前字符 在字符串中第一次出现的索引位置
int indexOf(int ch, int fromIndex) 从fromIndex开始查询
String str = "I Love Java";
调用方法:
int index = str.indexOf('a');
sout(index);
//字符a第2次出现的位置
int index2 = str.indexOf('a',index + 1);
3.6 字符串截取
String substring(int startIndex) 从开始索引截取到末尾
String substring(int startIndex, int endIndex) [start, end) 截取前后索引指定的位置
调用方法(同上);
3.7 字符串大小写转换
String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写
字符串判断开头与结尾
boolean startsWith(String s) 判断开头
boolean endWith(String s) 判断结尾
调用方法:
String a = s.toLowerCase(); //转换小写
sout(a);
boolean s2 = s.startsWith("I"); //判断字符串是否是以I开头
sout(s2);
3.8 字符串拼接
String 类
String concat(String s) 字符串拼接 //与+作用类似 用处不大
String trim() 去掉字符串两端空格
案例:对比登录账号 密码是否正确