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
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
class Person { 
    private int age;<br>       //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 {<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.静态属性可以通过类和对象访问
        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修改的成员属性、成员方法和代码块在类加载时,被放到静态区,并且只加载一次;只有当类被释放时,静态区所占的内存才会释放。因此,使用不当会造成内存泄漏。其原理图如下所示:

3.静态和非静态互访

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

  静态属性 静态方法 普属性 普通方法
静态方法 可以 可以 不可以 不可以
静态代码块 可以:前提是只能访问到在静态代码块之前声明的静态属性,之后的不可以。 可以 不可以 不可以
普通方法 可以 可以 可以 可以
构造代码块 可以 可以 可以 可以
静态方法可以重载吗? 可以      
静态方法可以重写吗? 不可以      

4.静态的作用

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

二、new关键字的作用

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

1、将类加载到方法区

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

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

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

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

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

(0)

相关推荐

  • Java基础之三个修饰符

    三个关键字 抽象的(abstract) 静态(static) 最终的(final) 一.抽象 1.1 什么是抽象 似是而非的,像却又不是:具备某种对象的特征,但不完整. 二. 抽象的(abstract ...

  • Java基本概念:接口

    一.简介 描述: 普通类只有具体实现,抽象类具体实现和规范都有,接口只有规范! 接口就是比抽象类还抽象的抽象类,可以更加规范的对子类进行约束,全面专业地实现了规范和具体实现的分离. 抽象类还提供某些具 ...

  • Java基础整理(全是干货)

    一.hashMap与hashTable与ConcurrentHashMap: 1.HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类.不过它们都同时实现 ...

  • java面向对象高级

    目录 1.类变量(静态类变量) 2.静态方法 3.Main()方法 4.代码块 5.单例模式 6.抽象类 6.1.抽象类的介绍 6.2.抽象类的特点 6.3.多态在抽象类的体现 6.4.抽象类体现了模 ...

  • java中static关键字

    static关键字: 特点: 1.static是一个修饰符,用于修饰成员.(成员变量,成员函数)static修饰的成员变量称之为静态变量或类变量. 2.static修饰的成员被所有的对象共享. 3.s ...

  • 怎么一本正经地秀技

    前言 修饰符怎么使用也是Java基础中比较重要的知识点,彻底理解了之后,后面学习更高深的东西才能得心应手.今天,以修饰符中比较常见的final为切入点,来谈谈final的使用的奇淫技巧以及一些相关的知 ...

  • Java之static作用的全方位总结

    Java之static作用的全方位总结

  • Static关键字

    Static关键字 Static修饰的属性称为类变量,修饰的方法称为静态方法,类变量和静态方法可直接使用类名点变量名/方法名调用, 但实例变量(没有static修饰的属性)和非静态方法就必须通过new ...

  • 从零开始学Java(十四)详解Java中的static关键字(上)

    ✔上一篇Java零基础系列文章我们说到了Java种this关键字的使用,今天继续来说说Java中的static关键字,篇幅较多,分为上下两篇更新,这篇文章主要内容: Java中static关键字 Ja ...

  • 从零开始学Java(十四)详解Java中的static关键字(下)

    接上篇Java-static关键字(上),今儿继续写完,这篇文章主要内容如下: Java static静态代码块 Java static静态方法 Java static静态代码块 静态代码块的语法格式 ...

  • 关于Java中static关键字的用法以及从内存角度解析

    在Java中,static可以用来修饰成员变量和成员方法. 修饰成员变量,称为静态成员方法 修饰静态方法,称为静态成员方法 搞清楚用法和区别之前,先搞清static声明的变量和普通非静态变量在内存的分 ...

  • Java中static关键字的使用

    static关键字 static表示"静态"的意思,可以用来修饰成员变量和成员方法,static的主要作用在于创建独立于具体对象的域变量或者方法. 简单理解: 被static关键字 ...

  • Java 中的关键字

    Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...

  • Java中this关键字的使用

    一,表示类中属性 1,没有使用this的情况   class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // ...

  • Java面向对象中:方法重载和方法重写以及区别、 this关键字和super关键字以及区别

    2020-04-13 Java面向对象中:方法重载和方法重写 .  this关键字和super关键字 方法重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数 ...

  • 从零开始学Java(十三)Java中this关键字的使用

    ✔上一篇Java零基础系列文章我们说到了Java封装,今天这篇文章的主要目标是带大家