目录
static 静态关键字
static 的作用
static 是什么?
- static 是静态的意思,可以用来修饰成员变量、成员方法。
- static 修饰成员变量之后称为静态成员变量(类变量),修饰方法之后称为静态方法(类方法)。
- static 修饰后的成员变量,可以被类的所有对象共享(访问、修改)。
static 修饰成员变量的用法
static 修饰成员变量的内存原理
static 修饰成员方法的基本用法
成员方法分类
使用场景
成员方法的分类和访问分别是什么样的?
案例一
/**
* 静态成员方法 : 有static修饰 , 归属于类 , 可以被共享访问 , 用类名或者对象名都可以访问
*/
public static int getMax(int number_1 , int number_2) {
return number_1 > number_2 ? number_1 : number_2;
}
细节体现
static 修饰成员方法的内存原理
static 的注意事项
public static int onLineNumber = 10;
public static void test() {
System.out.println("加油!");
System.out.println();
System.out.println(onLineNumber);
System.out.println(Test.onLineNumber);
}
当访问实例成员时会报错
/**
* 实例成员
*/
public String name;
/**
* 实例方法
*/
public void test2() {
System.out.println(onLineNumber);
test();
System.out.println(name);
}
如果出现 this 关键字时会报错
static 应用知识:工具类
工具类
工具类是什么?
- 类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。
使用工具类的好处
工具类定义时其他要求
案例演示
/**
* 工具类
*/
public static String createVerifyCode(int number) {
// 开发一个验证码
// 1. 定义一个变量记住验证码
String code = "";
// 2. 定义一个变量记住全部验证码字符
String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 3. 定义一个循环生成几个随机索引 , 去得到几个字符
Random random = new Random();
for (int i = 0; i < number; i++) {
int index = random.nextInt(data.length());
// 4. 获取随机索引对应的字符 , 链接给code
code += data.charAt(index);
}
return code;
}
总结
代码块
代码块的分类
-
静态代码块:
-
构造代码块(了解,见的少):
代码块的作用
格式
静态代码块
/**
* 静态代码块 : 由static修饰 , 属于类 , 与类一起优先加载一次 , 自动触发执行
*
* 作用: 可以初始化静态资源
*
*/
static {
System.out.println("静态代码块被执行了!");
}
实例代码块
/**
* 实例代码块 : 无static修饰 , 属于对象 ,每次构造对象时 , 都会触发一次执行
*/
{
System.out.println("实例代码块被执行了");
}
静态代码块的应用案例
静态代码块的作用是什么?
案例演示
package com.north.d3_static_code;
import java.util.ArrayList;
/**
* @author North
* @date 10/6/2022 2:14 PM
*
* 目标 : 模拟游戏启动前 , 初始化54张牌数据
*/
public class StaticTest {
/**
* 1. 定义一个静态的集合 , 这样这个集合只加载一个 , 因为当前房间只需要一副牌
*/
public static ArrayList<String> cards = new ArrayList<>();
/**
* 2. 在程序真正运行main方法前 , 把54张牌放进去 ,后续游戏可以直接使用了
*/
static {
/**
* 3. 正式做牌 , 放到集合中去
*/
// a. 定义一个数组春初全部点数 , 类型确定了, 个数确定了
String[] sizes = {"2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "k" , "A"};
// b. 定义一个数组存储全部的花色 , 类型确定了 , 个数确定了
String[] flowers = {"♥" , "♠" , "♦" , "♣"};
// c. 遍历点数
for (int i = 0; i < sizes.length; i++) {
// d 遍历花色
for (int m = 0; m < flowers.length; m++) {
String card = sizes[i] + flowers[m];
cards.add(card);
}
}
// e. 单独加入大小王
cards.add("大王");
cards.add("小王");
}
public static void main(String[] args) {
// 输出牌数
System.out.println("点数" + cards);
}
}
输出结果
点数[2♥, 2♠, 2♦, 2♣, 3♥, 3♠, 3♦, 3♣, 4♥, 4♠, 4♦, 4♣, 5♥, 5♠, 5♦, 5♣, 6♥, 6♠, 6♦, 6♣, 7♥, 7♠, 7♦, 7♣, 8♥, 8♠, 8♦, 8♣, 9♥, 9♠, 9♦, 9♣, 10♥, 10♠, 10♦, 10♣, J♥, J♠, J♦, J♣, Q♥, Q♠, Q♦, Q♣, k♥, k♠, k♦, k♣, A♥, A♠, A♦, A♣, 大王, 小王]