java第四天---类与对象2

  1、方法的重载

  2、类的构造方法

  3、static

  4、包

  5、权限修饰符

一、方法的重载

  方法的重载要解决的问题:当一个类中存在很多方法时,对开发很不友好,方法名太多太不好记忆。这时候如果能够让多个方法的方法名相同,让参数列表不同,就能实现不同的功能,让开发者使用时也比较轻松。解决这个问题就是方法的重载。

  方法重载的特点:

    ①方法重载是在同一个类中发生的

    ②方法重载的方法名相同,参数列表不同(可以是参数个数不同,参数类型不同,参数顺寻不同)。

    ③返回值没有要求,可以相同,可以不同

    示例:

View Code

二、构造函数

  什么是构造函数?

    一个特殊的方法,构造函数存在于类中,作用是创建对像时对其进行初始化,就是为对象中的属性进行赋值

  构造函数的特点:

    ①函数名和类名相同

    ②没有返回值

    ③没有static修饰

    ④构造函数分为有参构造和无参构造,符合方法重载的要求,也就时说可以多个构造函数以满足不同的初始化要求。

    ⑤当类中没有写构造函数时,java会默认有个无参的构造方法。但是当你写了有参构造方法时,这个默认的无参构造方法就没有了。我们提议将无参构造方法手写出来。

  示例:

  创建一个类:   


public class cao {
String color;
int height;

// 无参构造
public cao(){};
// 有参构造
public cao(String color,int height){
/*我们在参数列表中使用的参数名和类的属性名是相同的,所以我们需要在属性名前使用
this来对参数名和属性名进行区分,this指的是当前对象,this.属性名,就是对象的属性
*/
this.color=color;
this.height=height;
}

public void instrustor(){
System.out.println("这是"+color+"的草,高为"+height);
}
}
 

  测试类:

public class CaoTest {
    public static void main(String[] args) {
//       使用无参构造创建对象
        cao cao = new cao();
        cao.height=8;
        cao.color="黄色";
        cao.instrustor();

//       使用有参构造创建对象
        cao cao1 = new cao("绿色", 69);
        cao1.instrustor();
    }
}
View Code

三、static关键字

  static可以做什么?

    static可以修饰变量,方法,代码块。

    静态变量、静态方法,静态代码块。

  特点:

    ①静态方法只能调用静态变量和静态方法

    ②实例方法(除了静态方法和构造方法)可以调用普通成员变量,静态变量,实例方法,成员方法

    ③静态变量和静态方法通过类直接调用:类名.变量/方法名。也可以new对象调用,但是不推荐

    ④被static修饰的变量、方法、代码块都是类的组成,在程序加载时加载,只加载一次

  为什么要使用static关键字?

    举个实例大家理解一下,举一个砍树的例子,首先声明,我们要保护环境,保护我们的家园。

    目前有50棵树,由三个伐木工一块砍伐:

    代码实例一:第一个实例中,num属性没有使用static修饰

public class Rosser {
//  树的数量
    int num=50;
//    普通类成员变量
    int pNum;  //人数

    public Rosser(){}

//    静态代码块 :此处只为展示静态代码块的写法,并无其他意义
//    静态修饰的各种东西都是在程序加载的时候就加载进内存,所以静态代码块执行的比对象实例化早
    static {
        System.out.println("这是一片树林");
    }
//  静态方法:此处只为展示静态方法的写法,所以该方法并无任何实际意义
    public static void zhongshu(){
        System.out.println("zhognshu");
    }
    public int kanshu(){
        return --num;
    }
}
View Code

    运行结果:

public class ShuTest {
    public static void main(String[] args) {
        Rosser rosser1 = new Rosser();
        int kanshu = rosser1.kanshu();
        System.out.println("伐木工一:还剩"+kanshu+"棵树");

        Rosser rosser2 = new Rosser();
        int kanshu2 = rosser2.kanshu();
        System.out.println("伐木工二:还剩"+kanshu2+"棵树");

        Rosser rosser3 = new Rosser();
        int kanshu3 = rosser3.kanshu();
        System.out.println("伐木工一:还剩"+kanshu3+"棵树");
    }
}

/*控制台中的运行结果:
这是一片树林
伐木工一:还剩49棵树
伐木工二:还剩49棵树
伐木工一:还剩49棵树
*/
View Code

    从结果看出,每个伐木工砍过树之后都是只剩49棵,这是不符合逻辑的

    代码示例二:这次使用static修饰num属性

public class Rosser {
//  树的数量
    static int num=50;
//    普通类成员变量
    int pNum;  //人数

    public Rosser(){}

//    静态代码块 :此处只为展示静态代码块的写法,并无其他意义
//    静态修饰的各种东西都是在程序加载的时候就加载进内存,所以静态代码块执行的比对象实例化早
    static {
        System.out.println("这是一片树林");
    }
//  静态方法:此处只为展示静态方法的写法,所以该方法并无任何实际意义
    public static void zhongshu(){
        System.out.println("zhognshu");
    }
    public int kanshu(){
        return --num;
    }
}
View Code

    运行结果:

public class ShuTest {
    public static void main(String[] args) {
        Rosser rosser1 = new Rosser();
        int kanshu = rosser1.kanshu();
        System.out.println("伐木工一:还剩"+kanshu+"棵树");

        Rosser rosser2 = new Rosser();
        int kanshu2 = rosser2.kanshu();
        System.out.println("伐木工二:还剩"+kanshu2+"棵树");

        Rosser rosser3 = new Rosser();
        int kanshu3 = rosser3.kanshu();
        System.out.println("伐木工一:还剩"+kanshu3+"棵树");
    }
}

/*控制台输出的结果:
这是一片树林
伐木工一:还剩49棵树
伐木工二:还剩48棵树
伐木工一:还剩47棵树
*/
View Code

    这次的输出是没有问题的,符合现实逻辑。

  详解:没有被static修饰的num属性,会随着每次创建对象而初始化,也就导致了每个伐木工的对象的num数量都是50棵。被static修饰的属性,是类的属性,在程序加载时加载,早已经存在于内存中,不会再随对象的实例化而实例化,每个对象都是访问内存的同一个num.

四、权限修饰

  什么是权限修饰符?

    权限修饰符共四种:private(私有的)、protected(受保护的)、public(公共的)、default

  权限修饰符做什么使用?

    权限修饰符用来对类、方法、属性进行修饰,用来控制各个东西的访问权限。默认是default.

  以下是每个修饰符修饰的东西的作用范围:

 

_____________同一类______同一包________同一包的子类________不同包子类_______其他__________

public           可以               可以                           可以                            可以                    可以

protected           可以               可以                           可以                            不可以               不可以

default                    可以                可以                           不可以                         不可以              不可以

private                    可以                不可以                       不可以                          不可以              不可以

 

posted @ 2020-12-10 20:21  橙汁one  阅读(94)  评论(0编辑  收藏  举报