· 学习参考资料:
· 学习内容
Java面向对象进阶:以个人档案为案例深入了解学习Java对象之static关键字
· 知识呈现&细化总结:
#Java面向对象进阶
一、提出问题#
Q:static关键字是什么?
A:static称作静态,可以用来修饰成员变量 / 方法
二、应用 & 代码呈现#
1.成员变量按照有无static修饰分为两种①类变量 : 有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享,即类的共性
(注意:访问自己类中的类变量 可以省略掉类名)
②实例变量 : 即实际对象的变量,无static修饰,属于每个对象自己,即个性
如下为示例:public class personInfo { //类变量 static String hometown = "浙江" ; static int age = 8 ; //实例变量 String name; public Age(){ age++; //无类名也是合法的! } }
下方则是二者的用法:
public class Test { public static void main(String[] args) { //调用类变量 类名.类变量(preferred) personInfo.hometown = "浙江"; //新建一个对象p1 personInfo p1 = new personInfo(); System.out.println(p1.hometown); ---输出为 浙江 //调用类变量 对象名.类变量(dont preferred!) p1.hometown = "湖北"; System.out.println(p1.hometown); ---输出为 湖北 //调用实例变量 对象名.示例变量 p1.name = "小王"; //新建一个对象p2 personInfo p2 = new personInfo(); System.out.println(p2.hometown); ---输出为 湖北 p2.name = "小红"; personInfo.name = "小红"; //报错!!! System.out.println(p1.name); ---输出为 小王 System.out.println(p2.name); --- 输出为 小红 } }
2.同样的,方法按照有无static修饰也分为两种
①类方法 : 有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享,即类的共性
②实例方法 : 即实际对象的方法,无static修饰,属于每个对象自己,即个性
如下为示例:public class personInfo { //类变量 static String hometown = "浙江" ; //实例变量 String name; public static void printIntro(){ System.out.println("这是一个自我介绍"); } //类方法 public void judgeProvince(){ if (this.hometown.equals("浙江")){ System.out.println("是浙江人"); } } //实例方法 }
以及二者的用法
public class Test2 { public static void main(String[] args) { //1. 类名.类方法 调用(preferred) personInfo.printIntro(); personInfo p1 = new personInfo(); //2. 对象.类方法 调用(not preferred) p1.printIntro(); //3. 类名.实例方法 无法调用 personInfo.judgeProvince(); <---- "报错!!!" //4. 对象.实例方法 p1.judgeProvince(); } }
3.此外,^代码块按照有无static修饰也分为两种
^ 代码块是类的五大成分之一(成员变量、构造器、方法、代码块、内部类)
①静态代码块 : 有static修饰,在类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次,其作用在于完成类的初始化(如对类变量的初始化赋值)。
②实例代码块 : 无static修饰,每次创建对象时都执行一次实例代码块,并在构造器前执行,用于对实例变量进行初始化赋值。
代码如下:public class personInfo { //类变量 static String hometown = "浙江"; //实例变量 String name; //静态代码块 static{ System.out.println("Hello,World! This is a static code block!"); } //实例代码块 { System.out.println("你好!世界!这是一个实例代码块"); } public personInfo(){ System.out.println("Hello,world! This is parameterless constructor! "); } public personInfo(String name){ System.out.println("你好!世界!这是一个有参数构造器!"); } }
主程序如下:
public class Test2 { public static void main(String[] args) { personInfo p1 = new personInfo(); System.out.println(p1.hometown); } } /* 输出为: Hello,World! This is a static code block! 你好!世界!这是一个实例代码块 Hello,world! This is parameterless constructor! 浙江 */
由此可见输出的顺序依次是 静态代码块 -> 示例代码块 -> 有/无参数构造器 -> 对象属性
三、总结#
static关键字的应用总结下来就是处理共用和私有的关系 在具体的情景中应用十分广泛 也是需要熟练掌握的Java重要知识之一
运用好static关键字可以使 初始化 这一环节更加符合规范 提升代码质量
· 学习总结:
对于Java面向对象有了更深一步的探索
使所写的代码更加地规范化了
2024/1/5
Author:渡 U1ysses #