Java 基础整理(一)

1,面向对象的三大特性:封装、继承、多态

  • 封装:通过访问控制符来操作那些暴露那些隐藏,按权限递增列出。private(当前类访问权限)、default(包访问权限)、protected(子类访问权限)、public(公共访问权限)

  • 继承:Java是单继承的,关键字extends。作用是让子类对父类功能进行扩展,能获取父类的成员变量和方法。也是一种规范吧

    • 1,注意不过子类不能获取父类的构造器
    • 2,尽量隐藏父类内部的数据
    • 3,不要让子类可以随意访问、修改父类的方法。
    • 4,尽量不要在父类构造器中调用将要被子类重写的方法
    • 5,如果要调用父类的方法和属性,直接用super.方法名或者变量名
  • 多态:一个是编译时类型,一个是运行时的类型。编译类型由声明的类型决定,运行类型由实际赋值的类型决定。如果编译时类型和运行时类型不一致,就可能出现多态

    • 上转型:把一个子类对象直接赋给一个父类对象引用变量,无须进行类型转换,因为系统自动完成的。证实了子类是一个特殊的子类。

2,数组是引用数据类型,定义数组时不能指定数组的长度

3,重写和重载:

  • 重写是发生在继承的父子类之间的,子类有和父类相同的方法(包括方法名,返回值,参数个数和类型)

  • 重载发生在同一个类中,方法的方法名相同,返回值、参数不同

  • 重写父类方法时,访问的权限只能更大或者相等

  • 方法重载时,尽量不要包含可变形参,可读性降低了。

4,强制类型转换

  • 基本类型,只能在数值类型之间进行,数值类型不能与布尔类型之间进行转换。

    • 基本类型包含数值型和布尔类型。数值类型包括byte、short、int、long、char、float、double,布尔类型包括turn和false
  • 引用类型,有继承关系的两个类型之间进行

    • 引用类型包括类、接口、数组
    • 空类型既是null类型,空引用(null)只能转换成引用类型。

5,补码计算规则

  • 正数的补码和原码相同;负数的补码是其反码加1。补充,记得补码的最高位是符号位,0表示是正数,1表示是负数。

6,除零异常

  • 一般发生除0异常是整数才会有的。浮点数除0和整数除0.0,都就不会异常

  • Java提供了三个特殊的浮点数值,正无穷大、负无穷大和非数(NaN)。

  • 正浮点数除以0就会得到正无穷大;负浮点数除以0就会得到负无穷大;0.0除以0.0或者负数开方都得到一个非数(NaN)。

  • 所有正无穷大的数值是相等的,所有的负无穷大的数值也是相等的。非数都是不相等的。

7,float a=3.4;//这样是会出现错误的,因为3.4默认是double类型的。如果要将一个的double类型的数转换成float类型就要进行强制类型转换。

8,int c=++a + 3;//运算顺序是a先自增再进行算术运算

9,左移(<<)、右移(>>)

  • 左移n位就相当乘以2的n次方,如5 << 3,就是5*(2的3次方)= 40;负数也一样算,只不过在前面加一个负号;

  • 右移n位就相当除以2的n次方,这都是对于正数而言的,如果是负数就要按原始方法来

10,静态导入,减少程序中代码的编写。

  • 格式:import static package.subpackage…ClassName.*;
    • 如:
      import static java.lang.System.*;
      import static java.lang.Math.*;
      类里面就可以直接用了,out.println(sqrt(256));

11,super(和this)不能出现在static修饰的方法中

12,instanceof运算符,前一个操作数通常是引用类型的变量,后一个操作数通常是一个类。这两个参数通常用有继承关系,要不就会引起异常编译无法通过。

  • 主要应用用来判断一个对象的类型是否能成功,提高代码健壮性

13,初始化块的的执行在构造器之前就执行了,而静态初始化块又比普通初始化执行要早。静态代码块和静态成员是按代码的排列顺序来执行的

14,静态成员不能访问非静态成员,包括实例变量和实例方法

15,如果在静态方法里面,用this引用调用某成员,无法指向适合的对象。所以,static修饰的方法中不能使用this引用。

16,静态成员不能直接访问非静态成员。如:静态方法不能直接调用非静态方法。

17,类代码里没有定义构造器,系统将为它提供一个默认无参的构造器。如果有定义,系统就不会默认提供了。

18,如果希望通知垃圾回收机制某个对象,就要把这个对象引用变量赋值为null,如:Person p = new Person(); p = null;

19,初始化块的的执行在构造器之前就执行了,而静态初始化块又比普通初始化执行要早。静态代码块和静态成员是按代码的排列顺序来执行的

20,自动装箱拆箱过程,Integer缓存一个长度为256的数组,保存的值在-128到127。

  • 如:
    Integer int1 = new Integer(6);
    Integer int2 = Integer.valueof(6);
    int1 =int2;//这样就是直接从缓存中取Integer对象。

21,常量池专门用于在编译时就被确定下来并被保存在已编译.class文件中的一些数据。

  • 发现这几种情况的在编译时期不能被确定下来。
    • String s1 = “s111”;
      String s2 = “s222”;
      String s3 = s1 + s2;
    • 因为s1 s2是普通的变量,在编译时期无法确定下来,所以s3的值编译器无法在编译时期就确定下来。如果s1 s2用final修饰这样执行“宏替换”,在编译时就能被确定下来。
    • 宏替换:使用final修饰,指定初始值,并且该值在编译时期就能被确定下来了。
      String s4 = s1 + String.paraseString(“123”);//这样包含了方法也不能在编译时确定下来

22,final修饰属于不可变类型。如果修饰对象是引用类型时,不能改变其对象,却能改变对象的属性。

  • 例如:final修饰指定的某人,就不能再改边指向其他人,但却能改变修饰人的一些属性(年龄,姓名等)
    • final Person p = new Person();
    • p = null;//不能再改变对象
    • p.setAge(23);//这样是可以的,通过set方法改变

23,两个btye类型的数进行算术运算时,这两个数会被提升为 int 类型。

  • byte a = 127;
    byte b = 127;
    b = a + b; // error : cannot convert from int to byte
    //因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错

24,运算类型自动提升。

  • short s1= 1; s1 = s1 + 1; 该段代码有错,short类型在进行运算时会自动提升为int类型,也就是说s1+1的运算结果是int类型。

  • short s1= 1; s1 += 1; 该段代码没错,+=操作符会自动对右边的表达式结果强转匹配左边的数据类型,所以没错

25,栈常用于保存方法帧和局部变量,而对象总是在堆上分配

26,final修饰的方法不能被重写,完全可以被重载

27,abstract不能用于修饰成员变量,不能修饰局部变量,不能修饰构造器。

28,static和abstract并不是绝对互斥的,虽然不能用时修饰某个方法,但它们可以同时修饰内部类

29,接口定义的变量只能是常量,如:int i = 20;//系统编译时,自动添加public static final修饰

30,接口是多继承的(多实现的),类属于单继承的

31,接口的注意用途:

  • 定义变量,也可用于进行强制类型转换

  • 调用接口定义的常量

  • 被其他类实现,就是规范,或者回调,为系统提供更好的可扩展性和可维护性


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值