文章目录

  • 零、本讲学习目标
    • 1、掌握静态变量的使用
    • 2、掌握静态方法的使用
    • 3、掌握静态代码块的使用
  • 一、static关键字的用处
  • 二、静态变量
    • 1、静态变量的定义
    • 2、静态变量的内存分配示意图
    • 3、静态变量的访问
    • 4、静态变量案例演示
    • 5、使用static关键字注意事项
  • 三、静态方法
    • 1、静态方法的定义
    • 2、静态方法的访问
    • 3、静态方法案例演示
    • 4、静态方法注意事项
  • 四、静态代码块
    • 1、静态代码块的定义
    • 2、静态代码块执行情况
    • 3、静态代码块的作用
    • 4、静态代码块案例演示
  • 五、了解Math类的静态成员
  • 六、课后作业
    • 1、创建Circle类
    • 2、创建TestCircle类

相信大家对static关键字并不陌生,回顾一下我们在第一次课创建的第一个Java程序HelloWorld.java:

主方法的修饰符里就有static,为什么主方法必须有static修饰符呢?通过本讲的学习,你会找到答案的。

零、本讲学习目标

1、掌握静态变量的使用

2、掌握静态方法的使用

3、掌握静态代码块的使用

一、static关键字的用处

Java中的static关键字,用于修饰类的成员,如成员变量、成员方法以及代码块等,被static修饰的成员具备一些特殊性。比如被static关键字修饰的成员变量、方法可以被类直接访问,而不需要预先构造类的实例化对象。

二、静态变量

1、静态变量的定义

  • 原因:在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的实例对象后,系统才会为每个对象分配内存空间,存储各自的数据。有时候,开发人员希望某些特定的数据在内存里只有一份,而且能被一个类的所有实例对象所共享。例如某个学校所有学生共享同一个学校名称,此时完全不必在每个学生对象所占用的内存空间中都声明一个变量来表示学校名称,而可以在对象以外的空间声明一个表示学校名称的变量让所有对象来共享。这种能被类的所有对象共享的变量就是静态变量。
  • 定义:在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量。

2、静态变量的内存分配示意图


从图可以看出,所有学生对象共享一个名称为schoolName的变量。在一个Java类中,要实现这种功能可以使用static关键字来修饰成员变量,该变量被称作静态变量,它可以被所有实例所共享。

3、静态变量的访问

  • 通过类名访问:静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问。
  • 通过对象名访问:静态变量也可以“对象名.变量名”的形式来访问,当然同一个类的不同对象访问的静态变量值都是相同的。

4、静态变量案例演示

  • 创建Student类,包含实例变量name和age、静态变量schoolName
package net.hw.lesson12;/*** 功能:学生类* 作者:华卫* 日期:2020年5月1日*/
public class Student {static String schoolName; // 静态变量schoolNameprivate String name; // 实例变量nameprivate int age; // 实例变量agepublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void speak() {System.out.println("我叫" + name + ",今年" + age + "岁了,是" + schoolName + "的学生。");}
}
  • 创建TestStudent类,创建对象,设置属性,调用方法
package net.hw.lesson12;/*** 功能:测试Student类* 作者:华卫* 日期:2020年5月1日*/
public class Example1201{public static void main(String[] args) {// 给静态变量赋值Student.schoolName = "泸州职业技术学院";// 创建第1个学生对象,并设置属性Student stu1 = new Student();stu1.setName("李晓红");stu1.setAge(19);// 创建第2个学生对象,并设置属性Student stu2 = new Student();stu2.setName("洪晓熙");stu2.setAge(18);// 调用两个学生对象的方法stu1.speak();stu2.speak();// 通过对象名访问静态变量System.out.println("stu1.schoolName = " + stu1.schoolName);System.out.println("stu2.schoolName = " + stu2.schoolName);// 通过类名访问静态变量System.out.println("Student.schoolName = " + Student.schoolName);}
}

运行程序,查看结果:

由于schoolName是静态变量,既可以通过Student.schoolName的方式进行调用,也可以通过Student的实例对象进行调用,比如stu1.schoolName和stu2.schoolName。第11行代码将变量schoolName赋值为“泸州职业技术学院”后,两个学生对象stu1和stu2的schoolName属性值均为“泸州职业技术学院”。

5、使用static关键字注意事项

注意,static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错。

三、静态方法

普通成员方法也叫实例方法,表明只有在实例化对象之后才能调用,如果想不创建对象就能调用某个方法,那么此时可以考虑使用静态方法。

1、静态方法的定义

在一个类中,被static关键字修饰的方法称为静态方法。

2、静态方法的访问

  • 方法一、通过类名来访问:类名.方法
  • 方法二、通过对象名来访问:对象名.方法

3、静态方法案例演示

  • 在Student类定义静态方法
  • 创建Example1202类,通过两种方式调用静态方法
package net.hw.lesson12;/*** 功能:调用静态方法* 作者:华卫* 日期:2020年5月1日*/
public class Example1202 {public static void main(String[] args) {// 设置静态属性值Student.schoolName = "泸州职业技术学院";// 用“类名.方法”方式调用静态方法Student.tell();// 实例化对象Student stu = new Student();// 用“对象名.方法”方式调用静态方法stu.tell();}
}
  • 运行程序,查看结果

4、静态方法注意事项

在一个静态方法中只能访问用static修饰的成员,原因是没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。

四、静态代码块

1、静态代码块的定义

  • 在Java中,使用一对大括号包围起来的若干行代码被称为一个代码块。
  • 在Java中,使用static关键字修饰的代码块称为静态代码块。

2、静态代码块执行情况

当类被加载时,静态代码块会执行,并且只会执行一次

3、静态代码块的作用

在程序中,经常使用静态代码块来对类的成员变量进行初始化。

4、静态代码块案例演示

  • 创建Person类
package net.hw.lesson12;/*** 功能:静态代码块* 作者:华卫* 日期:2020年5月1日*/
public class Person {static String country;static {country = "中国";System.out.println("执行Person类的静态代码块");}public void speak() {System.out.println("我是" + country + "人。");}
}
  • 创建测试类Example1203
package net.hw.lesson12;/*** 功能:测试Person类* 作者:华卫* 日期:2020年5月1日*/
public class Example1203 {static {System.out.println("执行Example1203的静态代码块");}public static void main(String[] args) {// 实例化两个Person对象Person p1 = new Person();Person p2 = new Person();// 调用对象方法p1.speak();p2.speak();}
}
  • 运行程序,查看结果

    在主方法中创建了两个Person对象,但在两次实例化对象的过程中,静态代码块中的内容只输出了一次,这就说明静态代码块在类第一次使用时才会被加载,并且只会加载一次。

五、了解Math类的静态成员


上述案例,我们输出了Math的静态属性E和PI,调用了Math的静态方法sqrt()。

如何能查看一个类的源码呢?很简单,将鼠标移到该类上,左手按着Ctrl键,同时点击鼠标左键,即可打开该类的源码文件进行查看。

  • 查看Math.java文件内容
  • 摘录Math类部分源码
package java.lang;
import java.util.Random;import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;/*** @author  unascribed* @author  Joseph D. Darcy* @since   JDK1.0*/public final class Math {/*** Don't let anyone instantiate this class.*/private Math() {}/*** The {@code double} value that is closer than any other to* <i>e</i>, the base of the natural logarithms.*/public static final double E = 2.7182818284590452354;/*** The {@code double} value that is closer than any other to* <i>pi</i>, the ratio of the circumference of a circle to its* diameter.*/public static final double PI = 3.14159265358979323846;/*** Returns the trigonometric sine of an angle.  Special cases:* <ul><li>If the argument is NaN or an infinity, then the* result is NaN.* <li>If the argument is zero, then the result is a zero with the* same sign as the argument.</ul>** <p>The computed result must be within 1 ulp of the exact result.* Results must be semi-monotonic.** @param   a   an angle, in radians.* @return  the sine of the argument.*/public static double sin(double a) {return StrictMath.sin(a); // default impl. delegates to StrictMath}
}
  • Math.java文件有2370行
  • 查看Math类的结构

六、课后作业

1、创建Circle类

  • 定义双精度静态变量r
  • 定义双精度静态常量PI = 3.1414926
  • 定义访问静态变量r的静态方法setR()与getR()
  • 定义获取圆面积的静态方法getArea()

2、创建TestCircle类

  • 添加静态代码块,输出“计算圆面积”
  • 在主方法里从键盘输入圆半径
  • 调用Circle的静态方法计算圆面积
  • 输出圆面积,保留两位小数

Java讲课笔记12:static关键字相关推荐

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

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

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

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

  3. 【Java学习笔记之十五】Java中的static关键字解析

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

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

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

  5. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  6. java static关键字_好程序员Java教程分享static关键字的理解

    好程序员Java教程分享static关键字的理解,static关键字含义可以理解为静态的. 1. 当其修饰属性时,该属性为整个类公有,所有的对象操作的都是同一个静态属性.所以调用时应该使用类名去调用, ...

  7. 从内存分配角度分析c和java里的static 关键字.

    即使作为Java的初学者, 对this 和 static 这两个关键字都不会陌生. 其实也不难理解: this 关键字:  指的是对象的本身(注意不是类本身)  跟.net 语言的Me 关键字类似. ...

  8. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.         静态(static)可以是: 变 ...

  9. java中的static类_再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

最新文章

  1. 为什么 Vista 使用过程中C盘用掉的空间迅速增大?
  2. JMS(二):简单的JMS入门实例
  3. springboot继承组件_SpringBoot如何扩展引入的组件,以及如何自动配置组件原理
  4. java 读取 远程文件_利用JAVA获取远程文件及使用断点续传 供学习者使用
  5. Windows / Ubuntu操作系统下Pixhawk原生固件PX4的编译方法
  6. SAP CRM IBASE read header debug
  7. MySQL倒序如何避免filesort_如何避免mysql查询的filesort?
  8. static关键字(修饰函数、局部变量、全局变量)
  9. 求数组三项之和最接近某个目标数字
  10. 刚过去不到一个月 QQ又更新了
  11. 线程的异常捕获与线程池的异常捕获
  12. brother标签打印软件_标签打印软件如何调整字体高度
  13. ormlite的使用方法
  14. LINUX SHELL mkdir建立多级目录
  15. 华为HCIP(HCNP)笔记,还不快快收藏!
  16. java 代码混淆 开源_java代码混淆(使用 ProGuard 工具)
  17. 解密excel工作表保护
  18. 查看往年CET46级成绩考试记录
  19. DNS的集群与更新(远程更新,加密更新)
  20. golang使用minio上传资源文件的功能

热门文章

  1. 【Python3网络爬虫开发实战】3.1.1-发送请求
  2. php上传文件大小读取,怎么修改php上传文件的大小限制?
  3. html5 mp4转换ogv格式,如何把OGV转换为MP4?用它,轻松转换视频文件!
  4. java运行多个linux命令_在shell的一行中运行多个命令
  5. MscTeX警告Package fontspec Warning: Font “Songti SC Light“ does not contain requested(fontspec)的解决
  6. combinatorial_identities习题1.1分析与解答
  7. 【mysql基础知识】解决java连接mysql时将localhost改为本机的ip地址后失败问题
  8. Node.js抓取网页信息(cheerio网络爬虫)
  9. 使用displsy:flex + overflow:hidden时子元素被压缩
  10. cdn.cdzk_页面“www.cdzkdc.com”HTTP状态检测结果- 站长工具