1.Object类的equals方法和==的区别
==:如果连接的是基本数据类型,比较两个数据值是否相同!
如果连接的两个引用类型,比较的两个引用类型的地址值是否相同!
equals方法: Object类的中
public boolean equals(Object obj){
return this == obj ;
}
默认情况下:比较的是两个对象的地址值是否相同
但是如果子类重写了Object类中的equals方法,(建议同时重写hashCode()),
比较的两个对象的内容(成员信息)是否相同
2.Object类的toString()的含义
toString():输出的就是 包名.类名@十六进制数据 :地址值 (没有意义)
所有的子类(在标准类中),重写Object类toString()方法,否则直接输出对象名称,地址值 (没有意义)
应该显示的是当前这个对象的成员信息表达式,结果应该易于读懂的信息表达式
在一个类中重写toString()---->alt+ins--->
toString() 自动生成 类名{成员变量名1=值1,成员变量名2=值2}
3.匿名内部类的格式是什么,本质是什么?
匿名内部类的格式
new 类名 / 接口名(){
重写抽象类/接口中的抽象方法
};
本质:继承了该抽象类类或者是实现了该接口的子类对象
4.方法的返回值和形式参数如果是接口类型,返回什么,传入实际参数是什么?
返回值如果 接口类型,那么需要返回的是该接口的子实现类对象
1)要么去定义出接口的子实现类
2)要么使用接口的匿名内部类
形式参数:接口类型
实际参数需要传递的该接口子实现类对象
1)要么去定义接口的子实现类
2)要么使用接口的匿名内部类
5.获取一个类的字节码文件的方式?三种
目前就是一种:
Object类的getClass方法()
给定数组
将数组转换成字符串:
Scanner类:java.util.Scanner ;
* 需要导包--- 文本扫描器
*
* 构造方法:
* public Scanner(InputStream source):
* 创建一个文本扫描器,需要传递字节输入流,形式参数是一个抽象类,需要抽象类子类对象
*
* 获取功能
* public int nextInt() :将下一个录入的标记为int类型
*
* 判断功能:
* public boolean hasNextXXX()
* 判断是否为xxx类型
* public boolean hasNextLine():判断录入的是否为String
* public boolean hasNextInt() :判断录入的是否为int
System.err.println("这是错误输出流");
如果录入的结果数据类型和接收的类型不匹配
* java.util.InputMismatchException:输入类型不匹配异常
String代表字符串:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
* String str = "abc";
* 字符串是常量;它们的值在创建之后不能更改(就是地址值)
*
* 构造方法:
*
* public String()空参构造(不建议使用:是一个空字符序列)
* String(byte[] bytes) :使用平台默认解码集进行解码
* String(byte[] bytes,字符集) :使用指定字符集集进行解码
*
* public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
* public String(char[] value):构造一个字符串对象,传递一个字符数组
* public String(char[] value,int offset,int count):将字符数组的某个位置开始指长度的内容转换成字符串对象
* public String(String original):传入指定的字符串值,构造一个字符串对象!
*
*
*
*
* 字符串的获取功能:
* int length() :字符串的特有功能:获取字符串的长度
*
* int[] arr = new int[4] ;
* length属性---数组中获取数组的长度的length属性!
*
* 字符串的有转换功能
* 编码的过程:
* byte[] getBytes() :将字符串转换为字节数组,空参为平台默认编码集
* byte[] getBytes(字符集) :将字符串转换为字节数组,使用指定字符集编码
*
*
* String s = "" ;
* String s = null ; 空值,没有对象
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//测试构造方法
// public String()
String s1 = new String() ; //String s1 = "" ;
//String s2 = null ;
System.out.println(s1);
System.out.println(s1.length());
System.out.println("-----------------------------");
//编码:将看懂的东西---->变成看不懂的
/**
* 常见的字符集:
* GBK :中国的中文编码表 (一个中文对应两个字节)
* GB2312:GBK的升级版,可以提供更多的中文字符
* utf-8:一个中文对应3个字节
* iso-8859-1:拉丁文码表
* big-5:大五码:港澳地区:繁写字体
* unicode:国际编码表
*
*/
String s2 = "我爱你中国" ;
//String的转换功能:getBytes()---->byte[] :平台默认编码集编码: utf-8 (一个中文三个字节)
byte[] bytes = s2.getBytes();
// byte[] bytes = s2.getBytes("GBK"); //一个中文两个字节
//System.out.println(bytes);
//java.util.Arrays:针对数组操作的工具类(提供:排序,,搜索,将数组转换成的功能)
//public static String toString(byte[] a):重载的方法:可以将任何数组转换成String
String byteArray = Arrays.toString(bytes);
System.out.println(byteArray);
System.out.println("------------------------");
//解码:利用String类型的构造方法String(byte[] bytes):默认平台解码集解码
String s3 = new String(bytes) ;//utf-8解码
// String s3 = new String(bytes,"GBK") ;
System.out.println(s3);
System.out.println("-----------------------------------");
//创建一个字节数组:
byte[] bytes2= {97,98,99,100,101} ;
String s4 = new String(bytes2) ; //字节数需要找对应的ASCII码表
System.out.println(s4);
System.out.println(s4.length());
// public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
String s5 = new String(bytes2,2,2) ;
System.out.println(s5);
System.out.println(s5.length());
System.out.println("-----------------------------------");
//public String(char[] value):构造一个字符串对象,传递一个字符数组
char[] chs = {'高','圆','圆'} ;
String s6 = new String(chs) ;
System.out.println(s6);
System.out.println(s6.length());
//public String(char[] value,int offset,int count)
String s7 = new String(chs,0,2) ;
System.out.println(s7+"---"+s7.length());
System.out.println("-----------------------------------");
// public String(String original):
String s8 = new String("hello") ;
System.out.println(s8+"---"+s8.length());
}
}
面试题
//String s = new String("hello") ;
//String s = "hello" ; //推荐
//两个区别是什么? 分别创建了几个对象
/**
* 前者:要在堆内存中产生空间地址,并且要常量标记:"hello" , 两个 (堆,常量池)
* 后者:创建一个对象,将常量赋值给变量,直接现在常量池 中找是否存在这个常量值,存在,直接返回值地址;不存在
* 在常量池中开辟空间!
*
* 前者和共同点:都是创建一个字符串对象:"hello",推荐使用后者,节省内存空间!