2.类和对象的定义与使用( 五 )


变量被修饰时:
变量被修饰时:
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问,因为修饰的变量不属于某个具体的对象,虽然可以通过对象访问但这么做想想其实不合理
class Student {public static String name;public static int age;//private String classRoom;public Student(String name, int age) {this.name = name;this.age = age;//this.classRoom=classRoom;}public void sleep(){System.out.println(name+"正在睡觉");}}public class Test {public static void main(String[] args) {Student student=new Student("张三",10);//方法一:(不推荐)student.name="李四";student.age=18;student.sleep();//方法二:(推荐)Student.name="王五";Student.age=19;student.sleep();}}
运行结果:
3. 类变量存储在JVM方法区当中
4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
6.修饰成员方法
Java中,被修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的 。静态成员一般是通过静态方法来访问的 。
【静态方法特性】
【2.类和对象的定义与使用】1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
class Student {public static String name;public static int age;public Student(String name, int age) {this.name = name;this.age = age;}public void eat(){System.out.println(this.name+"正在吃饭");}public static void sleep(){System.out.println(name+"正在睡觉");}}public class Test {public static void main(String[] args) {Student student=new Student("张三",10);//通过对象调用student.sleep();//通过类名.静态方法名(...)调用Student.sleep();}}
3. 不能在静态方法中访问任何非静态成员变量
4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
6.成员变量初始化
静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化 。
1. 就地初始化
就地初始化指的是:在定义时直接给出初始值
public class Student{private String name="张三";private String gender="男";private int age=10;private double score=100.0;private static String classRoom = "Bit306";// ...}
2. 静态代码块初始化
那什么是代码块呢?继续往后看 。
7. 代码块
使用 {} 定义的一段代码称为代码块 。根据代码块定义的位置以及关键字,又可分为以下四种:
普通代码块:定义在方法中的代码块构造代码块:定义在类中的代码块(不加修饰符) 。也叫:实例代码块 。构造代码块一般用于初始化实例成员变量 。静态代码块:使用定义的代码块称为静态代码块 。一般用于初始化静态成员变量 。同步代码块(本文不涉及)
class TestStatic {public static int staticNum = 100;public int data1 = 10;{//构造代码块 || 实例代码块System.out.println("实例代码块被执行了....");data1 = 1000;//一般情况下用来初始化 非静态的数据成员}static {//静态代码块:初始化静态成员变量 。System.out.println("静态代码块被执行了....");staticNum = 9999;}static {staticNum = 91999;}public TestStatic() {System.out.println("执行构造方法.....");}public static void main(String[] args) {TestStatic testStatic1 = new TestStatic();System.out.println(testStatic1.data1);System.out.println(TestStatic.staticNum);System.out.println("--------------------");TestStatic testStatic2 = new TestStatic();{//普通代码块}}}