java new 的作用_Java中的static关键字和new关键字作用介绍

一、static关键字的作用

1、可以用于修改类的成员变量、代码块和类

通过static可以将类的成员声明为静态成员,静态的成员归属于整个类,而不是属于某个对象。无论通过类还是对象访问静态成员,操作的都是同一个静态成员。

使用static修饰的代码块是静态代码块,静态代码块在类加载时执行。

静态代码块和静态方法不能访问非静态属性和方法。

静态方法可以被继承,但不能被覆盖(重写);如果父类中定义的静态方法在子类中被重新定义,那么父类中定义的静态方法将被隐藏。即:子类中如果有一个返回类型,方法名和参数列表均与父类同名的静态方法,那么该子类实际上只是将父类中该同名方法进行了隐藏,而非重写。它们的行为也不具有多态性。

具体示例如下所示:

class Person {

private int age;

//2.使用static修饰的代码块是静态代码块

static {

System.out.println("静态代码块!");

}

//构造代码块

{

eat();

say();

age = 10;

}

//3. 静态方法不能访问非静态属性和方法;因为其属于对象,静态方法执行时,

//对象还没有创建

public static void say() {

//age = 12;

System.out.println("静态方法说...");

}

public static void say(String str) {

//age = 12;

System.out.println("静态方法说...");

}

//非静态方法可以调用静态方法和属性

public void eat() {

say();

System.out.println("吃..." + name);

}

public static String name;

}

class Teacher extends Person {

//4.静态方法不能被重写,但是可以被继承

//@Override

public static void say() {

System.out.println("子类静态函数重写");

}

}

public class Demo01 {

public static void main(String[] args) {

/*Person p = new Person();

//1.静态属性可以通过类和对象访问

Person.name = "zhansangfen";

System.out.println(Person.name);

p.name = "李四";

Person p1 = new Person();

System.out.println(p.name);*/

System.out.println(Person.name);

}

}

2.静态的原理

使用static修改的成员属性、成员方法和代码块在类加载时,被放到静态区,并且只加载一次;只有当类被释放时,静态区所占的内存才会释放。因此,使用不当会造成内存泄漏。其原理图如下所示:

6a7c63faeefef391d8d43bff6ca2a27e.png

3.静态和非静态互访

总结:静态只能访问静态,普通可以访问所有(静态、普通)

静态属性

静态方法

普属性

普通方法

静态方法

可以

可以

不可以

不可以

静态代码块

可以:前提是只能访问到在静态代码块之前声明的静态属性,之后的不可以。

可以

不可以

不可以

普通方法

可以

可以

可以

可以

构造代码块

可以

可以

可以

可以

静态方法可以重载吗?

可以

静态方法可以重写吗?

不可以

4.静态的作用

JVM的入口方法main是静态放方法

用作工具类:就是将一类常用功能提取成若干方法写入到一个类中,这些方法通常声明为静态方法方便使用。并且将该类的构造函数私有化,禁止创建对象,直接使用类名调用方法。比如常见的数学方法:Math.asin(double a)返回一个值得正弦角度。

其他情况下使用静态。

二、new关键字的作用

new关键字用于创建一个对象,在其创建对象的过程中大致经历了一下三个步骤;

1、将类加载到方法区

JVM首先会检查这个new指令的参数能否在常量池中定位到一个类的符号引用;如果找不到就将该类加载到方法区并经过解析和初始化等步骤,计算实例化对象所需要的内存;为类的静态变量赋予正确的初始值。

2、在堆中开辟一块内存用于存储新创建的对象

将类实例化出一个新的对象,根据类加载时计算所需的内存大小;在堆中开辟一块内存,用于存储新对象的成员属性和方法区地址的引用。成员方法引用指向方法区中该对象对应的方法。

3、在栈中创建指向对象的引用

在栈中创建一个栈针,用于指向堆中创建的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值