类 & 对象
类可以理解为模板,而对象可以理解为由模板创建的实例。
一个类通常由属性、方法和构造器组成。
属性通常用来描述对象的特征,例如人的姓名,年龄等。
方法则用来描述对象的行为,例如人的跑步,吃饭等。
构造器则用来初始化对象。
创建类
修饰符 class 类名 {
属性;
构造器;
方法;
}
当修饰符为public时,文件名称必须为类名。
创建对象
类名 对象名 = new 类名();
对象就是通过类的构造器来创建对象,当类中没有定义构造器时,Java会使用默认的类构造器。
属性
属性用来记录模板的特征。就是定义在类中的变量。
修饰符 class 类名{
修饰符 数据类型 变量名;
}
类属性 & 成员属性
当类的对象的属性都一样时,就可以用static来修饰属性,这样该属性就变成了类属性。类属性是共享的,可以通过类名直接访问,也可以通过对象访问(不推荐)。
当类的对象的属性各不一样时,就不能使用static来修饰属性,这样该属性就是成员属性。成员属性是每个对象所特有的,通过对象访问。
属性根据不同的数据类型,具有不同的默认值。
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
char | \u0000 |
boolean | false |
引用类型 | null |
class Chinese{
static String country; // 类属性
String name; // 成员属性
int age; // 成员属性
}
Chinese.country = "中国";
Chinese person1 = new Chinese();
Chinese person2 = new Chinese();
person1.name = "Ethan";
person1.age = 20;
person2.name = "Jack";
person2.age = 21;
方法
方法依赖类,只能定义在类中。用来表示类的行为或功能。
修饰符 返回值类型 方法名(参数列表) throws 异常列表{
方法体;
}
- 返回值类型:不可缺失,无返回值时为void
- 参数列表:可以为空,存在时为数据类型 形参,数据类型 形参…
- throws 异常列表也是可选的
- 方法体,当返回值类型不为void时,必须存在return语句,且返回的数据类型和返回值类型一致。
静态方法 & 成员方法
当类中的方法与类的实例对象没无关时,可以利用static修饰该方法,使其变成静态方法。
class Chinese{
// 类变量
static String country;
// 成员变量
String name;
int age;
// 静态方法
static String printCountry(){
// 静态方法中只能使用类属性,不能使用成员变量
System.out.println(country);
}
// 成员方法
String introduce(){
// 在成员方法中既可以使用成员变量又可以使用类属性
System.out.println("我的姓名: " + name);
System.out.println("我的年龄: " + age);
System.out.println("我的国籍: " + country);
}
}
public class ChineseTest{
public static void main(String[] args){
// 类变量和静态方法的使用
Chinese.country = "中国";
Chinese.printCountry();
// 对象和成员变量和方法的使用
Chinese chinese1 = new Chinese();
chinese1.name = "Ethan";
chinese1.age = 19;
chinese1.introduce();
}
重载
Java中方法的签名由方法名,形参数据类型和形参数量
决定。当方法的名称相同,但是形参数据类型或数量不同时,则方法就发生了重载。Java会根据实参的实际情况(数据类型存在自动转换的情况),寻找最恰当的方法使用。
int add(int a, int b){
return a + b;
}
int add(int... nums){
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
double add(double... nums){
double sum = 0;
for (int i = 0; i < nums.length; i++){
sum += nums[i];
}
return sum;
}
可变形参
可变形参是指方法的形参数目不确定,在Java内部以数组的方式来存储可变形参。Java中一个方法中只能有一个可变形参,且只能放在形参的最后位置。
数据类型... 参数名
double add(double... nums){
double sum = 0;
for (int i = 0; i < nums.length; i++){
sum += nums[i];
}
return sum;
}
String concat(Char sep, String... str){
String result = "";
for(int i = 0; i < str.length; i++){
if( i == 0){
result += str[i];
}else{
result += (sep + str[i]);
}
}
return result;
}
递归方法
递归方法就是在方法体中调用方法自身,递归方法设计时需要注意终止条件或者递归一定要向已知方向递归。
// 斐波拉契数列
public static long fibonacci(int n){
// 终止条件
if(n <= 1){
return 1;
}else{
// 向终止条件递归
return fibonacci(n - 2) + fibonacci(n - 1);
}