一、标识符(给类、方法、变量起名)
1. 以字母(采用Unicode字符集)、下划线、$ 开头
2. 其余部分可以是:字母(采用Unicode字符集)、下划线、$、数字
3. 不能为关键字
二、命名规则
变量、方法名:首字母小写和驼峰原则。如:run(),runRun(),age ageNew
常量:大写字母和下划线:MAX_VALUE
类名:首字母大写和驼峰原则:Man,GoodMan
三、变量:
1. 局部变量
定义在方法内或语句块内。 从属于方法或语句块。
使用之前,必须要手动初始化!
2. 成员变量(实例变量 field)
定义在类里面、方法外面。 从属于对象!
如果我们没有手动初始化成员变量,系统会自动初始化。初始化的规则如下:
数字:0,0.0 布尔:false char:\u0000 引用类型:null
3. 静态变量(类变量)
定义在类里面、方法外面、使用static修饰。 从属于类!
如果我们没有手动初始化静态变量,系统会自动初始化。初始化规则同成员变量。
四、数据类型
1. 基本数据类型
a) 数字
i. 整数:byte(1个字节) short(2个字节) int(4个字节,整型常量默认该类型) long(8个字节)
ii. 浮点数:float(4个字节) double(8个字节,浮点常量默认为该类型)
b) 字符 char(2个字节)
c) 布尔 boolean(1位)
2. 引用类型(4个字节)(引用堆里面的一个地址,固定用4个字节表示)
a) 数组
b) 对象
c) 接口(不可以new )
3.自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型,如:
int i=3; double d=i; float f=i; double d2=f;
特例:可以将整形常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其范围
short b=12 //合法 short b=1234567 //非法
五、运算符
1. 赋值运算符(=)
if(b=true) ; if(c=3) //错误写法 if(b) ; if(3==c) //正确写法
2. 算术运算符(+, -, *, /)
3. 关系运算符(> == <)
常见错误写法: 1<a<3 1<a&&a<3
4. 逻辑运算符(&&, ||, ! )
5. 位运算符
按位与&, 按位或|, <<(左移一位相当于乘以2),>>>(右移一位相当于除以2)
6. 扩展运算符:+=,-=,*=,/=,%=
7. 三目运算符
(布尔表达式)?语句1:语句2
六、控制语句
1. 顺序结构
2. 选择结构
a) If
b) If else
c) If else if … else
d) switch 多值选择 表达式:int或char/short/byte, 枚举
break问题
3. 循环结构
a) while 先判断后执行
b) for
c) do while 先执行后判断
break: 强制终止整个循环
continue:结束本次循环,继续下一次!
七、面向对象基础
对象和类:
对象是具体的事物,类是对象的抽象。
定义类:
public class 类名 { //类名(建议首字母大写)要跟文件名相同 //属性 private 数据类型 属性名; //建议增加相应的getter、setter方法 //方法 //构造方法 }
构造方法(construct):用于构造类的实例
[修饰符] 类名(形参列表){ //n条语句 }
1. 方法名必须跟类名保持一致
2. 有返回值,但不能定义返回类型,不能再构造方法里调用return
3. 通过new关键字来调用
4. 无参构造器问题:
a) 如果我们没有手动定义构造器,系统会自动为我们添加一个无参的构造器
b) 如果我们自己定义了构造器,系统就不会为我们添加无参构造器
5. 构造方法的第一句总是:super,即调用直接父类的构造方法。
a) 有继承关系的构造方法调用的顺序
方法的重载(Overload):
两同(同一个类、同一个方法名)三不同(参数列表不同:;类型、个数、顺序)
只有返回值不同不构成方法的重载
只有形参名称不同,不构成方法的重载
this:
普通方法中,调用本方法的对象。
构造方法中,正要初始化的对象。
不能用于static方法。
super:
是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
普通方法:没有顺序限制,可以随便调用。
构造函数中:任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(…),那么Java默认都会调用super()作为父类的初始化函数。
static:
用它修饰的变量和方法,就变成了静态变量和静态方法,从属于类,通过类名即可调用,实际存储于方法区中。
package:
package必须位于非注释行第一句。
包名:域名倒着写
import:
引入外部的类
Import static :导入类的静态属性
final:
修饰变量:常量(命名规范:全部大写,多个单词之间通过下划线隔开)
修饰方法:不能被子类重写,但可以被重载
修饰类:不能有子类,不能被继承。比如:Math、String。
八、面向对象的三大特征
封装
通过private、default 、protected、public关键字实现属性或方法的封装。
“高内聚,低耦合”
继承
利用extends关键字继承,子类继承父类,可以得到父类的全部属性和方法(除了父类发构造方法)
Java中类只有单继承(即一个类只能有一个直接父类),没有像C++那样的多继承
不同的叫法:超类、父类、基类;子类、派生类
方法重写(Override)的要点:
方法名保持一致
子类权限修饰符可以大于等于父类的。
子类的返回值类型小于等于父类的类型, 子类声明异常类型不能超过父类的类型。
Object类:
1. Object类是所有Java类的根基类
2. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类
3. 重写:toString方法
默认返回:包名+类名+@+哈希码
可以重写
4. equals、hashcode
5. wait、notify、notifyAll
多态(polymorphism)
三个必要条件:继承、方法的重写、父类引用指向子类对象
动态绑定(慢)、静态绑定:
抽象类:
1. 有抽象方法的类只能定义抽象类
2. 抽象类不能实例化,即不能用new类实例化抽象类
3. 抽象类可以不包含属性、方法、构造方法,但是构造方法不能用来new实例,只能用来被子类调用
4. 抽象类只能用来继承
5. 抽象方法必须被子类实现
接口:
定义格式:
[访问修饰符]interface 接口名 [extends 父接口1,父接口2...]{ 常量定义 //总是:public staticfinal 方法定义 //总是:publicabstract }
1. interface
2. 子类通过implements来实现接口中的规范
3. 接口不能创建实例,但是可以用于声明引用变量类型
4. 一个类实现了接口,必须实现接口中的多有方法,并且这些方法只能是public的
5. 接口支持多继承