java基础
1.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;不对,Java规范有这样的规则:1.高位转低位需要强制转换 2.低位转高位自动转.1是int 型, s1是 short型, 通过加1运算后s1 自动转为int 型,所以要强制转换
short s1 = 1; s1 += 1;正确,这个不会发生类型的提升,JAVA规范上说 :e1+=e2 实际上是 e1=(T1)(e1+e2) ,其中T1是e1的数据类型。s1+=1等效于 s1=(short)(s1+1),所以是正确的。
2.抽象类(abstract class)和接口(interface)有什么异同?
就把抽象方法当成普通方法看待就行,只是多了个abstract,这样就好理解了
不同:
1.抽象类中可以定义构造器,接口不行
2.可以有抽象方法和具体方法 ,接口中只有抽象方法
3.抽象类中的成员可以是 private、默认、protected、public ;接口中的成员全都是public的
4.抽象类中可以定义成员变量,接口中定义的成员变量实际上都是常量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含static方法 ,接口不行(因为接口中都是抽象方法,得继承,static不能被继承)
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类
3.Java 的异常处理
1.异常的分类
推荐看博客:https://blog.youkuaiyun.com/woshixuye/article/details/8230407
2.常见的RuntimeException与check异常
RuntimeException:
1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。
2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常。
3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。
4)java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。
5)java.lang.IllegalArgumentException 方法传递参数错误。
6)java.lang.ClassCastException 数据类型转换异常。
7)java.lang.NoClassDefFoundException 未找到类定义错误。
8)SQLException SQL异常,常见于操作数据库时的SQL语句错误。
9)java.lang.InstantiationException实例化异常。
10)java.lang.NoSuchMethodException 方法不存在异常。
RuntimeException:
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
3.经典考题:调用下面的方法,得到的返回值是什么
1. public int getNum(){
2. try {
3. int a = 1/0;
4. return 1;
5. }catch (Exception e) {
6. return 2;
7. }finally{
8. return 3;
9. }
代码在走到第3行的时候遇到了一个MathException,这时第4行的代码就不会执行了,代码直接跳转到catch
语句中,走到第6行的时候,异常机制有这么一个原则如果在catch中遇到了return或者异常等能使该函数终止的话
那么有 finally 就必须先执行完 finally 代码块里面的代码然后再返回值。因此代码又跳到第 8 行,可惜第 8 行是一个
return语句,那么这个时候方法就结束了,因此第6行的返回结果就无法被真正返回。如果finally仅仅是处理了一个
释放资源的操作,那么该道题最终返回的结果就是2。因此上面返回值是3。
4.多态相关问题
5.JavaSE 常用 API
1. Math.round(11.5)等于多少?Math.round(- 11.5) 又等于多少?
Math.round()
函数返回一个数字的绝对值最接近的整数。
如果参数的小数部分大于 0.5,则舍入到相邻的绝对值更大的整数。 如果参数的小数部分小于 0.5,则舍入到相邻的绝对值更小的整数。如果参数的小数部分恰好等于0.5,则舍入到相邻的在正无穷(+∞)方向上的整数。
Math.round(20.49); //20
Math.round(20.5); //21
Math.round(-20.5); //-20
Math.round(-20.51); //-21
Math.ceil()
函数返回大于或等于一个给定数字的最小整数。
console.log(Math.ceil(.95));
// expected output: 1
console.log(Math.ceil(4));
// expected output: 4
console.log(Math.ceil(7.004));
// expected output: 8
console.log(Math.ceil(-7.004));
// expected output: -7
Math.floor()
返回小于或等于一个给定数字的最大整数。
Math.floor( 45.95);
// 45
Math.floor( 45.05);
// 45
Math.floor( 4 );
// 4
Math.floor(-45.05);
// -46
Math.floor(-45.95);
// -46
2.数组有没有length() 方法?String有没有length() 方法?
数组没有 length()方法,而是有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是
通过 length 属性得到的,这一点容易和 Java 混淆。
public class test02 {
public static void main(String[] args) {
String s="abcde";
String[] arg={"abc","d","老哥","真帅"};
System.out.println(s.length());//5
System.out.println(arg.length);//4
}
}
3.如何格式化日期?
1. import java.text.SimpleDateFormat;
2. import java.time.LocalDate;
3. import java.time.format.DateTimeFormatter;
4. import java.util.Date;
5. class DateFormatTest {
6.
7. public static void main(String[] args) {
8. SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
9. Date date1 = new Date();
10. System.out.println(oldFormatter.format(date1));
11.
12. // Java 8
13. DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
14. LocalDate date2 = LocalDate.now();
15. System.out.println(date2.format(newFormatter));
16. }
17. }
6.Java 的基本数据类型都有哪些各占几个字节?
7.基本类型与字符串类型之间的转换
在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。
其中,基本类型转换为字符串有三种方法:
1. 使用包装类的 toString() 方法
2. 使用String类的 valueOf() 方法
3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
int c = 10;
String str1 =Integer.toString(c); //方法一
String str2 = String.valueOf(c); //方法二
String str3 = c + ""; //方法三
再来看,将字符串转换成基本类型有两种方法:
1. 调用包装类的 parseXxx 静态方法
2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
String str = "8";
int d =Integer.parseInt(str); //方法一
int e =Integer.valueOf(str); //方法二