int类型溢出
PS D:\Document\Java20210111\code\day02> javac .\IdentifierTest.java.\IdentifierTest.java:4: 错误: 整数太大int 学号 = 17180210019;^

从这两个报错中能看出,Java整型默认是int类型,如果超过int类型就要显示地在数的末尾加L或l表示这是一个long类型的整数
编码错误

命令行默认编码是GBK,而要编译的源文件编码格式为UTF-8,所以会出错
关于三元运算符

Object o1 = true ? new Integer(1) : new Double(2.0);System.out.println(o1);//1.0 结果是1.0说明了三元运算符自动类型转换这件事。/*三元运算符要求冒号前后两者类型能够统一,统一有两种情况:要么都是基本数据类型,能够进行自动类型转换要么都是引用数据类型,但必须满足子父类关系上述语句Integer和Double类显然不是子父类关系,就会进行自动拆箱变成基本数据类型再进行自动类型转换得到的结果再自动装箱赋给o1.*/Object o2;if (true)o2 = new Integer(1);elseo2 = new Double(2.0);System.out.println(o2);//1 这就毫无悬念
变量自增又赋给自己

结果i=1;为什么呢? 先赋值,把i原来的值重新赋值给i,不变,然后i自增,但是这个自增后的值没有在放回变量i的位置
数组打印

这里字符型数组打印出了字符串,很神奇。 其实是方法重载的问题,除了char型外其他基本数据类型数组作为println的参数传进去都是调用println(Object[])方法,而char[]传进去调用的是println(char[])
包装类
public void method1() {Integer i = new Integer(1);Integer j = new Integer(1);System.out.println(i == j); //flaseInteger m = 1;Integer n = 1;System.out.println(m == n);//trueInteger x = 128;Integer y = 128;System.out.println(x == y);//false}
同样的操作,第7行结果是true而第10行结果是false,为什么呢? 因为Integer类内有个内部静态类IntegerCache,其中缓存了从-128至127的Integer类型数组,当自动装箱的int值在这个范围内时直接指向该数组中对应的包装类对象,而不是在堆中新开辟。 这有点类似于String类直接赋值,但又不太一样
父类与接口属性重名
问题如下:C类继承B实现A,A和B中都有名叫x的属性,问题来了,在C中用x会出现摸棱两可的情况。怎么解决呢?
interface A {int x = 0;}class B {int x = 1;}class C extends B implements A {public void pX() {// System.out.println(x);//The field x is ambiguous}
class C extends B implements A {public void pX() {// System.out.println(x);//The field x is ambiguousSystem.out.println(super.x); //1System.out.println(A.x); //0}
方法重载
package zdkk.test;/*** @author: zdkk* @data: 2021/3/25* @time: 14:59* @package: zdkk.test1.8*/class MethodReloadDemo{public static void print(int n){System.out.println(n);}public static void print(short n){System.out.println(n);}public static void print(Integer n){System.out.println(n);}public static void print(String s){System.out.println(s);}public static void main(String[] args){MethodReloadDemo.print(1);MethodReloadDemo.print((byte)1);MethodReloadDemo.print("1");// MethodReloadDemo.print(null); //error}}
在第一种情况下,1 是 int。我们有个完全匹配的方法带 int。此时会调用第一个 void print(int n)。
在第二种情况下,我们没有带 byte 的方法。但有两个方法分别带 short 和 int。在类型拓宽规则基础上,byte 会首先拓宽为 short,然后拓宽为 int。因此,判定会调用 void print(short n)。
在第三种情况下,我们有一个完全匹配的方法带 String。此时会调用 void print(String s)。
第四种情况是模棱两可的。null 没有特定类型。编译程序将拒绝编译这个代码。在这种情况下,我们要编写 Cat.print((Integer)null) 来调用第三个方法,并且用 Cat.print((String)null) 来调用第四个方法。
package zdkk.test;/*** @author: zdkk* @data: 2021/3/25* @time: 15:05* @package: zdkk.test1.8*/public class MethodReloadDemo2 {public static void print(Object o){System.out.println(o);}public static void print(String s){System.out.println(s);}public static void main(String[] args){MethodReloadDemo2.print(1); //调用print(Object o)MethodReloadDemo2.print(null); //调用print(String s)MethodReloadDemo2.print((Object) null); //调用print(Object o)}}
