Java
基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
-
+
首页
20类变量&类方法
> 引入 问:有一群小孩在玩推雪人,时不时有新的小孩加入,请问如何知道现在共有多少人在玩? 代码 ```java package com.static_; public class ChildGame { public static void main(String[] args) { int count = 0; Child child1 = new Child("666"); child1.join(); count++; Child child2 = new Child("6661"); child2.join(); count++; Child child3 = new Child("6664 "); child3.join(); count++; System.out.println("共有" + count + "小孩"); } } class Child{ private String name; public Child(String name) { this.name = name; } public void join(){ System.out.println(name + "加入了游戏"); } } ```  > 思考 如果设计int count标识总人数,在创建小孩时,就把count+1,并且count是所有对象共享的 static变量所有对象共享(同一个类中的对象),类变量static是在类加载的时候就生成了 使用类变量 ```java ``` ## 类变量 > 什么是类变量 - 类变量也叫静态变量或者静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值。 - 同样任何一个该类的对象去修改它时,修改的也是同一个变量 > 类变量的定义 语法(二选一) - 访问修饰符 static 数据类型 变量名; - static 访问修饰符 数据类型 变量名l; > 类变量的访问 语法(二选一) - 类名.类变量名 - 对象名.类变量名 注意:静态变量的访问修饰符的访问权限和范围 与普通属性一致 > 类变量细节 - 当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量) - 类变量与实例变量的区别: 类变量是该类的所有对象共享的,而实例变量是每个对象独享的 - 变量前加上static 称为类变量或者静态变量,否则成为实例变量或者普通变量或者非静态变量 - 类变量可以通过类名.类变量名 或者 对象名.类变量名 来访问 > 实例代码 ```java package com.static_; public class Test { public static void main(String[] args) { Student.name = "abc"; Student s1 = new Student(); s1.name = "def"; s1.age = 10; Student s2 = new Student(); s2.name = "xbxaq"; s2.age = 20; System.out.println(Student.name); System.out.println("name:" + s1.name + ", age:" + s1.age); System.out.println("name:" + s2.name + ", age:" + s1.age); } } class Student{ public static String name; int age; } ```  ## 类方法 ## > 语法 - 访问修饰符 static 数据返回类型 方法名(){} - static 访问修饰符 数据返回类型 方法名(){} > 类方法调用 - 类名.类方法名 - 对象名.类方法名 > demo main ```java package com.static_method; public class Test1_method { public static void main(String[] args) { Student.printHello(); } } ``` student ``` package com.static_method; public class Student{ public static void printHello(){ System.out.println("Hello World"); System.out.println("Hello World"); System.out.println("Hello World"); } } ```  > 注意事项 - 类方法中可以直接访问类的成员,但不可以直接访问实例成员 - 实例方法中既可以直接访问类成员,也可以直接访问实例成员 - 实例方法中可以出现this关键词,类方法中不可以出现this关键词 ## 代码块 代码块分为静态代码块与实例代码块 > 静态代码块 - 格式:static{} - 特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次 - 作用:完成类的初始化,例如:对类变量的初始化赋值 demo ```java package com.static_; public class Test { public static void main(String[] args) { System.out.println(Student.num); } } class Student{ static int num = 10086; static { System.out.println("静态代码块执行啦"); } } ```  > 实例代码块 - 格式:{} - 特点:每次创建对象时,执行实例代码块,并在构造器前执行 - 作用:和构造器一样,用来完成对象的初始化,例如:对实例变量进行初始化赋值 demo ```java package com.static_; import com.sun.org.apache.xalan.internal.xsltc.trax.XSLTCSource; public class Test { public static void main(String[] args) { Student student1 = new Student(); System.out.println("----------------"); Student student2 = new Student("xbxaq"); } } class Student{ public Student() { System.out.println("无参构造器执行了"); } { System.out.println("实例代码块执行了"); } public Student(String name){ System.out.println("有参构造器执行了"); } } ```  ## 设计模式 > 定义 - 一个问题通常有n中解法,其中的最优解被称之为设计模式 > 单例设计模式 - 确保一个类只有一个对象 > 语法 - 把类的构造器私有化 - 定义一个类变量记住类的一个对象 - 定义一个类方法,返回对象 demo ```java package com.static_; import com.sun.org.apache.xalan.internal.xsltc.trax.XSLTCSource; public class Test { public static void main(String[] args) { A a1 = A.getObject(); A a2 = A.getObject(); System.out.println(a1); System.out.println(a2); } } class A{ private static A a = new A(); private A(){ } public static A getObject(){ return a; } } ``` 
毛林
2025年9月7日 12:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码