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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 中的static 关键字和new 关键字作用介绍 一、static 关键字的作用
1、可以用于修改类的成员变量、代码块和类
1. 通过static 可以将类的成员声明为静态成员,静态的成员归属于整个类,而不是属于某个对象。

无论通过类还是对象访问静态成员,操作的都是同一个静态成员。

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

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

4. 静态方法可以被继承,但不能被覆盖(重写);如果父类中定义的静态方法在子类中被重新定义,那么父类中定义的静态方法将被隐藏。

即:子类中如果有一个返回类型,方法名和参数列表均与父类同名的静态方法,那么该子类实际上只是将父类中该同名方法进行了隐藏,而非重写。

它们的行为也不具有多态性。

具体示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Person {
private int age;<br> //2.使用static 修饰的代码块是静态代码块
static {
System.out.println('静态代码块!'); }
//构造代码块 {
eat(); say(); age = 10; } //3. 静态方法不能访问非静态属性和方法;因为其属于对象,静态方法执行时, //对象还没有创建 public static void say() { //age = 12;
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 {<br> //4.静态方法不能被重写,但是可以被继承
//@Override
public static void say() {
System.out.println('子类静态函数重写');
}
}
public class Demo01 {
public static void main(String[] args) {
/*Person p = new Person();<br> //1.静态属性可以通过类和对象访问
= 'zhansangfen';
System.out.println();
= '李四';
Person p1 = new Person();
System.out.println();*/
System.out.println();
}
}
2.静态的原理
使用static修改的成员属性、成员方法和代码块在类加载时,被放到静态区,并且只加载一次;只有当类被释放时,静态区所占的内存才会释放。

因此,使用不当会造成内存泄漏。

其原理图如下所示:
3.静态和非静态互访
总结:静态只能访问静态,普通可以访问所有(静态、普通)
静态属性静态
方法
普属

普通
方法
静态方法可以可以不可

不可

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

可以
不可

不可

普通方法可以可以可以可以构造代码块可以可以可以可以静态方法可以
重载吗?
可以
静态方法可以
重写吗?
不可以
4.静态的作用
1.JVM的入口方法main是静态放方法
2.用作工具类:就是将一类常用功能提取成若干方法写入到一个类中,这些方法通常声明为静态方法方便使用。

并且将该类的构造函
数私有化,禁止创建对象,直接使用类名调用方法。

比如常见的数学方法:Math.asin(double a)返回一个值得正弦角度。

3.其他情况下使用静态。

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

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

成员方法引用指向方法区中该对象对应的方法。

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

相关文档
最新文档