Java之static静态对象

您所在的位置:网站首页 js对象声明静态变量是什么 Java之static静态对象

Java之static静态对象

2024-02-22 04:36| 来源: 网络整理| 查看: 265

static关键字:         1.概念:                     被该类的所有对象共享使用,不依赖于某个具体的对象,和对象无关,依赖于类,在内存中唯一只有一份

        2.类的加载过程:                     第一次使用new创建Student类的对象时,首先检查.class文件,是否被加载到方法区中,如果没有,把             Student类的.class文件加载到方法区中(此时还没有对象),如果.class文件中有static静态修饰的内容,             会把static静态修饰的内容,加载方法区的静态区中,并且要完成静态成员的初始化然后: 才进行对象的创建。

        所以: 先有静态代码块,才加载对象。 

 static修饰成员变量的使用:

static修饰修饰成员变量(类变量: 依赖于类,与对象无关)         1.定义格式:                     static 数据类型 变量名称 = 数据值;

        2.使用格式:                     类名.静态成员变量名称;        推荐使用                     对象名.静态成员变量名称;      不推荐使用

static修饰成员方法的使用

static修饰成员方法(类方法: 依赖于类,与对象无关)         1.定义格式:                     public static 返回值类型 方法名称(参数列表...) {...}

        2.使用格式:                    类名.静态成员方法名称(...)        推荐使用                     对象名.静态成员方法名称(...)      不推荐使用              3.注意:                     静态成员变量也有默认初始化值

public class JavaEE372Student { String name;//不能使用static修饰: 属于每个对象的特有数据 static String room;//使用static修饰: 属于所有对象的共享数据 //定义静态方法 public static void show() { System.out.println("班级: "+room); } } //测试类 public class Demo05Static { public static void main(String[] args) { System.out.println(JavaEE370Student.room);//null //创建JavaEE372Student类的对象 JavaEE372Student stu = new JavaEE372Student(); //不推荐使用对象调用静态成员 System.out.println(stu.room);//null System.out.println("---------"); //给静态成员赋值 JavaEE372Student.room = "HMTBD1002"; System.out.println(JavaEE372Student.room);//HMTBD1002 System.out.println(stu.room);//HMTBD1002 System.out.println("---------"); JavaEE372Student stu2 = new JavaEE372Student(); stu2.room = "HMTBD1003"; System.out.println(stu.room);//HMTBD1003 System.out.println(stu2.room);//HMTBD1003 System.out.println(JavaEE372Student.room);//HMTBD1003 System.out.println("---------"); //调用静态成员方法 //推荐使用类名调用 JavaEE372Student.show();//班级: HMTBD1003 //不推荐使用对象调用 stu.show();//班级: HMTBD1003 } } 静态代码块

静态代码块         1.格式:             static {                 ...             }

        2.特点:             (1)假如只创建对象,静态代码块会优先于构造方法执行,唯一执行一次             (2)静态代码块,随着类的加载而加载并唯一执行一次             (3)完成静态成员变量的赋值,没有赋值,会有默认初始化值             (4)静态代码块,仍然属于静态内容,内部不能使用非静态             (5)完成项目的初始化工作

/* 静态代码块 1.格式: static { ... } 2.特点: (1)假如只创建对象,静态代码块会优先于构造方法执行,唯一执行一次 (2)静态代码块,随着类的加载而加载并唯一执行一次 (3)完成静态成员变量的赋值 (4)静态代码块,仍然属于静态内容,内部不能使用非静态 (5)完成项目的初始化工作 */ public class Demo07StaticKuai { public static void main(String[] args) { //创建对象 //Person p = new Person(); //Person p2 = new Person(); System.out.println(Person.country); } } //此类只针对咱们中国人 public class Person { String name;//不能使用static修饰: 每个对象的特有数据 static String country = "CHINESE";//必须使用static修饰: 所有的对象的共享数据 //空参构造方法 public Person(){ System.out.println("空参构造被执行了..."); } //静态代码块 static { System.out.println("静态代码块执行了..."); //(3)完成静态成员变量的赋值 country = "CHINA"; //(4)静态代码块,仍然属于静态内容,内部不能使用非静态 /* name属于非静态成员变量,必须由对象调用, 但是静态代码块执行时,还没有完成对象的创建, 所以静态代码块中不能使用非静态的内容 */ //System.out.println(name); /* this代表对象,但是静态代码块执行时,还没有完成对象的创建 */ //System.out.println(this.name); //(5)完成项目的初始化工作 init(); } //模拟项目初始化的方法 public static void init() { System.out.println("项目正在完成初始化,需要稍等10秒钟...."); for (int i = 10; i > 0; i--) { //此代码直接复制,后面多线程中讲解 try { Thread.sleep(1000);//1000毫秒,程序在此处休眠1000毫秒(1秒) } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(i); } System.out.println("项目初始化完成,你可以尽情使用了...."); } } 静态的注意事项



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3