java详解 --- 构造方法和static关键字

一.构造方法

1.作用
构造方法是一个方法,作用是对对像的属性(就是成员变量)进行初始化.
2.写法
a.构造方法的方法名和类名完全一样(大小写必须一样);
b.没有返回值(没有return)和返回值类型(不写void).
例如:

class Car{  // 定义一个车类
    String name;
    String color:

    // 写一个没有参数的构造函数
    public Car(){

    }
}

上面就是一个没有参数类型的构造方法.既然有没有参数的构造函数,那么肯定也有有参数的构造函数.
3.无参构造方法和有参构造方法
举例说明无参构造方法和有参构造方法有什么不同:

public class Demo01 {

    public static void main(String[] args) {
        //在初始化对象时,构造方法是系统帮你调用的
        //测试无参的构造方法
        Person p1 = new Person();
        //p1.Person();//无法自己调用构造方法(不能使用对象.方法)
        p1.sayHi();

        //测试有参的构造方法
        Person p2 = new Person("张三",20);
        p2.sayHi();
    }
}
//定义一个类
class Person{
    String name;
    int age;

    //定义一个无参数的构造方法
    public Person(){

    }

    //定义一个有参数的构造方法
    public Person(String name,int age){
        //给对象的成员变量进行赋值
        this.name = name;
        this.age = age;

    public void sayHi(){
        System.out.println(name + "--" + age);
    }
}

由此可以得出怎么理解构造方法的有参和无参?
初始化后面的那对小括号 –>
有参就是在小括号里填写参数;
无参就是不在小括号里面填写参数.
由此可以联想到函数的重载(参数的顺序,个数,数据类型不同就是函数的重载.和函数名无关),构造方法同样也符合函数的重载.
4.构造方法的注意事项
a.如果你没写任何构造方法,那么系统会自动提供一个无参的构造方法给你;
b.如果你写了有参数的构造方法,那么这时系统就不会提供无参的构造方法给你;
c.如果你写了有参数的构造方法,那么建议你把无参的构造方法也写了.
举例说明:

public class Demo02 {

    public static void main(String[] args) {
        Car c1 = new Car("法拉利","红色");
        //这样直接修改好不好?
        //肯定是不好的.这样浪费了内存空间
        //c1 = new.Car("兰博基尼","银色");
        直接用对象.属性 相对于上面的方法更灵活,比较省空间
        c1.name = "布加迪";
        c1.color = "蓝色";
        c1.sayHi();
    }
}
//定义一个Car类
class Car{
    String name;
    String color;

    //不管你有没有写有参数的构造方法,都把无参的构造方法写上
    public Car(){
    }

    //写一个有参数的构造方法
    public Car(String name,String color){
        this.name = name;
        this.color = color;
    }

    public void sayHi(){
        System.out.println(name + "----" + color);
    }
}

二.static关键字

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法.static关键字主要有两种作用:
第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关;
第二,实现某个方法或属性与类而不是对象关联在一起.
1.静态变量 – 类变量
static修饰的成员变量习惯上称为静态变量.可以直接通过类名来调用.也可以用对象调用,但是不推荐,因为静态变量被加载的时候,对象还没有被创建,所以静态变量不依赖对象,因此不推荐使用对象名调用.
2.静态变量使用的一些问题
—静态变量的特点:
a.随着类的加载而加载;
b.创建顺序优先于对象;
c.是类创建出来的对象,是可以共享的部分;
d.可以用类名去调用

—静态变量的好处:
可以节省内存空间.创建一次,类中的对象都可以调用.

—静态变量与成员变量的区别:
a.所属不同
静态变量:属于类 所以又被称为类变量
成员变量:属于对象 所以又被称为对象变量或者实例变量

b.在内存中的储存位置不同
静态变量:储存在方法区的静态区中
成员变量:储存在堆内存中

c.加载到内存中的时间不同
静态变量:随着类的加载而存在
成员变量:随着对象的创建而存在

d.调用方法不同
静态变量:可以使用对象调用,也可以是有类调用.一般使用类调用
成员变量:只能使用对象去调用

下面举例说明:

public class Demo03 {

    public static void main(String[] args) {
        Singer s1 = new Singer();
        s1.name = "薛之谦";
        Singer.country = "中国";//用类调用静态变量
        s1.sayHi();

        Singer s2 = new Singer();
        s2.name = "张靓颖";
        Singer.country = "中国";//用类调用静态变量
        s2.sayHi();
    }
}
//定义一个singer类
class Singer{
    String name;
    Static String country; // 静态变量

    public void sayHi(){
        System.out.println(name + "---" + country);
    }
}

3.静态方法 — 类方法
举例说明静态方法:

public class Demo05 {

    public static void main(String[] args) {
        Man m1 = new Man();
        m1.sayHi1();
        // 静态方法的调用 使用 类名.方法去调用
        Man.sayHi2();
    }
//定义一个Man类
class Man{
    String name;//成员变量
    static int num;//静态变量
    // 在成员方法中可以使用 成员变量 和 静态变量
    public void sayHi1(){
        System.out.println(this.name);
        System.out.println(Man.num);
    }
    // 声明一个静态成员方法
    // 静态方法只能使用静态的变量和静态方法
    public static void  sayHi2(){
        // 在静态成员方法中是没有办法使用成员变量的
        // System.out.println(name);
        // 只能使用静态变量
        System.out.println(num);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值