一、static

1、概述

static 的意思的静态的,也是一种修饰符。

关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单属于某个对象的。

用 static 关键字修饰的,属于类,就可以不依靠创建对象来调用了。

2、可以修饰什么

(1)方法

(2)成员变量

(3)代码块

(4)内部类

二、修饰变量与方法

1、类变量(静态变量)

① 当 static 修饰成员变量时,该变量称为 类变量。该类的每个对象都共享同一个类变量的值。

② 用 static 修饰的成员变量的值,存储在方法区中;static 修饰的成员变量的 get/set 也是静态的。

③ 任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

④ 如果在方法中有局部变量与 static 修饰的成员变量同名时,在静态变量前面加 "类名." 进行区别(这里不能使用this关键字)

⑤ static 不能修饰局部变量

类变量:使用 static 关键字修饰的成员变量。

定义格式:

static 数据类型 变量名;

Demo:

1 public classStudent {2 privateString name;3 private intage;4 private intsid;5 private static int numberOfStudent = 0;6

7 public Student(String name, intage){8 this.name =name;9 this.age =age;10 //通过 numberOfStudent 给学生分配学号

11 this.sid = ++numberOfStudent;12 }13

14 }

2、类方法(静态方法)

当 static 修饰成员方法时,该方法称为 类方法 或 静态方法。

静态方法在声明中有 static,建议使用类名来调用,而不需要创建类的对象来调用。

类方法:使用 static 关键字修饰的成员方法,习惯称为 静态方法。

定义格式:

修饰符 static 返回值类型 方法名 (参数列表){

// 执行语句

}

Demo:在上面的 Student 类中定义一个静态方法

1 public static voidshowNum() {2 System.out.println("num:" +numberOfStudent);3 }

注意事项:

静态方法可以直接访问静态变量和静态方法。(原因:因为在内存当中是【先】有的静态内容,【后】有的非静态内容。)

静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问静态变量或静态方法。

静态方法中,不能使用 this,super 关键字。(原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。)

小结:静态方法只能访问静态成员,非静态方法即可以访问非静态成员也可以访问静态成员。

3、调用格式

被 static 修饰的成员可以并且建议通过 类名直接访问。虽然也可以通过对象名访问静态成员,原因即多个对象均属于一个类,共享使用同一个静态成员,但是不建议,会出现警告信息。

调用格式:

// 访问类变量

类名.类变量名;

// 调用静态方法

类名.静态方法名(参数);

三、静态原理图解

static 修饰的内容:

是随着类的加载而加载的,且只加载一次;

存储与一块固定的内存区域(静态区),所以,可以直接被类名调用;

它优先于对象存在,所以,可以被所有对象共享。

图解:

四、静态代码块

(1)静态代码块:定义在成员位置,使用 static 修饰的代码块 { }。

位置:类中方法外。

执行:随着类的初始化而且执行且仅执行一次,优先于 main 方法和构造方法的执行。

特点:

① 每一个类的静态代码块只会执行一次。

② 静态代码块在第一次使用这个类之前执行,即在类的初始化时执行。

定义格式:

public class ClassName{

static {

// 静态代码块的内容

}

}

作用:用来一次性给静态成员变量进行初始化赋值。

(2)类初始化即执行类初始化方法: ()

类初始化方法,一个类只有一个。它也是由编译器编译生成的,由两部分代码组成:

① 静态变量的显示赋值代码

② 静态代码块的代码

注意:上面的 ① 和 ② 是按照顺序执行的。

提示:注意与非静态代码块(实例初始化的区别)

(3)继承中的静态代码块

一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类。因为一个类只要初始化一次。

父类的初始化()

① 父类的静态变量的显示赋值

② 父类的静态代码块

子类的初始化()

① 子类的静态变量的显示赋值

② 父类的静态代码块

注意:静态方法是不能被重写的。

Demo:

1 public classTestClassInit {2 public static voidmain(String[] args) {3 /*Father f = new Father();4 System.out.println("-------------------");5 Son s = new Son();*/

6

7 Son s = newSon();8

9 /*Father f = new Son();//多态引用10 System.out.println("----------------");11 f.assign();//静态方法在编译期间就确定了,不需要在运行时动态绑定12 */}13 }14 classFather{15 private static String info =assign();16 static{17 System.out.println("(1)父类的静态代码块");18 }19 public staticString assign(){20 System.out.println("(3)assign()方法");21 return "Father";22 }23 }24 class Son extendsFather{25 private static String info =assign();26 static{27 System.out.println("(2)子类的静态代码块");28 }29 public staticString assign(){30 System.out.println("(4)assign()方法");31 return "Son";32 }33 }

小结:static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况下,去调用方法。

java面向对象三个关键字,Java 面向对象(三)static 关键字相关推荐

  1. java基础-day08-面向对象(三) this关键字、继承、static关键字

    this 关键字 1.当 成员变量 名 和 局部变量 相同时,优先使用 局部变量,通过 this 使用 成员变量. public class Test1 {public static void mai ...

  2. java static关键字_Java基础:static关键字作用总结

    前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static.final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平 ...

  3. java关键字static_Java中的static关键字

    java关键字static static keyword in Java is used a lot in java programming. Java static keyword is used ...

  4. C++ 类模板三(类模版中的static关键字)

    //类模版中的static关键字 #include<iostream> using namespace std;/* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在 ...

  5. 成员变量和局部变量的区别、方法的形参为类的情况及匿名对象、封装(private关键字)、this关键字、构造方法、static关键字

    成员变量和局部变量 在介绍类的时候,已经说到了类的成员变量 成员变量是在类中而在方法之外 class ss{ int age; } 局部变量是在方法定义中或者方法声明中 class ss{ publi ...

  6. java全栈系列之JavaSE-面向对象(static关键字)040

    static静态修饰符 static在类中使用修饰成员变量,在方法中使用修饰成员方法,修饰方法时叫做静态方法,修饰属性时叫做静态属性也叫类变量 静态属性 package Demo3; public c ...

  7. 面向对象篇(OOP)--05 Java中static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  8. 面试季,Java中的static关键字解析

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面 ...

  9. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  10. [转] Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

最新文章

  1. SAP RETAIL 分配表功能的使用
  2. java jmail_jmail的使用
  3. 枚举法 POJ1411
  4. Python3 内置http.client,urllib.request及三方库requests发送请求对比
  5. set和multiset容器
  6. How to resolve syntax error in CL_IM_CMS_SI_GEN_INTF
  7. 分布式是写出来的(四)
  8. C++ 标准库 书籍学习记录笔记 第5章
  9. php截断上传,截断在文件包含和上传中的利用
  10. Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程
  11. 删除桌面图标的小箭头
  12. 2016河北省职称计算机考试试题及答案,2016年最新河北省职称计算机考试试题及答案..doc...
  13. pyqt5——QImage与QPixmap
  14. 十二款硬盘数据恢复软件,百分之九十五的人没听过!
  15. 联想微型计算机拆装图解,笔记本电脑的拆卸图解
  16. CWE-476: NULL Pointer Dereference(空指针间接引用)
  17. Mysql基础命令语句(1)
  18. Ubuntu18.04安装搜狗输入法无法使用
  19. 读取四则运算的字符串(Formula)返回计算结果 c#
  20. Nodejs爬虫自动爬取百度图片

热门文章

  1. 面对疫情等群体性危机,程序员如何在家高效办公?
  2. Rust 入坑指南 | CSDN 博文精选
  3. 多媒体技术开发迎来新常态
  4. 没事爱在线上制造故障?这位程序媛有话说
  5. 为什么 Java 进程使用的 RAM 比 Heap Size 大?​ | CSDN博文精选
  6. 百度网盘将推出单次会员服务;苹果回应否认操纵搜索结果;Node.js 12.7.0 发布 | 极客头条...
  7. 为什么程序员应该避免间接代码?
  8. 人工智能是 6G 诞生的关键!| 极客头条
  9. 2019 Go 开发者路线图,请收下这份指南!
  10. 996 的程序员,只能云养娃吗?