对于一个刚入门Android的渣渣,许多知识点都是在工作中一点点的积累。
虽然目前掌握的技能能够应付日常的工作,但是越深入学习就越发的觉得到基础的重要性和自己基础有多薄弱。
所以最近重新开始学习java,希望能够尽快把基础知识补好。
在这里记录一下一些印象模糊或者已经忘掉的基础点。
-----------------------------------------------------------------------------------------------
-------------------变量与常量-------------------
1.描述变量的三大元素: 变量类型,变量名,变量值
2.基本数据类型变量存的是数据本身,引用变量存的是数据的空间地址
3.自动类型转换的特定条件: 目标类型与源类型兼容、目标类型大于源类型(double型为8字节,int型为4字节,所以int可以转换成double,反之则报错)
4.强制类型转换可能会导致数据丢失
5.常量:特殊变量,设定值后,在程序 运行过程中不允许改变。final 常量名 = 值;
-------------------常用的运算符-------------------
6.int b = a++ (将a的值赋给b之后,a再自增)
7.三元运算符: 布尔表达式 ?表达式1 :表达式2
8.()运算符的优先级最高
-------------------数组-------------------
9.声明数组-> int[] scores = new int[5]; / int[] scores = new int[]{1, 2, 3}
10.使用Arrays类操作数组 -> Arrays.sort(数组名) - 实现数组升序排序 / Arrays.toString() - 实现将数组转为字符串
-------------------类和对象-------------------
11.对象 -> 客观存在的事物皆为对象
12.面向对象 -> 将我们的程序模块化,对象化,把具体事物的属性和通过这些属性来实现一些动作的具体方法放到一个类里面
13.类 -> 确定对象将会拥有的特征(属性)和行为(方法) / 特点 -> 类是对象的类型,具有相同属性和方法的一组对象的集合
14.类的组成 -> 属性和方法
15.对象的属性 -> 对象具有的ge各种特征,每个属性都拥有特定值
16.对象的方法 -> 对象执行的操作
17.创建对象:类名 对象名= new 类名() 对类进行实例化获取类的对象
-------------------成员变量与局部变量-------------------
18.java会赋予成员变量一个初始值,但不会给局部变量赋予初始值
19.两变量同名时,局部变量具有更高的优先级
-------------------构造方法-------------------
20.创建对象:new 类名() -> new + 类的构造方法
21.构造方法:Java类中一个用于初始化对象的方法
22.当没有指定构造方法时,系统会自动添加无参的构造函数;当指定构造方法后,系统就不会自动添加
23.静态变量:Java中被static修饰的成员成为静态成员或类成员,属于整个类所有,被类的所有对象共享
24.由于静态变量属于整个类,当系统第一次调用该类时,会为该静态变量分配内存空间直到该类被卸载才会进行GC
25.静态方法中可以直接调用同类的静态成员,但不能直接调用非静态成员
26.静态方法只能通过类的对象来访问非静态成员
27.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
28.静态方法不能直接调用非静态方法,需要通过对象来访问非静态方法
29.静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能给普通成员初始化
30.程序运行时,静态初始化块最先被执行,然后执行普通初始化块,再执行构造函数,最后执行main函数
-------------------封装---------------
31.封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
32.封装的好处:只能通过规定的方法访问数据 、隐藏类的实例细节,方便修改和实现
33.实现封装的步骤:修改属性的可见性->创建getter/setter方法->在getter/setter方法中加入属性控制语句
34.访问修饰符:可以修饰属性和方法的访问范围
35.protected修饰符:允许本类,同包,子类进行访问
36.this关键字代表当前对象 -> this.属性 代表操作当前对象的属性
37.封装对象的属性的时候,会使用到this关键字
38.定义成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象 -> 内部类 对象名 = 外部类对象.new 内部类()
39.外部类不能直接使用内部类的成员和方法
40.创建静态内部类的对象, 可以直接创建 内部类 对象名 = new 内部类()
-------------------继承---------------
41.继承的初始化顺序:1->先初始化父类再初始化子类;2->先执行初始化对象中属性,再执行构造方法中的初始化
42.final 修饰类->该类不能被继承;final 修饰方法->该方法不能被重写;final 修饰属性->该属性初始化必须有值
43.super 在对象内部使用,可代表父类对象
44.子类的构造过程中必须调用其父类的构造方法(隐式调用父类无参构造函数),显式调用父类方法,super关键字得放在第一行
45.Object类是所有类的父类,没有明确标识继承父类的某一个类都是默认继承Object类。Object类的方法适合所有子类
46.Object的equals方法 -> 比较的是对象的引用是否指向同一块内存地址
-------------------多态---------------
47.引用多态:父类的引用可以指向本类的对象,也可以指向子类的对象
48.方法多态:创建本类对象时,调用的方法为本类的方法;创建子类对象时,调用的方法为子类重写或者继承的方法。
49.引用类型转换:向上类型转换(隐式/自动类型转换);向下类型转换(强制类型转换)
50.instanceof运算符:解决引用对象的类型,避免类型转换的安全性问题
51.抽象类:约束子类必须实现某些方法,但并不关心实现的细节
52.抽象类不能直接创建,可以定义引用变量,指向子类对象
53.接口:由全局常量和公共的抽象方法组成的特殊类
54.接口:是用来被继承,被实现的,修饰符一般使用public
55.接口:可以继承多个父类的方法
56.接口定义的常量:接口中的属性是常量,系统默认添加上“public static final”修饰符
57.匿名内部类:没有名字的类,多用于关注实现而不关注实现类的名称
-------------------字符串---------------
58.字符串具有不变性:String对象创建后则不能被修改,所谓的修改其实是创建了新的对象,所指向的内存空间不同
59.声明字符串对象,对象存放了到字符串对象的引用
60.对同一个String变量赋予不同的值,实质上是创建了新的字符串对象,变量指向了新创建的字符串对象
61.equals()方法:比较存储在两个字符串对象中的内容是否一致
62.‘==’:判断两个字符串在内存中的首地址是否相同,即判断是否是同一个字符串对象
63.StringBuffer是线性安全,StringBuilder则没有实现线程安全功能、性能略高
-------------------包装类---------------
64.装箱:把基本类型转换成包装类,使其具有对象额性质(手动装箱、自动装箱)
65.拆箱:把包装类对象转换成基本类型的值(手动拆箱、自动拆箱)
66.基本类型转换为字符串的方法:使用包装类的toString()方法、使用String类的valueOf()方法
67.将字符串转换为基本类型的方法:使用包装类的parseXxx静态方法、调用包装类的valueOf()方法转换为基本类型的包装类,会自动拆箱
-------------------集合--------------
68.迭代器Interator():返回当前集合的迭代器,通过该迭代器遍历返回该集合的每个元素
69.Set-HashSet:元素无序并且不可以重复的集合,被称为集-哈希集是Set的一个重要实现类
70.compareTo:返回正数表示大,负数表示小,0表示相等