【Java基础学习笔记】5、类、对象和方法

面向过程:注重事情的每一步。
面向对象:只关注对象,以及对象的功能。


一、类

(1)什么是类?

 类是一系列具有相同特点的事物和行为的抽象集合。狮子、金鱼、天鹅之间有很多不同,但是由于它们都是动物,所以可归为动物这一类。类是抽象的,生活中可以实际接触到的都是类实例化之后的对象。

(2)类里面有什么?

Ⅰ.成员变量

 声明在类中, 不需要初始化(有默认值)。
 成员变量就好比类的特点,狮子、金鱼、天鹅作为动物都有其体重、寿命等等,这些特点就是动物类的成员变量。
常用数据类型的默认初始值:
boolean类型:false
char类型:null
byte类型:(byte)0
short类型:(short)0
int类型:0
long类型:0L
float类型:0.0f
double类型:0.0d

Ⅱ.局部变量

 声明在方法中, 必须初始化(赋予初值)。
 局部变量的作用域仅在方法或代码块内,当方法被调用后或代码块被加载后,局部变量便开始被创建使用,方法调用结束或代码块结束,局部变量便被销毁。假如方法调用是一场考试,局部变量就好比监考老师分发的草稿纸,在考试期间(方法调用)进行使用,考试结束(方法调用结束)后便被收回(销毁)。
代码示例:

public static void main(String[] args) {
    
    
        func();
    }
    public static void func() {
    
    
        int a=10;//a为局部变量
        System.out.println("调用了方法,使用局部变量,值为:"+a);
    }
    //代码写在同一个类中

结果如下:
在这里插入图片描述
同样的代码,如果在主方法中尝试输出变量a,就会发生错误。
代码示例:

public static void main(String[] args) {
    
    
        func();
        System.out.println(a);
    }
    public static void func() {
    
    
        int a=10;
        System.out.println("调用了方法,使用局部变量,值为:"+a);
    }
    //代码写在同一个类中

结果如下:在这里插入图片描述
这是因为a为局部变量,其生命周期无法延伸至方法外。

Ⅲ.构造方法

 在声明一个类之后,在将其实例化时,有时需要给其成员变量赋初值,而在创建之后再挨个赋值会比较麻烦,这时可以使用类的构造器,也叫构造方法。它的作用就是给类的成员变量初始化,当我们调用构造方法时,可以根据需要输入对应的值,来初始化其成员变量。
 特点: 方法名和类名一致, 没有返回值类型。
public 类名 (参数类型1 参数1,参数类型2,参数2…){
     赋值过程
}
 构造器可以不写, 也可以写多个。当没有写构造器的时候, 编译器会自动给我们提供一个无参构造器。一旦写了一个构造器, 无参构造器就不会自动提供了。多个构造器, 也叫构造器重载。
 建议:构造方法最好无参构造器。
代码示例:

public class javaexample {
    
    
    public static void main(String[] args) {
    
    
        animal lion=new animal(5,80);
        //调用构造方法,为age和weight赋初值
        lion.print();
        //调用print方法,打印相关信息
    }
}
class animal{
    
    
    int age;
    int weight;
    public animal(){
    
    }//无参构造器
    public animal(int age,int weight){
    
    //有参构造器
        this.age=age;//给成员变量赋初始值
        this.weight=weight;
    }
    public void print(){
    
    
        System.out.println("年龄:"+age+",体重:"+weight);
    }
}

结果如下:
在这里插入图片描述

this关键字

 上面的代码中用到了this关键字,this,即本、此,在哪个类中使用就是该当前类。在构造方法中,括号中的age和weight只是形参,是调用构造方法时产生的局部变量,在赋初值时,为了区分加上this,this后面的变量才是成员变量。而当成员变量和局部变量不同名时可以不加this。
 当使用 this(参数选填) 时,即自己调用自己的构造器,必须放在构造方法的第一行,this不可省略,注意不要使构造器的调用产生闭环(A调用B的同时B调用A)。

Ⅳ.内部类

 即类中定义一个类。如:汽车类(外部类)–>引擎类(内部类)。
【Java基础学习笔记】8、内部类

二、对象

(1)什么是对象?

 对象,就是男女朋友间的一种称 就是抽象概念的类具体化后的实体,类示例化之后是对象,一系列对象的抽象集合是类。对象具有以下特性:
1、对象具有属性和行为。
2、对象具有变化的状态。
3、对象具有唯一性。
4、对象都是某个类的实例。
5、一切皆为对象,真实世界中的所有事物都可以视为对象。

(2)对象的创建

类名 对象名 = new 类名(参数选填);

Person xiaoming = new Person();//创建了一个叫小明的人
Cat Kate = new Cat("黄色");//创建了一只黄色的叫Kate的猫
Car QQ = new Car(50);//创建了一辆时速50km的奇瑞QQ

三、方法

(1)什么是方法?

 之前写了很多方法,数组的处理有Arrays.copyOf()方法、Arrays.sort()方法等,输出数据时用到了System.out.println()方法,类的初始化用到了构造方法。而方法就语句的集合,将这些语句集合在一起执行某项功能。方法是解决一类问题的步骤的有序组合,包含于(静态方法)或对象(非静态方法)中,在程序中被创建,在其他地方被引用。

(2)方法的优点

1、 使程序变得更简短而清晰。
 由于一系列语句被组合成方法,会使得程序更加整洁,增加可读性。
2、提高了代码的重用性,提高程序开发的效率。
 如果在程序的多个地方需要相同的代码块,便可将其整合为方法使用,简洁方便。
3、有利于程序维护。
 如果方法中有错误,直接在方法的代码块中进行修改即可,不需要更改程序调用方法处的代码。

(3)方法的定义

修饰符 返回值类型 方法名(参数类型 参数名){
 …
 方法体
 …
 return 返回值;
}
修饰符:可选,告诉编译器如何调用该方法,同时定义这个方法的访问类型。
返回值类型:定义了方法的返回值类型,必须相对于。void的返回值为空,但是也是有返回值类型的。
方法名:方法实际的名字,方法名和参数列表共同构成了方法签名。
参数类型:当方法被调用时,传递值给参数。这个值被称为实参或变量。
参数列表:是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
如:

public static int age(int birthday){
    
    ...}//一个参数
static float game(float principal, int year){
    
    ...}//多个参数
public void fishing(){
    
    ...}//没有参数

方法体:方法体包含具体的语句,定义该方法的功能。
代码示例:

public static void main(String[] args) {
    
    
        int a=5,b=10;
        System.out.println(plus(a,b));//调用方法并输出
    }
    public static int plus(int a,int b){
    
    
        return a+b;//返回a+b的值,返回值类型与定义的相同
    }

结果如下:
在这里插入图片描述

(4)方法的调用

 当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到方法结束时交还控制权给程序。
 方法的调用有两种情况。当方法的返回一个值的时候,方法的调用通常也被看作是一个值。如:

int max=Math.max(a,b);//调用Math.max方法返回a和b中较大的数
int max=10;//直接赋值
//这两句语句中,Math.max(a,b)和10都被当作一个值赋给了max变量

当方法的返回值类型是void时,方法被当作一条语句执行。
如:

public static void main(String[] args) {
    
    
        int[] num={
    
    22,3,45,64,57};
        int[] newnum=Arrays.sort(num);
    }

会出现以下错误:
在这里插入图片描述
这是因为,Array.sort()方法返回值为空,返回值为空肯定不能被赋值。然而当输出数组时:

public static void main(String[] args) {
    
    
        int[] num={
    
    22,3,45,64,57};
        Arrays.sort(num);
        System.out.println(Arrays.toString(num));
    }

在这里插入图片描述
会发现原数组的顺序已经被排好了,说明方法的确被调用了。void方法可以被看作是一条处理数据的语句,加工数据的代码块。

(5)方法的重载

 方法名相同、参数列表不同的方法,称为方法的重载。编译器会根据不同的参数列表决定调用不同的方法。
 方法重载可以让程序更清晰易读。执行密切相关任务的方法应该使用相同的名字。
 重载的方法必须拥有不同的参数列表。你不能仅仅依据修饰符或者返回类型的不同来重载方法。
代码示例:

public static void main(String[] args) {
    
    
        int a=6,b=9;
        double c=1.6,d=3.1;
        System.out.println("调用第一个:"+plus(a,b)+'\n'+"调用第二个:"+plus(c,d));
    }
    public static int plus(int a,int b){
    
    
        return a+b;
    }
    public static double plus(double a,double b){
    
    
        return a+b+1000;//结果加1000来区分两个方法
    }

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_53743140/article/details/114264051