Java基础(6)---static关键字,代码块
static关键字
static(静态)关键字的定义:
用于修饰成员(成员变量,成员函数)
被static修饰的成员具备以下特点:
- 随着类的加载而加载
- 优先于对象存在
- 被所有对象所共享
- 可以直接被类名调用
需要注意的是:
静态方法只能访问静态成员,非静态即可访问静态,又可访问非静态
静态方法中不可以使用 this ,super 等关键字
主函数是静态的,访问非静态函数时,可用对象调用
static的特点:
- static是一个修饰符,用于修饰成员
- static稀释的成员被所有的对象共享
- static优先于对象存在,因为static的成员随着类的加载就已经存在了、
- static修饰的成员多了一种调用方式,可以直接用类名所调用(类.静态成员)
- static修饰的数据是共享数据,对象中存储的是特有数据
成员变量和静态变量的区别:
- 生命周期不同:
成员变量:随着对象的创建而存在,随着对象的被回收而释放
静态变量:随着类的加载而存在,随着类的消失而消失
- 调用方法不同
成员变量:只能被对象调用
静态变量:可以被类和对象调用
- 数据存储位置不同
成员变量(实例变量):数据存储在对内存的对象中,也叫随想的特有数据
静态变量(类变量):数据存储在方法区(共享数据区)的静态区,也叫对象的共享数据
class Person { private String name;// 成员变量 private int age; private static String country="CN";//静态成员变量 public Person() { // TODO Auto-generated constructor stub } Person(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; System.out.println("姓名:"+this.name+",年龄:"+this.age+",国家:"+Person.country); } //静态方法 public static String getCountry() { return country; } public static void setCountry(String country) { Person.country = country; } }
静态什么时候用?
- 静态变量
当分析对象中所具备的成员变量的值都是相同的,这时这个成员变量就可以被静态修饰。只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中是非静态的。如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义为静态的
- 静态函数
函数是否用静态修饰,就参考一点,就是该函数功能那个是否访问到对象中的特有数据。简单说,从源代码看,该功能是否需要访问非静态的成员变量,如果需要该功能就是非静态的;如果不需要,就可以将该功能定义为静态的。当然,也可以定义成非静态的,但是非静态的需要被对象调用,而仅创建对象调用非静态成员,没有访问特有数据的方法,该对象的创建是没有意义的。
代码块
独立的代码区间,用" { } "表示
- 静态代码块(与类有关)
随着类的加载而执行,而且只执行一次
作用:用于给类进行初始化(有的类没有对象,不能初始化,需要静态代码块完成)
当一个类中全部都是静态成员,则需要静态代码块随着类的加载而初始化
class StaticCode{ private static String username; private static String password; //静态代码块,没有名字的静态方法,不可以直接调用,会被最先执行 static{ StaticCode.username="root"; StaticCode.password="123456"; System.out.println(username+":"+password); } }
- 构造代码块(与对象有关)
可以给所有对象进行初始化
构造函数是只给对象的对象进行初始化
class Person { private String name;// 成员变量 private int age; //构造代码块,由“{ }”组成,每创建一个对象,就执行一次 { System.out.println("创建新的对象.."); } public Person() { // TODO Auto-generated constructor stub } Person(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; } }
- 局部代码块(在函数中)
限定局部变量的生命周期(防止相同变量名称所带来的互相影响,可以使用局部代码块来拆分结构)
public void show(){ //局部代码块,定义在函数中 { int x=100; System.out.println("x="+x); } int x=10; System.out.println("x="+x); }
代码块执行顺序
静态代码块 ----> 构造代码块---->构造函数---->局部代码块
- 点赞
- 收藏
- 分享
- 文章举报
- JAVA基础第六天学习日记_static关键字、文档、静态代码块、单例开发模式
- JAVA基础再回首(五)——static关键字、main方法、java Api帮助文档的使用、Math类、代码块
- 【java基础】 静态 关键字 static(构造函数、构造代码块、静态代码块的区别)
- java基础之----静态代码块和静态方法、以及static 关键字
- Java学习笔记——Java语言基础(七)(面向对象构造方法、static关键字、静态变量、静态方法、random随机数、代码块)
- 黑马程序员——Java基础语法 之面向对象(概念,特征,this,static关键字,代码块)
- 【Java基础】----static关键字、代码块、Main方法、匿名对象详解
- 【安卓学习笔记】JAVA基础Lesson6-关键字static
- Java基础学习总结(10)——static关键字
- Java基础(12):关键字static和final
- Java基础知识复习(static关键字)
- Java学习日记之11——Static关键字和代码块
- Java基础知识总结之 final和static关键字
- Java基础—static变量和代码块
- java基础----->Static 和 Final 关键字
- Java基础day9(重写,多态,final、static关键字,抽象方法,抽象类)
- 【JAVA基础】static关键字
- 黑马程序员——Java基础:static关键字、单例设计模式
- Java基础加强重温_01: 基础回顾(类、对象、类成分、封装、构造方法、this关键字)、static关键字(修饰成员变量,成员方法)、继承( )、抽象类(abstract)、模板设计模式
- JAVA基础(构造方法 static关键字)