Java中static关键字
来源:互联网 发布:九型人格知乎 编辑:程序博客网 时间:2024/06/05 17:38
静态结构的生命周期要早于非静态结构,同时回收也要晚于非静态结构
一、static修饰属性(类变量)
1、类变量随着类的加载而创建于静态域中,只有一份(内存解析如下)
2、由类创建的所有对象,都共用这一个属性,当其中一个对象对此属性进行修改,其他对象调用时也是修改过的
public void test1(){ Chinese c1 = new Chinese(); Chinese c2 = new Chinese(); //未修改c2的nation属性内容 System.out.println(c2.nation); //修改c1的nation属性 c1.nation = "China"; //c2的nation也会改变为c1修改的内容 System.out.println(c2.nation);}class Chinese{//下面代码均用到此自定义类 //类变量 static String nation;//类为中国人,因此国籍肯定都是中国,可以共用一个属性,声明为static //实例变量 String name; int age;}
执行结果
3、可以不用创建对象而通过 类.类变量 直接调用(用法)
public void test2(){ Chinese.nation = "China"; //Chinese.name = "Lucy";(错误)不能通过类名直接调用实例变量,因为没有创建对象,实例变量也没有被创建 System.out.println(Chinese.nation);}
执行结果:输出China
二、static修饰方法(类方法)
内容与静态属性大体相同
1、类方法 随着类的加载而创建于静态域中,只有一份
2、由类创建的所有对象,都共用这一个方法
3、可以不用创建对象而通过 类.类方法 直接调用
注意:
1. 静态方法内只能调用本类静态属性或静态方法
2. 静态方法里面是不能有this、super等关键字的(因为this代表当前对象,super代表当前对象的父类,而调用静态方法时可能还没有对象)
三、练习
1、计算创建对象的个数
public class TestCircle { public static void main(String[] args) { Circle c1 = new Circle(2.1); Circle c2 = new Circle(6.1); Circle c3 = new Circle(7.2); Circle c4 = new Circle(5.8); System.out.println(Circle.getTotal()); }}class Circle{ private double radius;//半径,不同的对象有不同的半径,不能用static修饰 static int total = 0;//记录创建的对象个数 public Circle(double radius) { this.radius = radius; total++;//每创建一个对象,就调用一次构造器,类属性total加一 } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } public static int getTotal() { return total; }// total作为记录用途,不要setter方法// public static void setTotal(int total) {// Circle.total = total;// }}
输出结果:4
2、编写一个类实现银行账户的概念,包含的属性有“账号”、“密码”、“存款余额”、“利率”、“最小余额”。测试类中创建4个账户,账号要从1000开始自动生成ID,最后输出储户的信息
public class TestAccount { public static void main(String[] args) { Account a1 = new Account("abc123",1000); Account a2 = new Account("bcd234",2000); Account a3 = new Account("cde345",5000); Account a4 = new Account("def456",4000); System.out.println("a1: " + a1 + "\na2: " + a2 + "\na3: " + a3 + "\na4: " + a4); }}class Account{ private int id; private String password; private double balance;//余额 private static double rate = 0.05;//利率 private static double minBalance = 100;//最小余额,所有账户利率和最小余额由银行设置,都是相同的,所以声明为static private static int init = 1000;//记录当前最后一个生成的ID,初始值为1000 public Account(String password, double balance) { this.id = init++;//ID自动分配,自动加一 this.password = password; this.balance = balance; } @Override public String toString() { return "Account{" + "id=" + id + ", password='" + password + '\'' + ", balance=" + balance + '}'; }}
输出结果
a1: Account{id=1000, password=’abc123’, balance=1000.0}
a2: Account{id=1001, password=’bcd234’, balance=2000.0}
a3: Account{id=1002, password=’cde345’, balance=5000.0}
a4: Account{id=1003, password=’def456’, balance=4000.0}
实例总结
- 记录类中所有属性共享的数据。(例二中的rate和minBalance等)
- 可以实现累加的效果,因为静态变量在内存中只有一份,并且生命周期长,随着类回收而回收。(例一中记录创建对象的个数、例二中为每次创建的对象自动分配一个不同的ID)
0 0
- Java 中 static 关键字
- java中static关键字
- Java中static关键字
- java中static关键字
- java中关键字:static
- Java中Static关键字
- java中static关键字
- Java中Static关键字
- java中static关键字
- Java中static关键字
- java中static关键字
- Java中static关键字
- java中static关键字
- Java中static关键字
- Java中static关键字
- java中static关键字
- java中static关键字
- JAVA中static关键字
- openmp的简单介绍
- 解密ThreadLocal
- Spring MVC 解读——<mvc:annotation-driven/>
- 工作两年小结----勿忘初心不负梦想
- redmine如何卸载已经安装的插件 (redmine之五)
- Java中static关键字
- python 替换文件固定字符串
- 【poj2631】Roads in the North
- csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net
- 数据结构实验之队列一:排队买饭
- HTTP请求简单总结
- 基于moment插件实现的获取各种时间的类
- F1~F12功能使用
- ruby学习笔记之include/prepend