没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、static关键字
(1)类属性、类方法的设计思想
(2) static关键字的说明
(3)static修饰属性
1. 复习变量的分类
2. 静态变量
2.1 语法格式
2.2 静态变量的特点
2.3 举例
2.3.1 举例1
2.3.2 举例2
2.3.3 举例3
2.4 静态变量的存储位置演进
2.4.1 jdk6
2.4.2 jdk7
2.4.3 jdk8
2.5 对比静态变量与实例变量
2.6 内存解析
2.6.1 举例1
2.6.2 举例2
(4)static修饰方法
1. 语法格式
2. 静态方法的特点
3.重点注意事项
4. 举例
4.1 举例1
4.2 举例2
4.3 举例3
4.4 举例4
4.5 举例5
(5)开发中的注意事项
二、练习
(1)练习1
(2)练习2
(3)练习3
(4)面试题
一、static关键字
回顾类中的实例变量(即非static的成员变量)
创建两个Circle对象:(当我们创建类的多个对象的时候,每个对象都各自一份,互不影响)
Circle类中的变量radius是一个实例变量(instance variable),它属于类的每一个对象,c1中的
radius变化不会影响c2的radius,反之亦然。
如果想让一个成员变量(如radius)被类的所有实例所共享,就用static修饰即可,称为类变量
(或类属性)!
实例变量:每个对象一份
类变量:所有对象共用一个,归类多有
(1)类属性、类方法的设计思想
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通
过new关键字才会产出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。
我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下, 某些特定的数据在内存空间里
只有一份 。
例如,所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的
实例对象中都单独分配一个用于代表国家名称的变量。
此外,在类中声明的实例方法,在类的外面必须要先创建对象,才能调用。但是有些方法的调用者
和当前类的对象无关,这样的方法通常被声明为 类方法 ,由于不需要创建对象就可以调用类方法,从而
简化了方法的调用。
这里的类变量(成员变量)、类方法,只需要使用 static 修饰即可。所以也称为静态变量、静态方
法。
class Circle{
private double radius; //之前写的属性没有static声明-->实例变量(每个对象有一份)
public Circle(double radius){
this.radius=radius;
}
public double findArea(){
return Math.PI*radius*radius;
}
}
Circle c1=new Circle(2.0); //c1.radius=2.0
Circle c2=new Circle(3.0); //c2.radius=3.0
(2) static关键字的说明
static : 静态的
static 用来修饰的结构:属性、方法; 代码块、内部类;(构造器不能够用static修饰)
使用范围:
在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
(3)static修饰属性
1. 复习变量的分类
方式1:按照数据类型
基本数据类型
引用数据类型
方式2:按照类中声明的位置
成员变量:直接声明在类内部,方法、构造器外面的
按照是否使用static修饰进行分类:
使用static修饰的成员变量:静态变量、类变量
不使用static修饰的成员变量:非静态变量、实例变量
局部变量:方法内、方法形参、构造器内、构造器形参、代码块内等。
2. 静态变量
2.1 语法格式
使用static修饰的成员变量就是静态变量(或类变量、类属性)
[修饰符] class 类{
[其他修饰符] static 数据类型 变量名;
}
2.2 静态变量的特点
静态变量的默认值规则和实例变量一样。
静态变量值是所有对象共享。
静态变量在本类中,可以在任意方法、代码块、构造器中直接使用。
如果权限修饰符允许,在其他类中可以通过“ 类名.静态变量 ”直接访问,也可以通过“ 对象.静态
变量 ”的方式访问(但是更推荐使用类名.静态变量的方式)。
静态变量的get/set方法也静态的,当局部变量与静态变量 重名时 ,使用“ 类名.静态变量 ”进行
区分。
2.3 举例
2.3.1 举例1
class Chinese{
//实例变量
String name;
int age;
//类变量
static String nation;//国籍
public Chinese() {
}
public Chinese(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Chinese{" +
"name='" + name + '\'' +
", age=" + age +
", nation='" + nation + '\'' +
'}';
}
}
public class StaticTest {
public static void main(String[] args) {
Chinese c1 = new Chinese("康师傅",36);
c1.nation = "中华人民共和国";
Chinese c2 = new Chinese("老干妈",66);
System.out.println(c1);
System.out.println(c2);
System.out.println(Chinese.nation);
}
}
对应的内存结构:(以经典的JDK6内存解析为例,此时静态变量存储在方法区)
2.3.2 举例2
package com.atguigu.keyword;
public class Employee {
private static int total;//这里私有化,在类的外面必须使用get/set方法的方式来访问静态
变量
static String company; //这里缺省权限修饰符,是为了方便类外以“类名.静态变量”的方式访问
private int id;
private String name;
public Employee() {
total++;
id = total;//这里使用total静态变量的值为id属性赋值
}
public Employee(String name) {
this();
this.name = name;
}
public void setId(int id) {
剩余40页未读,继续阅读
资源评论
雨翼轻尘
- 粉丝: 6w+
- 资源: 130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功