JAVASEday05 构造函数

使用构造函数执行初始化

构造函数是一个特殊的方法,它的作用是创建实例时初始化,构造器是床将对象的重要途径。当系统创建一个对象时,会默认初始化,将基本类型设置为0或false,引用类型设置为null。如果想改变默认初始化,想让系统创建对象时就为对象进行显示初始化,就可以使用构造函数实现。构造函数的格式如下

权限修饰符 类名{
}

构造函数特点:

  • 函数名与类名相同
  • 不能定义返回值类型
  • 不能写return语句
    下面我们看一段代码
public class Demo1 {
    public static void main(String[] args) {
        Person p1=new Person();
        Person p2=new Person("李四");
        Person p3=new Person("王五",10);
        p3.cry();
    }

}
class Person{
    private String name;
    private int age;
    public Person(){
        System.out.println("name="+name+" age="+age);
        cry();
    }
    public Person(String n){
        name=n;
        System.out.println("name="+name+" age="+age);
        cry();
    }
    public Person(String n,int a){
        name=n;
        age=a;
        System.out.println("name="+name+" age="+age);
        cry();
    }
    public void cry(){
        System.out.println("cry--");
    }
}

总结:

  • ==对象一建立,就会调用与之对应的构造函数,可以给对象进行初始化
  • 当一个类中没有定义构造函数时,西永就为该类加入一个空参数的构造函数,挡在勒种自定义了构造函数后,默认构造函数就没有了

构造函数和一般函数的区别

  • 构造函数赫尔一般函数在写法上不同,在执行上也有不同,构造函数是在对象一建立就运行,给对象初始化,而一般函数是对象调用才执行,是给对象添加对象的共功能,
  • 一个对象建立,构造函数执行一次,而一般方法执行多次
    **什么时候定义构造函数?**分析事物中,该事物存在一些特性或者行为,就把它们定义在构造函数中

构造代码块

格式:

{
System.out.println("构造代码块");
}

作用:给对象进行初始化,可以将对象共同的属性定义在构造代码块中

public class Demo1 {
    public static void main(String[] args) {
        Person p1=new Person();
        Person p3=new Person("王五",10);
        p3.cry();
    }
}
class Person{
    private String name;
    private int age;
    {
        cry();
    }
    public Person(){
        System.out.println("name="+name+" age="+age);
    }
    public Person(String n){
        name=n;
        System.out.println("name="+name+" age="+age);
    }
    public Person(String n,int a){
        name=n;
        age=a;
        System.out.println("name="+name+" age="+age);
    }
    public void cry(){
        System.out.println("cry--");
    }
}

对象一建立就运行,而且优先于构造函数执行
构造代码块和构造函数的区别
构造代码块是给所有对象进行统一初始化的,而构造函数是给对应的函数初始化

this关键字

如果局部变量和成员变量同名,就要使用this关键字进行区分,this代表它所在函数所属对象的引用,简单说,哪个对象在调用this所在的函数,this就代表哪个对象
this的应用:
当定义类类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,但凡本来功能内部使用到了本类对象,就使用this。

this还可以用于构造函数之间的相互调用

public class Demo1 {
    public static void main(String[] args) {
        Person p=new Person("llisi",30);
        Person p1=new Person("llisi2",30);

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

static关键字

static是一个修饰符,用于修饰成员变量和成员函数,来看一个例子

public class Demo1 {
    public static void main(String[] args) {
        Person p=new Person();
        p.name="zhangsan";
        p.show();
        Person p1=new Person();
        p1.name="lisi";
        p1.show();
    }
}
class Person{
    String name;
     String country="CN";
    public void show(){
        System.out.println(name+country);
    }
}

上面的例子创建了两个对象p和p1,两个对象都有国籍这个相同的数据,在内存中是这样的
在这里插入图片描述
如果对象建立的越多,内存中的country就越多,但是这部分的内容方式一样的,这就很浪费内存空间,我们就可以将共同的属性拿出来,放在单独的一个地方,这时候就用到了static。

public class Demo1 {
    public static void main(String[] args) {
        Person p=new Person();
        p.name="zhangsan";
        p.show();
        Person p1=new Person();
        p1.name="lisi"; 
        p1.show();
    }
}
class Person{
    String name;
    static String country="CN";
    public void show(){
        System.out.println(name+"  "+country);
    }
}

被静态修饰的属性,被对象所共享,代码上并看不出什么大的区别,我们看内存图
在这里插入图片描述
被静态修饰的属性,只占了一次内存,即使创建了多个对象,他们都可以共享到这个用static修饰的属性。
当成员被静态修饰后,就多了一种访问方式,除了可以被对象调用外,还可以直接被类名调用,
static特点:

  • 静态随着类的加载而加载

  • 被所有对象所共享

  • 优先于对象存在

  • 可以直接被类名所调用
    成员变量和类变量的区别:

  • 存放位置不同:类变量随着类的加载而存在于方法区中,实例变量随着对象的建立而存在月堆内存中。

  • 生命周期不同:类变量生命周期最长,随着类的消失而消失,成员变量的声明周期随着对象的消失而消失。
    静态的使用注意事项:

  • 静态方法只能访问静态成员,

  • 非静态方法既可以访问静态,也可以访问非静态

  • 静态方法中,不可以定义this,super关键字,因为静态优先于对象存在,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值