版权声明: https://blog.csdn.net/qq_40794602/article/details/86775811
Java API概述:
- API(Application Programming Interface):应用程序编程接口
- JAVA API:就是java提供给我们使用的类,这些类将底层的实现封装起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用就好了
- 我们需要学习Java开发文档如何使用
- Object是超级类,任何类都会继承Object类,你不写,父类默认是Object
Object类的概述:
- Object是类层次结构的根类
- 所有类都直接或者间接的继承Object类
- Object类的构造方法(只有一个无参构造方法):public Object()
- 子类的构造方法默认访问的是父类的无参构造方法
Object的hashCode方法:
- Object有一个方法 public int hashCode()
- 方法返回对象的哈希码值,默认情况下该方法会根据对象的地址来计算
- 不同对象的hashCode()一般来说不会相同,但同一个对象的hashcode值肯定是相同的
- hashCode不是对象的实际地址值,可以理解为逻辑地址值
- Java中八大基础数据类型没有hashCode方法
- EG:
public class J1 { public static void main(String[] args) { int [] a = new int[9]; int [] b = a; System.out.println(a.hashCode()); System.out.println(b.hashCode()); //因为a和b指向同一个地址,所以打印的是一样的结果 } }
Object的getClass方法:
- public final Class getClass()
- 返回此object运行时类
- 可以通过class类中的一个方法,获取对象的真实类的全名称
- EG:
public class J1 { public static void main(String[] args) { A a = new A(); Class cls = a.getClass(); System.out.println(cls); } } class A{ }
Object类的toString 方法:
- toString方法返回此对象的字符串表示:包名+@+Integer.toHexString(d.hashCode())
- toString方法默认返回的字符没啥用,所以一般建议在子类中重写此方法
- 打印对象,默认就是调用toString方法
- 此方法一般用于自定义字符串输出
- EG:
public class J1 { public static void main(String[] args) { A a = new A("我爱罗"); System.out.println(a); } } class A{ String name; public A(String name){ this.name = name; } @Override public String toString() { return "A [name=" + name + "]"; } //Source -> Generate toString 可以快速生成代码 }
Object的equals方法:
- 表示与其它对象是否相等
- 默认情况下比较的是对象的引用(地址)否相同
- 由于比较对象的引用没有意义,一般建议重写此方法
==号与equals方法的区别 面试题:
- ==是一个比较运算符号,即可以比较基本数据类型,也可以比较引用数据类据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
- equals方法是一个方法,只能比较引用数据类型,所有对象都会继承object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
Scanner类详细讲解:
- Scanner是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
- Scanner的成员方法(举例两种):hasNextXX 判断是否还有下一个输入项,其中Xxx可以是Int,Double等,如果需要判断是否包住字符串,则可以省略Xxx;nextXX 获取下一个输入项,Xxx的含义和上个方法的Xxx相同
- 使用nextInt()可以获取键盘上的一个整数,nextLine()可以获取键盘上的一个字符串,当获取一个整数后又获取一个字符串会使得获取到的字符串仅仅是一个换行符,连续两次调用nextLine就可以解决,第一个获取换行符,第二个获取我们想要输入的字符串
String的构造方法:
- public String()
- public String(byte[] bytes):把字节数组转成字符串
- public String(byte[] bytes,int index,int length):把字节数组的一部份转成字符串
- public String(char[] value,int index,int count):把字符数组的一部份转成字符串
- public String(String original) :初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String类的判断功能【掌握】:
public static void main(String[] args) {
//String类的判断功能【掌握】
// 1.public boolean equals(Object anObject)
// 判断字符串是否一样
String s1 = "abc";
String s2 = "ab" + "c";
System.out.println(s1.equals(s2));
// 2.public boolean equalsIgnoreCase(String anotherString) 用在验证码
// 判断字符串是否一样,忽略大小写
String s3 = "Abc";
System.out.println("s1与s3:" + s1.equals(s3));
System.out.println("s1与s3:" + s1.equalsIgnoreCase(s3));
// 3.public boolean contains(CharSequence s)
// 判断字符串是否包含哪字符串
String s4 = "I Hate You!";
System.out.println(s4.contains("Love"));
// 4.public boolean startsWith(String prefix)
// 判断字符串是否以什么开头
String s5 = "lucy";
System.out.println(s5.startsWith("A"));
// 5.public boolean endsWith(String suffix)
// 判断字符串是否以什么结尾
String s6 = "lily.png";
System.out.println(s6.endsWith(".png"));
//String s6 = "lily.xls";
// 6.public boolean isEmpty()
// 判断字符串是否为空字符串
String s7 = "java";
System.out.println(s7.isEmpty());
}
String 类的获取功能【掌握】:
public static void main(String[] args) {
//String 类的获取功能【掌握】
// 1.int length():获取字符串的长度
String s1 = "520java中";
System.out.println("s1的长度:" + s1.length() );
// 2.char charAt(int index):获取指定索引位置的字符
String s2 = "studio";
char c = s2.charAt(0);
System.out.println(c);
// 3.int indexOf(int ch):获取指定字符在此字符串第一次出现处的索引
String s3 = "eduationa";
System.out.println(s3.indexOf(97));//'a'=97
// 4.int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引
//如果结果是-1,表示你指定的字符串没有出现过
String s4 = "WeLoveJava";
System.out.println(s4.indexOf("Love"));
// 5.int indexOf(int ch,int fromIndex):返回指定字符在此字符串中指定位置后第一次出现处的索引
String s5 = "abcdefal";
System.out.println(s5.indexOf('a', 2));
// 6.int indexOf(String str,int fromIndex):返回指定字符串在此字符串中指定位置后第一次出现处的索引
String s6 = "I Love Java,I Love Gosling";
System.out.println(s6.indexOf("Love", 3));
//7.lastIndexOf() 最后出现的位置
String s7 = "ababaccad";
System.out.println(s7.lastIndexOf('a'));
// //8.String substring(int start):从指定位置开始截取字符串,默认到未尾
String s8 = "Gosling,How Are You!";
String tmp = s8.substring(8);
System.out.println(tmp);
// 9.String substring(int start,int end):从指定位置开始到指定位置结束截取字符图
System.out.println(s8.substring(2, 7));
}
面试题1:
public static void main(String[] args) {
//String类的面试题
//1.判断定义为String类型的s1和s2是否相等
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);//比较的是内存地址 true
System.out.println(s1.equals(s2));//比较的是内容是否相等 true
}
面试题2:
public static void main(String[] args) {
//2.下面这句话在内存中创建了几个对象
//出现2个对象,一个在常量区,副本在堆区
String s1 = new String("ABC");//出现一个副本
}
面试题3:
public static void main(String[] args) {
//3.判断定义为String类型的s1和s2是否相等
String s1 = new String("abc");
String s2 = "abc";
//一个堆区地址,一个常量区地址,肯定不一样
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
}
面试题4:
public static void main(String[] args) {
//4.判断定义为String类型的s1和s2是否相等
//常量优化机制,编译的时候就已经是abc
/***
* 最终.java编译成.class,再执行
* .class
* String s1 = "abc";
* String s2 = "abc"
*/
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
}
面试题5:
public static void main(String[] args) {
//5.判断定义为String类型的s1和s2是否相等
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c"; //s1是变量,c是常量,jvm不会进行优化
System.out.println(s3 == s2); //false
System.out.println(s3.equals(s2)); //true
}
面试题6:
public static void main(String[] args) {
//面试题6:数组有没有length方法,String中有没有length属性
/***
* 数组是没有length方法,只有length属性
* String是有length方法,而不是属性
*/
int[] arr = {1,2,3,4,5};
System.out.println(arr.length);
String s = "woailuo";
System.out.println(s.length());
}
注意:
public static void main(String[] args) {
String s1 = null;
// System.out.println(s1.equals("abc")); //不推荐使用这种
System.out.println("abc".equals(s1)); //我们使用String的方法或者属性的时候,需要注意这个变量指null,
//所以我们可以养成好习惯,将常量放在前面
}