JavaSE知识笔记Day1
JavaSE知识笔记Day1
数据类型
基本数据类型
- 数值型
- 整型(byte[1],short[2],int[4],long[8])
- 整型常量默认为int,声明long型常量须在后面加"l"/"L"
- 浮点型(float[4],double[8])
- 浮点型常量默认为double,声明float型常量须在后面加"f"/"F"
- 科学计数法(9.12 e 2表示9.12*10的二次方)
- 由于浮点数是近似值,所以浮点数的运算得到的是近似值,
当我们对判断对象是涉及浮点数运算得到的小数时要小心,
应该以两个判断对象数的差值的绝对值在某个精度范围内进行判断- 字符型(char[2])
- 字符型用单引号赋值,字符常量用单引号
- 本质是数字,可以运算,但输出时为Unicode对应的字符
- 布尔型(boolean[1])
- 不能用0或非0数代替true和false(与C语言不同)
引用数据类型
- 类
- 接口
- 数组
- 可以存放多个同一类型的数据
- 数组型数据是对象
类型转换
-
(byte,short)和char之间不会互相自动转换
应该是因为数据范围不匹配
-
byte,short,char三者可以运算,计算时精度转换为int
-
基本数据类型转换为String->值+""
String转换为基本数据类型->通过基本类型的包装类的parse**方法
原码、反码、补码
对于有符号:
- 最高位为符号位:0表示正数,1表示负数
- 正数的原码、反码、补码一样(0也是)
- 负数的反码=原码的符号位不变,其它位取反
- 负数的补码=反码+1
- Java没有无符号数
- 计算机运算时以补码的形式运算,看结果的时候要看原码(位运算时注意这个)
位运算符
&、|、^、~、>>、<<、>>>
- 【>>】:低位溢出,符号位不变,高位补符号位
- 【<<】:符号位不变,低位补0
- 【>>>】:低位溢出,高位补0
数组
-
静态初始化
int a[]=
-
创建后,如果没有赋值,有默认值
0/false/null(String)
-
二维数组
int a[][]=new int[2][3] //2代表二维数组中一维数组个数,3代表一维数组中的元素个数 int b[][]=new int[3][]; int[i]=new int[j]; //每个一维数组的大小可以不相同,不new的话int[i]为null
可变参数
public int method(int... nums){ //方法体 }
- 可以接收0个及以上的参数,nums可以当作数组来使用,
即方法体中可以使用nums.length,nums[i]等操作 - 实参可以是一个数组
- 可变参数可以和其他普通参数一起放在形参列表,但要将可变参数放在最后
- 一个形参列表只可以有一个可变参数,即使可变参数的类型不同也不可以有多个
构造器
- 没有返回值
- 方法名和类名一致
- 没有定义构造器时,系统会自动生成一个默认无参构造方法,
当有定义构造器时,系统不再自动生成无参构造方法,此时需要使用无参构造方法时,需要自己定义
关键字
this
-
与对象关联
-
可以用来区分成员变量和局部变量
-
可以访问本类的成员方法:this.方法名(参数列表)(在继承中有所体现)
-
可以在构造器中使用另一个构造器,但只能使用一次,只能放在第一条语句
super
-
构造器中只能放在第一行使用,所以和this不能在一个构造器中同时使用
-
可以用来访问父类的成员变量和方法,但是不能访问私有的
访问修饰符
- public: 所有类可见
- protected: 对子类和同一包的类可见
- 缺省: 同一包可见
- private: 只有自己可见
- 只有public和缺省可以修饰类和接口
父类成员访问属性 | 父类中含义 | 子类中含义 |
---|---|---|
public | 所有类可见 | 所有类可见 |
protected | 同一个包的类,子类可见 | 父类所在包中的类、自己和子类可见 |
缺省 | 同一个包的类可见 | 如果子类与父类在同一个包:只有包内其他类可见 否则:相当于private |
private | 仅自己可见 | 不可见 |
继承
-
子类会调用父类的构造器
默认调用父类无参构造器,如果父类没有提供无参构造器,需用super指定相应的父类构造器
-
子类会得到父类所有的成员变量和成员方法,但访问属性不同,使用也不同
- 在父类提供的方法中可以访问私有的成员变量和方法
- 如果子类重新定义父类中存在过的变量,则相当于定义一个与父类同名变量完全无关的变量,
在子类的方法中访问子类的,在父类的方法中访问父类的 - 在子类对象中,父类的方法中调用的方法如果被重写(override),
则调用的是子类重写的方法,在父类对象中调用的是父类的方法 - 如果父类中方法是私有的,则子类的同名方法不属于重写,
而是两个完全无关的方法,和变量的使用一样
-
所有类都是Object的子类
-
单继承关系,子类只能有一个父类
-
instanceOf:比较操作符,用于判断对象的运行类型是否为XXX类型或其子类型
方法重载(overload)
- 方法名相同
- 参数列表不同(类型/个数/顺序,至少一个不同)
- 与返回类型无关
- 修饰符可以不同
方法重写/覆盖(override)
子类方法与父类方法的名称、返回类型、参数一样
-
子类与父类的方法返回类型要一样,或者子类方法返回类型是父类方法返回类型的子类
(这个和方法重载的要求不一样)
public Object getInfo(){}//父类 public String getInfo(){}//子类 -
子类方法不能缩小父类方法的访问权限 (记忆点:类似于要开源思想,所以不能缩小,可以扩大)
多态
-
方法的多态:重写和重载体现
-
对象的多态
Animal animal = new Dog(); //左边为编译类型,右边为运行类型
向上转型
- 父类的引用指向了子类的对象
- 可以调用父类中原有的成员(需遵守访问权限),具体的调用要看子类中的具体实现(例如重写)
- 不能调用子类中特有的成员
- 子类和父类中同名的成员变量属于两个不同的变量,不能调用子类的,可以调用父类的,(需遵守访问权限)
- 父类私有的方法和子类中的同名方法不属于重写,不能调用子类中的同名方法
向下转型
-
子类类型 引用名=(子类类型) 父类类型的引用名
-
只能强转父类类型的引用,不能强转父类的对象
-
要求父类类型的引用须指向当前目标类型的对象
-
可以调用子类类型的所有成员
多态的应用
多态数组
- 数组的定义类型为父类类型,里面可以保存子类类型的元素
- 小技巧:可以使用instanceOf判断类型然后进行向下转型来调用子类特有的方法
多态参数
- 方法定义是形参为父类类型,实参可以为子类类型
Java动态绑定机制
- 当调用对象方法时,该方法会与该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定,哪里声明,哪里使用
本文作者:xipian
本文链接:https://www.cnblogs.com/xipian/p/17232268.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步