构造方法、static关键字以及静态的main方法

本文详细介绍了Java中的构造方法,包括其作用、格式、注意事项和重载。强调了构造方法在对象初始化中的重要性,以及如何通过构造方法给私有成员变量赋值。此外,还阐述了类的组成、静态关键字的特性,如静态成员的加载时机、共享性质以及使用规则。同时,解释了内存管理中栈、堆和方法区的概念,并通过实例展示了对象创建时的内存分配过程。最后,提及了main方法的格式及其在程序执行中的角色。
摘要由CSDN通过智能技术生成
  1. 构造方法
    概述:
    给对象的数据进行初始化。
    构造方法格式:
    方法名和类名相同
    没有返回值,连void都没有
    没有具体的返回值
    构造方法的注意事项:
    如果不提供构造方法,系统会默认给出构造方法
    如果自己提供了构造方法,系统将不再提供
    构造方法也可以重载

例如:

注意:
1、如果我们没有给出构造方法,JVM会自动给我们提供一个无参构造方法
2、如果我们给出了构造方法,JVM就不再提供默认的无参构造方法。
这时候如果我们还想使用无参构造方法,就必须要自己给出来,JVM一旦发现我们自己给出了构造方法(不管是有参还是无参,只要我们自己定义了),就永远不会给出默认的构造方法。
3、构造方法可以发生重载(方法名一致,参数列表不一样)。
构造方法的作用:
可以给成员变量赋初始化值。
给成员变量赋值的两种方式:
1、使用setXxx()的形式给私有的成员变量赋值
2、使用带参数的构造方法给私有成员变量赋值,配合this指针使用
无参有参构造方法举例:

类的组成:
成员变量
构造方法
成员方法
根据返回值:
void,无返回值类型
非void的有参构造类型
形式参数:
空参的构造方法
有参的构造方法

当我们在new对象的时候,其实JVM给出了一系列运行,如下:

 

首先是
将Person.class文件加载到方法区
再在栈中给person开辟一个栈内存空间
再在堆中给person开辟一个堆内存空间
紧接着JVM给成员变量赋予初始值,一个是null,一个是0
再给成员变量进行初始化
再通过构造方法对成员变量进行初始化
数据初始化完毕,将内存中的地址给栈引用

3.static关键字
可以修饰成员变量和成员方法
static关键字的特点:
随着类的加载而加载
优先于对象存在
被类的所有对象共享(这也是判断是否使用静态关键字的条件)
可以通过类名调用
static关键字注意事项:
在静态方法中是没有this关键字的
静态方法只能访问静态的成员变量和静态的成员方法
一般情况下,只要看到一个类中有静态修饰的成员变量或者是成员方法,我们一律采用 类名.静态成员 这种方法使用
推荐使用类名调用
静态修饰的内容我们一般称为:类成员、与类相关的

static关键字使用的注意事项
在静态方法中是没有this关键字的
静态方法:
访问内容:
成员变量:只能访问静态的成员变量
成员方法:只能访问静态的成员方法
非静态方法:
访问内容:
成员变量:既可以访问静态的成员变量,也可以访问非静态的成员变量
成员方法:既可以访问静态的成员方法,也可以访问非静态的成员方法
也就是:静态的只能访问静态的。

举例:静态的只能访问静态的 

此时的内存静态图如下所示:

static随着类的加载而加载
static内存图。
用下面这些代码来解释在有static静态关键字的时候,内存是如果工作的。
将内存分为 栈、堆、方法区、静态区
首先方法里面有 class文件区、Human的方法区、静态区
1、首先运行主函数main,在栈中开辟main(String[] args)空间
2、紧接着到了函数Human h1 = new Human(“朱一龙”,41,“中国”);
3、在堆中new了一个空间出来,地址是0x0001,给name和age赋
初始值,Human中又包括了静态引用和方法引用。
h1指向0x0001,之后将name赋值为“朱一龙”,将
age赋值为41,紧接着到了静态引用,将country赋值为中国
再到了方法引用,然后到了方法引用,里面包括了构造方法和
show方法,之后展示数据

之后就在不断的重复这一过程。

main方法的格式讲解
main方法的格式讲解:
public static void main(String[] args) {…}

public: 公共的,访问权限是最大的。JVM默认的就是它。
        由于main方法是被JVM调用的,所以他的权限要是最大的。
static:静态的,不需要创建对象,通过类名就可以调用,方便我们JVM虚拟机调用
void:无返回值的意思,一般情况下,方法写返回是为了将结果返回给调用者,
     而main方法是被JVM虚拟机调用的,写返回内容没有意义。
main:是一个方法名,也是java程序的入口方法。大部分的语言入口的名字都是main
        小部分的程序入口方法不是main,例如C语言,底层调用的是_start

感谢观看,制作不易,请点赞加关注,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值