[学习笔记]Java构造器和static关键字

构造器(构造函数)

特点

1. 构造器的名字和类名相同。
2. 不用定义返回值类型。
3. 不可以写return语句。

作用

给对象进行初始化。

注意

1. 默认构造器的特点。
2. 多个构造器是以重载的形式存在的。
3. 注解类不可以有构造器。
4. 接口不可以有构造器。

this和super

特点

this代表其所在方法所属对象的引用,super代表其所在方法所属对象的父类的引用。
换言之:this指向本类对象的引用,super指向父类对象的引用。
当在函数内需要用到调用该函数的对象时,就用this;需要用到调用该方法的对象的父类对象时,就用super。

注意

this 一般用于区分局部变量和成员变量同名的情况。
this/super 用于子类父类构造函数间互相调用
this()/super() 函数必须在构造函数的第一行,且有且仅有一个。

示例

   
   
public class Person {
 
private String name;
private int age;
 
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
 
public Person() {
super();
}
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public int getAge() {
return age;
}
 
public void setAge(int age) {
this.age = age;
}
}

static 关键字

用于修饰成员(实例域和方法)
问题:多个对象中出现共同的数据,耗费内存空间
作用:可以使用static修饰成员,表示该成员占用方法区(共享区,数据区),并且每个对象都可以访问该成员数据。
调用:多一种调用方式,可以直接被类名调用:类名.静态成员(当具有权限时)。

特点

1. 随着类的加载而加载,随着类的释放而释放。
2. 优先于对象存在。
3. 被所有对象所共享。
4. 可以直接被类名调用。

实例域(对象的成员变量)和静态域(类的静态变量)区别

1. 存放位置。
静态域随着类的加载而存在于方法区中。实例域随着对象的建立而存在堆区中。
2. 生命周期。
静态域生命周期最长。

注意

1. 静态方法不能访问非静态成员。
2. 静态方法中不可以使用this,super关键字。
3. 主函数是静态的。

使用

1. 对象共享数据,使用静态变量。
2. 不需要访问非静态成员的方法,并且是程序中共用的功能,可以使用静态方法,以便复用,并且不用建立对象。
为使其更严谨,不允许建立对象,可以私有化构造函数。

静态代码块

随着类加载执行,只执行一次。用于给类初始化。

示例

   
   
public class Demo {
// 显式初始化
int x = 3;
// 默认初始化
String name;
// 静态变量初始化
static String code = "Java";
 
// 静态代码块
static {
System.out.println("静态代码块:随着类加载执行,只执行一次。");
}
 
// 构造代码块
{
System.out.println("构造代码块:对象创建时运行一次。");
}
 
// 构造函数
Demo() {
name = "my class";
}
 
Demo(int x) {
// this语句必须定义在构造函数第一行
this();
this.x = x;
}
 
Demo(int x, String name) {
this(x);
this.name = name;
}
 
public void print() {
System.out.println("name=\"" + name + "\"; x=" + x);
}
 
public static void main(String[] args) {
Demo d = new Demo(5);
d.print();
}
}
对于
   
   
Demo d = new Demo(5);
执行过程:
1. 使用new,所以先找到Demo.class文件并加载内存(方法区)。
2. 进行静态域初始化。
3. 执行该类中的静态代码块,如果有,进行默认初始化。
4. 堆区开辟空间,分配地址。
5. 堆区中建立对象,进行默认初始化。
6. 对对象进行显式初始化。
7. 对对象进行构造代码块初始化。
8. 对对象进行构造函数初始化。
9. 将内存地址赋值给栈区中的d变量。

主函数

主函数:特殊函数,可以被JVM调用作为程序入口。

定义

public:代表访问权限最大。
static:代表主函数随类的加载就已经存在。
void:主函数无具体的返回值。
main:不是关键字,但是是一个特殊单词,可以被JVM识别。
参数String[] args,字符串数组
主函数是固定格式,JVM识别。但是可以重载等,但是虚拟机只从字符串数组参数主函数执行(args可以更改其他名字)。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值