自学Java基础知识第十一天
day11
1. Object类型
1.1 equals方法
- equals : 方法功能用于判断两个对象是否相等, 比较的两个对象分别是方法的调用者对象与参数对象obj
- equals方法比较:
1) Object源代码中 : 比较的是两个对象的内存地址是否相等
2) 实际开发中, 通常不进行对象的内存地址比较, 比较对象中的成员变量比较有意义, 需要子类重写父类中的equals方法功能, 使用快捷键 alt + shift + s , 选择equals方法, 重写之后就是比较对象中的成员变量
举例 : 全班有50个学生, 录入学生的信息, 每一个学生具有姓名和年龄属性, 录入信息时, 需要去掉重复的学生信息, 如果两个学生 : 姓名和年龄都相同,认为这个同一个人, 需要去重复
代码
package com.ujiuye.object; // 父类就是Object public class Person {
private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } |
package com.ujiuye.object; public class Test { public static void main(String[] args) { /*Person p = new Person(); Person p1 = new Person();
* public boolean equals(Object obj) { return (this == obj); // p == obj } // this : 哪个对象调用了带有this的方法, this关键字表示哪个对象 * * boolean boo = p.equals(p1); System.out.println(boo);// false */ Person pp1 = new Person("张三",20); Person pp2 = new Person("张三",21);
System.out.println(pp1.equals(pp2));// true } } |
1.2 ==和equals的使用比较
- == : 比较运算符
1) 比较基本数据类型 : 比较的是数据对应的数值是否相等 4 == 3
2) 比较引用数据类型 : 比较的是两个引用数据类型的地址是否相等
- equals : 是方法功能
1) 不能比较基本数据类型 : 因为基本数据类型无法调用任何方法功能
2) equals可以比较引用数据类型:
a : Object源代码比较的是两个对象地址是否相等
b : 重写之后的equals方法功能, 比较的是两个对象中,成员变量的是是否相等
2. Scanner类型
- Scanner类型 : 表示扫描器, 将设备上输入的基本数据类型和字符串进行扫描, 来自于java.util包中
- Scanner类型构造方法:
Scanner(InputStream source) : InputStream表示输入流资源, System.in 系统的标准输入就是一个输入流资源, 默认关联到通过键盘录入
- Scanner类型中的常用方法功能: 扫描基本数据类型
1) nextByte() : 接收通过键盘录入字节整数, 返回值结果byte类型,范围-128---127
2) nextShort():
3) nextInt():
4) nextLong():
5) nextFloat():
6) nextDouble():
7) nextBoolean():
注意 : 通过Scanner类型录入基本数据类型的方法中,缺少nextChar(), 因为通过键盘录入字符串功能替代输入字符
- Scanner类型扫描字符串:
1) next() : 扫描通过键盘录入的字符串, 返回值类型String类型, 可以通过空格区分多个数据,也通过回车换行区分多个数据
2) nextLine() : 扫描通过键盘录入的字符串,通过回车换行区分多个数据, 这个方法使用时, 如果前面的数据有回车换行, 那么nextLine会获取到这次换行, 以为数据输入结束
代码
package com.ujiuye.scanner; import java.util.Scanner; public class DemoScanner { public static void main(String[] args) { Scanner sc = new Scanner(System.in); /*System.out.println("请输入一个字节数据:"); byte b = sc.nextByte(); System.out.println(b);*/
// 1. 通过键盘录入字符串 System.out.println("请输入一个字符串:"); String s = sc.next(); String s1 = sc.next(); System.out.println(s+"---" + s1);
// 2. System.out.println("请继续输入字符串:"); String s2 = sc.next(); String s3 = sc.next(); System.out.print(s2 + "++" + s3);
System.out.println("--------------");
// 3. nextLine(); String s4 = sc.nextLine(); String s5 = sc.nextLine(); String s6 = sc.nextLine(); System.out.println(s4 + "ppppp" + s5); } } |
3. Random类型(扩展)
- Random类型 : 来自于java.util包, 表示生成随机数
- Random类型中的常用方法功能:
1) nextInt(int n) : 表示随机生成一个整数,整数范围[0,n), 实际数据范围0-(n-1)
2) nextDouble() : 表示随机生成一个浮点类型, 范围[0.0 , 1.0) , 实际数据范围, 包括0.0,不包括1.0
代码
package com.ujiuye.scanner; import java.util.Random; public class DemoRandom { public static void main(String[] args) { // 1. 创建出一个Random类型对象 Random ran = new Random();
// 2. 需求: 1-100之间的任意一个随机数 int number = ran.nextInt(100)+1;// (0-99) +1 ---> 1-100 System.out.println(number); int num = ran.nextInt(3);//0-2 System.out.println(num);
// 3. 生成一个随机浮点类型 double d = ran.nextDouble(); System.out.println(d); } } |
4. String类型
4.1 String类型概述
- String类型, 来自于java.lang包, 用于表示字符串类型
- 在java中, 所有的字符串常量,都是String类型的对象(举例 “abc”, “hello”)
- 字符串称为常量, 字符串表示值定义之后不可改变; String类型底层将一个字符串以字符数组的形式进行存储, private final char value[]; 在整个String类型中, 没有任何方法功能修改char类型数组value , 既然不能修改,因此称字符串为常量
- 字符串常量, 存储在常量池中, 在方法区中
4.2 String类型构造方法
- String() : 表示创建出一个空字符串序列 “”
- String(String s) : 表示创建出一个与参数字符串s序列相同的字符串
- String(byte[] b) : 表示将参数字节数组b中的数据参数平台默认编码表, 将字节数据转换成字符, 将字符进行拼接, 转换成一个字符串
- String(byte[] b, int beginIndex,int length): 主要是将字节数组的一部分转换成字符串
1) 从字节数组b的beginIndex索引位置开始
2) length : 截取length个字节(表示个数)
- String(char[] ch) : 表示将参数ch字符数组中的内容转换成一个字符串
- String(char[] ch, int beginIndex,int length) : 主要是将字符数组的一部分转换成字符串
3) 从字符数组ch的beginIndex索引位置开始
4) length : 截取length个字符(表示个数)
代码
package com.ujiuye.string; public class Demo02_String类型构造 { public static void main(String[] args) { // 1. String() String s = new String(); System.out.println(s + "-----------");// "" 空字符串序列
String s1 = " "; System.out.println(s1 + "---------");
// 2. String(String s) // s2 对象创建过程 : 需要在内存中创建出两块空间 // 1) new 关键字在堆内存中开辟空间地址, 赋值给s2对象 // 2) "abc" 需要在常量池中开辟空间,假设0x001 String s2 = new String("abc"); System.out.println(s2);// abc
// 3) 重复使用了常量池空间0x001 String s3 = "abc"; System.out.println(s2 == s3);// false
// 3. String(byte[] b) byte[] b = {97,98,99,100};// a String s4 = new String(b); System.out.println(s4);// abcd
// 4. String(byte[] b, int index, int length) String s5 = new String(b, 1, 2); System.out.println(s5);// bc
// 5. String(char[] ch) char[] ch = {'a','A','1','?','家'}; String s6 = new String(ch); System.out.println(s6);// aA1?家
// 6. String(char[] ch, int beginIndex,int length) // 从字符数组ch的beginIndex索引位置开始 // length : 截取length个字符(表示个数) String s7 = new String(ch,2,3); System.out.println(s7);// 1?家 } } |
4.3 String类型的判断功能
- equals(Object obj) : 是String类型从父类Object继承而来,重写方法功能, 重写之后比较的就是方法调用字符串与参数对象obj字符串内容是否完全相等, 返回值类型boolean
- equalsIgnoreCase(String anotherString) : 方法调用字符串与参数字符串内容是否相等, 但是忽略大小写
- startsWith(String prefix): 判断方法调用字符串是否以参数字符串为前缀(开头)
- endsWith(String prefix): 判断方法调用字符串是否以参数字符串为后缀(结尾)
- contains(String s) : 判断方法调用字符串是否完全包含参数字符串s, 完全包含返回true, 否则返回false
- isEmpty() : 验证方法调用字符串是否为空字符串, “”就是一个空字符串, 如果是空字符串返回true, 否则返回false
代码
package com.ujiuye.string; public class Demo03_String类型判断功能 { public static void main(String[] args) { // 1. equals() String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); String s4 = "abc "; String s5 = "Abc";
System.out.println(s1.equals(s2));// true System.out.println(s1.equals(s3));// true System.out.println(s1.equals(s4));// false System.out.println(s1.equals(s5));// false
System.out.println("------------------");
// 2. equalsIgnoreCase(String s) : 用于区分字母大小写 // 可以在验证码比较中进行使用 System.out.println(s1.equalsIgnoreCase(s5));// true String s6 = "1"; String s7 = "一"; String s8 = "壹"; System.out.println(s6.equalsIgnoreCase(s7));// false System.out.println(s7.equalsIgnoreCase(s8));// false
System.out.println("+++++++++++++++");
// 3. 验证人姓名 : 判断是否姓张 String name = "张三"; boolean boo = name.startsWith("张"); System.out.println(boo);// true
System.out.println(name.startsWith("三"));// false
// 4. 验证文件是不是txt文件 String file = "abc.txt"; // txt boolean boo1 = file.endsWith("txt"); System.out.println(boo1);// true
System.out.println("??????????????????");
// 5. contains(String s) String s9 = "123hello"; String s10 = "33h"; System.out.println(s9.contains(s10));// false
System.out.println(s9.contains("h3"));// false
System.out.println(s9.contains("el"));// true
System.out.println("++++++++++++++");
// 6.isEmpty() : 验证方法调用字符串是否为空字符串, “”就是一个空字符串, 如果是空字符串返回true, 否则返回false System.out.println("".isEmpty());// true System.out.println(" ".isEmpty());// false } } |
4.4 String类获取功能
- length() : 获取到字符串中的字符个数, 如果字符串length() 结果为0, 那么这个字符串调用isEmpty()方法功能结果为true
- charAt(int index) : 将字符串中index索引位置对应的字符获取到, 返回值类型char类型
- substring(int beginIndex) : 将字符串从beginIndex索引位置开始截取, 一直截取到剩下的全部,返回新的字符串
- substring(int beginIndex,int endIndex) : 将字符串从beginIndex索引开始, 到endIndex-1索引位之间的字符序列获取到, 截取出的新字符串,返回新的字符串
注意 : Java给开发人员提供源代码中, 涉及到两个索引位操作的,一般包含开始索引而不包含结束索引
- indexOf(String str) : 获取到参数str在方法调用字符串中第一次出现的索引位置, 如果找到了返回 >= 0 索引值, 如果没有找到,返回值负数
- indexOf(String str, int beginIndex) : 从参数beginIndex索引位置开始, 向后寻找str在方法调用字符串中第一次出现的索引位置
注意 : 结果表示从beginIndex索引位置开始向后寻找, 找到了, 从找到的字符, 从头开始计算出现的索引位置
- valueOf(Object obj) : 静态方法, 表示将其他数据类型转换成字符串类型
代码
package com.ujiuye.string; public class Demo04_String类获取功能 { public static void main(String[] args) { // 1. length() : String s1 = ""; System.out.println(s1.length());// 0
String s2 = "123 67yuit"; System.out.println(s2.length());// 11
// 2. charAt(int index) char ch = s2.charAt(8); System.out.println(ch);// u
// 3. 字符串遍历: 获取到字符串中的每一个字符 for(int index = 0; index < s2.length(); index++) { char ch1 = s2.charAt(index); System.out.print(ch1 + "---"); }
System.out.println();
// 4. substring(int index): String s3 = "helloworld"; String newS3 = s3.substring(4);//oworld System.out.println(newS3);
// substring(int beginIndex, int endIndex): String s4 = s3.substring(2, 6);//llow System.out.println(s4);
// 5.indexOf(String str) : 获取到参数str在方法调用字符串中第一次出现的索引位置, 如果找到了返回 >= 0 索引值, 如果没有找到,返回值负数 int index1 = s3.indexOf("o"); System.out.println(index1);// 4
System.out.println(s3.indexOf("oo"));// -1
// 6. indexOf(String str, int index); int index2 = s3.indexOf("o", 5); System.out.println(index2);// 6
// 7. valueOf String boo = String.valueOf(true); System.out.println(boo + 123);// true123 } } |
4.5 String类型转换功能
- getBytes() : 将方法调用字符串通过平台默认编码集, 字符转换成字节数据, 返回一个字节数组
- toCharArray() : 将方法调用字符串中的字符序列,转换成一个字符数组
- toUpperCase() : 将方法调用字符串中的所有字母, 变成大写字母, 返回全新字符串
- toLowerCase() : 将方法调用字符串中的所有字母, 变成小写字母, 返回全新字符串
代码
package com.ujiuye.string; import java.util.Arrays; public class Demo05_String类转换功能 { public static void main(String[] args) { // 1.getBytes() String s = "1234"; byte[] b = s.getBytes(); System.out.println(Arrays.toString(b));// [49, 50, 51, 52]
// 2.toCharArray() String s1 = "hello在家?>>>"; char[] ch = s1.toCharArray(); System.out.println(Arrays.toString(ch));//[h, e, l, l, o, 在, 家, ?, >, >, >]
// 3.toUpperCase() : 将方法调用字符串中的所有字母, 变成大写字母, 返回全新字符串 String s2 = s1.toUpperCase(); System.out.println(s2);// HELLO在家?>>>
String s3 = "HelloWorld"; // 4.toLowerCase() : 将方法调用字符串中的所有字母, 变成小写字母, 返回全新字符串 String s4 = s3.toLowerCase(); System.out.println(s4);// helloworld } } |
4.6 String类型其他功能
- replace(String old, String newString): 将字符串中所有的old字符串部分替换成newString, 返回替换后的新字符串
- trim() : 去空格, 将字符串的前后的空格,tab缩进去除掉, 但是字符串中的空格无法去除, 返回一个去除空格后的新字符串
代码
package com.ujiuye.string; public class Demo06_String类其他功能 { public static void main(String[] args) { String s = "HelloWorldooo"; String sNew = s.replace("o", "*"); System.out.println(sNew);// Hell*W*rld***
// trim() String name = " 张三 "; String rightName = "张三";
String newName = name.trim(); System.out.println(newName); System.out.println(newName.equals(rightName));// true
String s1 = " 123 abc 你好 * "; String s1New = s1.trim(); System.out.println(s1New); } } |
5. Math类(了解)
- Math类 : 来自于java.lang包, 用于封装常用的数学运算
- Math类的成员常量:
public static final double E : 自然对数
public static final double PI : 表示圆周率, 3.14...
- Math类中构造方法,私有化,证明不能创建Math对象
- Math类中所有方法功能都是static静态, 类名.直接调用
常用方法功能:
1) abs(double d) : 获取到参数的绝对值, 将绝对值结果进行返回
2) ceil(double d) : 将参数d进行向上取整, 返回值类型double
3) floor(double d) : 将参数d进行向下取整, 返回值类型double
4) round(double d) : 根据参数d第一位小数值,决定向上还是向下取整, 规则 : 四舍五入
5) max(int a, int b): 获取出两个数值中的较大值, 将较大值进行返回
6) min(int a, int b) : 获取出两个数值中的较小值, 将较小值进行返回
代码
package com.ujiuye.math; public class Demo01_Math { public static void main(String[] args) { // 1. Math类中静态常量 System.out.println(Math.E);// 2.718281828459045 System.out.println(Math.PI);// 3.141592653589793
// 常用方法 double d = Math.abs(-3.3); System.out.println(d);// 3.3
double d1 = Math.ceil(3.01); System.out.println(d1);// 4.0
double d2 = Math.floor(3.01); System.out.println(d2);// 3.0
long l = Math.round(4.56); System.out.println(l);// 5
long l2 = Math.round(4.46); System.out.println(l2);// 4
long l3 = Math.round(4.50); System.out.println(l3);// 5
int max = Math.max(3, 3); System.out.println(max);// 3
int min = Math.min(6, 9); System.out.println(min);// 6 } } |