java-第一阶段-Day09-构造方法、静态、继承

一、构造方法

         ·当一个对象被创建时,构造方法用来初始化该对象,给对象的成员变量赋初始值。

        构造方法执行的时机:创建对象的时候,作用:给对象的成员变量赋初始值

        构造方法有自己独有的方法格式

        ·根据是否有参数分类

        -空参构造

        -有参构造

        ·定义格式

        修饰符 构造方法名(参数列表){

                方法体(给对象的成员变量赋初始值)

        }

        ·特点

                1、方法名必须和类名一致Person类构造方法名: Person(){} Student类 构造方法名:Student

                2、没有返回值,不需要返回值类型.连void都不要写

                3、默认被jvm调用使用。不能手动调用new构造方法();构造方法必须跟在new关键字的后面.

        注意事项

                1、如果一个类你不提供构造方法,系统会给出空参构造方法。

                2、如果你提供了构造方法,系统将不再提供无参数构造方法。以后写的只要写构造方法,就把空参构造加上. (空參构造中-一般什么都不写)修饰符 类名() {}

                3、构造方法是可以重载的,既可以定义参数,也可以不定义参数。

        示例:

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(){
        name = "张三";
        age = 19;
        sex = "男";
    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public Person(String name,int age,String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }
}
public class UsePerson {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p.getName()+p.getSex()+p.getAge());
        Person p1 = new Person("李四");
        System.out.println(p1.getName()+p1.getSex()+p1.getAge());
        Person p2 = new Person("王五",20);
        System.out.println(p2.getName()+p2.getSex()+p2.getAge());
        Person p3 = new Person("赵六",30,"男");
        System.out.println(p3.getName()+p3.getSex()+p3.getAge());
    }

}

        构造方法和setter都可给私有成员变量赋值.

        1.构造方法-般是new对象的时候使用,创建对象的同时就知道要为每个成员变量赋什么值,就用构造方法.代码更加简洁

        2.创建完对象还要给成员赋值,修改成员变量的值,只能时候用setter方法。set ter比构造方法更加灵活.

二、静态-static关键字

(一)概述

        1.概述

                静态就是static,主要用来修饰java的变量(静态变量)和方法(静态方法)的关键字。一个变量或方法一旦被static修饰,那么它就是静态的内容了

        2.,没有静态

                如果某个类型的所有对象,都具有一个相同的属性值,那么这个属性值就没有必要在所有对象中,都存储一份。还有坏处:浪费堆内存空间:维护难度大,一旦需要修改,就得修改所有的对象。

        3.有静态

                如果某个类型的所有对象,都具有一一个相同的属性值,那么就在这个属性的定义上,加一个static静态关键字。让该变量存储在方法区字节码的静态区中,避免了所有对象都存储相同数据的题,节省了内存空间,将来维护容易(只需要修改一次)

(二)静态变量的特点

        1、静态变量属于类(直接可以通过类名访问静态变量),不会随着对象的变化而变化(内存位置)

        2、加载时机:

        随着类(字节码文件加载方法区)的加载而加载。

        静态变量随着类的加载进方法区,就直接在静态区给开辟了存储静态变量的内存空间,并赋初始值.

        3、静态变量优先于对象而存在

        4、静态变量被所有该类对象所共享

        5、调用方式:

        最合适的调用方式:类 名调用

        格式:类名.静态变量

        也可以通过对象名调用,但是会有警告 格式:对象名.静态变量

        示例:

public class Person {
    public String name;
    public static String color;
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public static void show(){
        System.out.println("静态变量"+color);
        //test();
        test2();
    }
    public void test(){
        System.out.println(name);
        System.out.println(color);
    }
    public static void test2(){
        System.out.println(color);
    }
}
public class UsePerson {
    public static void main(String[] args) {
        Person.color="黄色";
        Person p = new Person("张三");
        System.out.println(p.color);
    }
}

(三)静态方法的注意事项

        1、静态方法:在方法声明上,加上了static关键字的方法,就是静态方法

        public static 返回值类型方法名(参数列表) {方法体}

        2、静态方法不能访问非静态的变量(成员变量)

        原因:静态方法可以在没有创建对象的时候调用,而非静态的变量只有在对象创建之后才存在。如果静态方法可以访问非静态的变量,那么就相当于在对象创建之前,就访问了对象创建之后的数据。明显不合理。

        3、静态方法不能访问非静态的方法(成员方法)

        原因:静态方法可以在没有创建对象的时候调用:非静态的方法可以访问非静态的变量。如果静态方法可以访问非静态的方法,就相当于静态方法间接的访问了非静态的变量,和第2点矛盾。

        静态方法早于对象存在,而非静态方法属于对象,如果静态方法能访 问非静态方法,就相当于使用了一个不存在对象方法,明显不合理;

        4、静态方法中不能存在this关键字

        原因:

        this关键字表示本类当前对象。静态方法可以在对象创建之前调用。如果静态方法可以访问this关键字,相当于在创建对象之前,就使用了对象本身----矛盾。

        总之就一句话:静态方法不能使用所有对象内容,静态方法只能用静态的内容反之非静态方法,就可以使用所有静态的内容,因为对象出现的比静态的内容晚.

        5.静态方法的调用方式:

        最合适的调用方式:类名调用 格式:类名.静态方法名(实参);

        也可以通过对象名调用,但是会有警告 格式:对象名.静态变量方法名(实参):

(四)静态变量和非静态变量的区别

        1.概念上,所属不同:

                非静态变量属于对象

                静态变量属于类,类变量

        2.内存空间不同,存储位置不同

                非静态变量属于对象属于对象,所以存储在堆内存中

                静态变量属于类,存储在方法区的静态区中

        3.内存存活时间不同,生命周期不同

                非静态变量属于对象,所以生命周期和对象相同,随着对象的创建二存在,随着对象的消失而消失

                静态变量属于类,所以生命周期和类相同,随着类的加载二存在,随着类的消失而消失

        4.访问方式不同

                非静态变量只能使用对象访问

                静态变量既可以使用对象访问,也可以通过类名访问

三、继承

(一)继承的概念

        1.概述

                继承是面向对象三大特征之一,继承会产生父子类,可以使得子类具有父类的属性和方法,而且还可以在子类中重新定义,以及追加属性和方法一-种体现方式

                比如: A继承B A就是子类,B就是父类,A可 以不定义B类出现的内容,也可以定义,还可以添加自己类中独有的内容.而且即使A不定义B类中内容,A也可以使用B类内容.

                总结:继承就是让两个类之间产生关系,这种关系就是继承关系.现实生活中继承

        2.继承的实现

                继承通过关键字extends 实现的,具有自己固有的格式

                格式:

                修饰符class 子类extends父类{ }

                继承关系建立一定要合理.不能为了继承而继承,

        举例:

        class Dog extends Animal { }

        好处:

        继承可以让类与类之间产生子承父业的关系,形成生子父类后,子类则可以直接使用父类中非私有的成员。

        示例:

public class Animal {
    public String name;
    public int age;
    private String sex;

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }

    public void eat(){
        System.out.println("吃");
    }
    public void sleep(){
        System.out.println("睡");
        drink();
    }
    private void drink(){
        System.out.println("喝水");
    }
}
public class Dog extends Animal{

}
public class UseDog {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.name = "二哈";
        d.age = 3;
        d.setSex("公的");
        System.out.println(d.getSex());
        d.eat();
        d.sleep();
        //d.drink();
    }
}

(二)继承的好处

        1.好处

                提高了代码的复用性

        2.弊端

                继承让类与类之间产生了关系,类与类之间的耦合性增强(两个类之间的关系性增强)了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇正经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值