Java基础***特殊注意点

数值转换

当容量小的数据类型变量与容量大的数据类型变量做运算,结果自动提升为容量大的数据类型变量
但是 当char,byte,short 三种类型的变量做运算时,结果为int类型

string

string不是八大基本类型 但string可用于他们进行运算,用“+”
运算时只要前后有string类型,结果一定为string类型,但前面可以先进行其他运算

计算机底层中主要是以补码的形式存储

原码(将数值转换为二进制数,最高位为符号位)-->反码(对原码按位取反,符号位0为正数,1为负数)-->补码(反码+1)

赋值运算符

int i = 1;
i = i * 0.1;//编译不通过
i *= 0.1;//通过,因为不会改变变量本身的数据类型
System.out.print(i);//i=0

逻辑运算符

& 逻辑与(符号左边为false,继续执行右边的运算)
&& 短路与(符号左边为false,右边不执行)
| || 同理
开发中推荐使用短路符

基本运算

% 结果与被模数符号一致
如(12%5=2 -12%5=-2 12%-5=2 -12%-5=-2)

if-else if-else 结构

可以有多个else-if,但只能有一个else
执行语句只有一行时{}可以省略
结构中else是可省略的
若有多个if,else根据就近原则

switch-case结构

switch结构中的表达式,只能用以下6种数据类型:char,byte,short,int,string,枚举类型
case之后只能声明常量,不能声明范围

String类的charAt()方法

-->索引string字符并返回为char类型

获取随机数

[a,b]--> (int)Math.random() * (b-a+1) + a

不在循环中限制次数的结构

for(;;) while(true)

break

默认跳出包裹最近的一次循环
标签+“:”+循环 break+标签 跳出指定的循环

数值元素默认初始化

初始化一:如 int[][] arr = new int[4][3];
外层元素初始值:地址值
内层元素初始值:与一维数组初始化相同
初始化二:如 int[][] arr = new int[4][];
外层元素初始值:null
内层元素初始值:报错,无法调用

可变个数形参

格式:数据类型 ... 变量名 如(String ... strs)
形参类型相同的数组之间不构成重载
若与其他形参一起使用时,要放在最后

值传递机制

如何参数是基本数据类型,实参传给形参的是实参真实储存的数据值
如何参数是引用数据类型,实参传给形参的是实参储存数据的地址值

权限修饰符

private(类内部)--缺省(同一个包)--protected(不同包的子类)--public(同一个工程)
四种修饰符都可以修饰类的内部结构
但修饰类的话,只能用:缺省,public

构造器

如何没有显式定义构造器,系统会默认构造一个空参构造器
但一旦显式定义了构造器,系统就不再提供默认的空参构造器

this

1.类中可以使用"this.属性" "this.方法",但一般省略
2.如果形参和属性名同名时,必须使用"this.变量" -->表明是变量而非形参
3.this也可调用构造器-->this(形参列表)调用本类中的其他构造器,但不能调用自己
规定--this(形参列表)必须声明在当前构造器的首行,构造器内部一次只能声明一个this(形参列表)

import

  1. 在源文件中显示使用import结构导入指定包中的类或接口
  2. import static: 导入指定类或接口中的静态结构(属性或方法)
  3. xxx.* 表明导入xxx包下的所有结构,但若是xxx子包下的结构,仍需显示导入

重写

1.子类重写的方法的权限修饰符不小于父类被重写方法的权限修饰符
--特殊情况:子类不能声明父类权限为private的方法
2.返回值类型
父类返回值类型为void,子类必须为void
父类返回值类型为X类,子类可以为X类或X类的子类
父类返回值类型为基本数据类型,子类返回值类型必须相同
子类重写方法抛出异常类型不大于父类被重写方法抛出的异常类型

super

1.可以使用super(形参列表)调用父类声明的构造器
2.super(形参列表)必须声明在首行,所以在类的构造器中super(形参列表)与this(形参列表)只能二选一
3.类的构造器中没有显示定义super(形参列表)与this(形参列表),则默认调用父类中的空参构造即super()

多态

1.即父类的引用指向子类
2.在编译期,只能调用父类声明的方法,在运行期,则调用子类重写父类声明的方法
3.前提:1.类有继承关系 2,子类的方法有重写
4.对象的多态只适用于方法,不适用于属性

instanceof

a instanceof A -->判断对象a是否是类A的实列,是则返回true
使用场景:避免向下转型出现ClassCastException,故转型之前用instanceof判断

==运算符

1.可以使用基本数据类型和引用数据类型变量中
2.如何使用是基本数据类型:比较保存的值是否相等(可以自动类型提升)
若比较引用数据类型,则比较地址值
3.==比较符两边变量类型必须保持一致

equals()

1.只适用与引用数据类型
2.object类中equals()定义:
public boolean equals(Object obj){
return (this==obj)
}
3.像Date,String,File,包装类等都重写了Object类中的equals(),重写以后比较两个对象中实体内容是否相同
4.通常情况下自定义类如果使用euqals(),通常比较实体内容是否相同,需要对euqals()方法重写

Integer

1.Integer内部IntegerCache结构,IntegerCache结构定义了Integer[]
2.保存了-128~127的整数,若在范围内直接使用,不用new对象了,提高效率

基本数据类型、包装类、String三者转换

1.基本数据类型、包装类--String:valueOf(Xxx xx)
2.String--基本数据类型、包装类:parseXxx(String s)

static

1.静态方法只能调用静态的方法和属性
2.非静态方法能调用静态和非静态的方法和属性
注意:static中不能使用this、super关键字

属性可以赋值的位置

执行的先后顺序:1.默认初始化
2.显示初始化/代码块
3.构造器
4.对象中属性或方法调用

接口

1.JDK7以前只能定义全局常量和抽象方法
public static final 可省略
2.接口不能定义构造器,即不能实例化
3.如果实现类覆盖了接口中所有抽象方法,则实现类就可以实列化 反之

finally的使用

1.finally是可选的
2.finally中的声明一定会执行,即使catch中出现异常,或try,catch中有return
3.像数据库,输入输出流,网络编程socket等。JVM不能直接回收,资源释放就在finally

Date

如何将java.util.Date对象转换为java.sql.Date对象
情况一:
Date date4 = new java.sql.Date(2343243242323L);
java.sql.Date date5 = (java.sql.Date) date4;
情况二:
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());

男人女人代码

//Man, Woman继承Person
Person p = new Man();
Man m = (Man)p;
//Woman w = (Woman)p;不能转
if(p instanceof Woman){//转前先判断
Woman w = (Woman)p;
}

collection接口

向collection接口的实现类的对象添加数据obj时,要求obj所在的类要重写equals()方法,否则用的就是==。

Set

向set中添加数据,所在类一定要重写hashCode()和equals()方法
重写的hashCode()和equals()方法要尽可能保持一致性,相同的对象要有相同的散列码

集合差集与并集

removeAll(Collection coll1):差集:从当前集合中移除coll1中所有的元素。

Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(789);
Collection coll1 = Arrays.asList(123,456);
        coll.removeAll(coll1);
        System.out.println(coll);//[789]

retainAll(Collection coll1):交集:获取当前集合和coll1集合的交集,并返回给当前集合

Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
Collection coll1 = Arrays.asList(123,456,789);
        coll.retainAll(coll1);
        System.out.println(coll);//[123,456]

待补充~

posted @ 2020-11-07 17:31  吻过上帝  阅读(75)  评论(0)    收藏  举报