文档章节

java 中的static关键字

职业搬砖20年
 职业搬砖20年
发布于 06/14 10:42
字数 1045
阅读 14
收藏 0

1、方便在没有创建对象的情况下来进行调用(方法/变量)

  • static方法就是没有this的方法
  • 在static方法内部不能调用非静态方法,反过来是可以的
  • 可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法(这实际上正是static方法的主要用途)
  • 被static关键字修饰的方法或者变量,只要类被加载了,就可以通过类名去进行访问
  • 可以编写static代码块来优化程序性能

2、static方法

  • 在静态方法中不能访问类的非静态成员变量和非静态成员方法
  • 因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用
  • 在非静态成员方法中是可以访问静态成员方法/变量的

3、static变量

  • static成员变量的初始化顺序按照定义的顺序进行初始化

4、static代码块

  • static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次

5、构造器实际上不是静态方法

  • 在thinking in java中,第96页提到,“即使没有显示地使用static关键字,构造器实际上也是静态方法“
  • 一篇大神的博客中得到了答案,那就是构造器不是静态方法
  • Java的实例构造器只负责初始化,不负责创建对象
  • new指令专门用于创建对象实例,而调用实例构造器则使用invokespecial指令
  • this是作为实例构造器的第一个实际参数传入的
  • 静态方法中不能使用this,而构造器中可以使用this关键字

6、Java中的static关键字不会影响到变量或者方法的作用域

  • Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字

7、能通过this访问静态成员变量

  • this代表当前对象
  • static变量是被对象所享有的

8、static是不允许用来修饰局部变量(Java语法的规定)

9、静态内部类:

  • 普通类是不允许声明为静态的,只有内部类才可以

  • 要创建嵌套类的对象,并不需要其外围类的对象

  • 内部静态类不需要有指向外部类的引用,但非静态内部类需要持有对外部类的引用
  • 非静态内部类能够访问外部类的静态和非静态成员,静态类不能访问外部类的非静态成员

10、静态导入

  • 可以使被导入类的静态变量静态方法在当前类直接可见,用这些静态成员无需再给出他们的类名

 import static 包名.类名.静态成员变量; 

 import static 包名.类名.静态成员函数; 

11、代码执行结果 

public class Test extends Base{
 
    static{
        System.out.println("test static");
    }
     
    public Test(){
        System.out.println("test constructor");
    }
     
    public static void main(String[] args) {
        new Test();
    }
}
 
class Base{
     
    static{
        System.out.println("base static");
    }
     
    public Base(){
        System.out.println("base constructor");
    }
}

代码执行结果:

public class Test {
    Person person = new Person("Test");
    static{
        System.out.println("test static");
    }
     
    public Test() {
        System.out.println("test constructor");
    }
     
    public static void main(String[] args) {
        new MyClass();
    }
}
 
class Person{
    static{
        System.out.println("person static");
    }
    public Person(String str) {
        System.out.println("person "+str);
    }
}
 
 
class MyClass extends Test {
    Person person = new Person("MyClass");
    static{
        System.out.println("myclass static");
    }
     
    public MyClass() {
        System.out.println("myclass constructor");
    }
}
  • 首先加载Test类,因此会执行Test类中的static块
  • main所在类会被优先加载
  • 以类为标准进行加载,尽管在一个文件
  • 接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类
  • 加载MyClass类的时候,发现MyClass类继承自Test类,但是由于Test类已经被加载了,所以只需要加载MyClass类
  • 就会执行MyClass类的中的static块

代码执行结果:

public class Test {
     
    static{
        System.out.println("test static 1");
    }
    public static void main(String[] args) {
         
    }
     
    static{
        System.out.println("test static 2");
    }
}
  • static块可以出现类中的任何地方(只要不是方法内部,记住,任何方法内部都不行)
  • 并且执行是按照static块的顺序执行的

© 著作权归作者所有

共有 人打赏支持
职业搬砖20年
粉丝 23
博文 205
码字总数 103975
作品 0
南京
程序员
java 同步块(Java Synchronized Blocks)

Java 同步块包括方法同步和代码块同步。java 同步可以避免资源竞争,避免死锁。 主题包括的主要内容: 关键字 Synchronized 实例方法 Synchronized static methods Synchronized blocks in i...

丁佳辉
2015/08/18
0
0
Java学习资料-标识符、关键字

1、标识符 (1)Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则。 (2)Java标识符命名规则: 标识符由字母、下划...

晓阳
2015/01/05
0
0
《Java从小白到大牛精简版》之第4章 Java语法基础

《Java从小白到大牛》纸质版已经上架了!! 本章主要为大家介绍Java的一些基本语法,其中包括标识符、关键字、保留字、常量、变量、表达式等内容。 4.1 标识符、关键字和保留字 任何一种计算...

tony关东升
06/26
0
0
Java多线程学习(二)synchronized关键字(2)

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
04/16
0
0
RabbitMQ入门(4)--路由

路由 (使用Java客户端) 在先前的指南中,我们建立了一个简单的日志系统。我们可以将我们的日志信息广播到多个接收者。在这部分的指南中,我们将要往其中添加一个功能-让仅仅订阅一个消息的...

-悟空-
2015/02/24
0
7

没有更多内容

加载失败,请刷新页面

加载更多

下单接口调优实战,性能提高10倍

概述 最近公司的下单接口有些慢,老板担心无法支撑双11,想让我优化一把,但是前提是不允许大改,因为下单接口太复杂了,如果改动太大,怕有风险。另外开发成本和测试成本也非常大。对于这种...

Sam哥哥聊技术
13分钟前
0
0
rabbitMQ的安装和配置

在Windows下进行rabbitMQ的安装 第一步:软件下载 在安装rabbitMQ之前,需要先安装Erlang。 Erlang官网:http://www.erlang.org/downloads rabbitMQ官网:http://www.rabbitmq.com/download....

狼王黄师傅
33分钟前
0
0
SAP产品的Field Extensibility

SAP开发人员的工作职责,除了实现软件的功能性需求外,还会花费相当的精力实现一些非功能性需求,来满足所谓的SAP Product Standard(产品标准)。这些产品标准,包含在SAP项目实施中大显身手...

JerryWang_SAP
39分钟前
0
0
Vue-Element-Upload

记录一下文件上传封装Js 代码示例 封装:uploadFile.vue <template> <el-upload v-model="attachment" ref="upload" class="upload-demo" :action="uploadUrl" ......

华山猛男
46分钟前
2
0
AWVS破解及使用手册

1.安装 因为是windows软件,比较简单,此部分略: 破解插件下载: 链接: https://pan.baidu.com/s/1x9LK9F3KvqDgTvXDjoSZnQ 提取码: 7k4u 2.创建扫描目标 2-1.Targets->Add Target 2-2.对话框...

硅谷课堂
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部