重庆网站设计制作价格谷歌搜索入口手机版
1.static(静态的)修饰属性:
① static修饰的属性称为静态属性或是类变量
② 语法:
static 访问修饰符 数据类型 变量名;
或 访问修饰符static 数据类型 变量名;
③ 特点:类变量,全类共有的属性,与创建多少对象没有关系。
④ 使用:类名.属性;
注意:①无法从静态上下文中引用非静态 变量a
②static方法中,不允许使用this和super。
2.回顾:在讲解函数的时候,函数的定义是:
修饰符 static 函数返回値型 函数名(形式参数列表){
//函数的实现
}
思考:为什么函数的定义时需要加static?
原因:静态方法中只能直接调用静态方法main函数是静态方法,所以在main函数中只能直接调用
静态方法,如果想在main函数中调用非静态的方法,必须创建对象,利用对象名.方法(实 参),
当时没有学习面向对象,所以为了能在main函数中直接调用函数,所以要求函数的定义加
static。
3.回顾方法的覆盖的要求:
① 发生在父子类之间
②方法名、参数表、返回值类型必须一致
③子类访问修饰符和父类一致,或是比父类更宽。
4.静态初始化代码块:
位置:定义在类以内,方法以外,被static修饰的代码块。
特点:用于在类加载时,和static属性按照定义的顺序依次进行初始化工作。
5.类加载:当JVM虚拟机第一次使用某个类时,需要通过classPath找到这个类对应的,class文件
并且对,dlass文件进行读取,获得其中的类相关的信息(属性、方法、方法返回值、包、父
等),读入JVM并保存起来,只进行一次。
6.static小结
(1)static修饰的属性称为静态属性、类变量
语法:static 数据类型 属性名;
特点:类变量、被所有对象共享(与创建多少对象没关系)
使用:类名.静态属性名;
对象名.属性名;// 不建议使用
(2) static修饰的方法称为静态方法、类方法
语法:static 返回值类型 方法名(形式参数列表){ }
使用:类名.静态方法()
对象名.方法名();// 不建议使用
注意:① static方法中只能直接访问静态成员(属性和方法),不能直接访问非静态成员(必
过对象名.来访问非静态成员)
② 静态方法只能被静态方法覆盖,且没有多态
③ 静态方法中不能使用 this.和 super.
(3)
1)初始化代码块(动态代码块):
位置:定义在类以内,方法以外的代码块。
特点:用于创建对象时,和属性初始化按照定义的顺序进行对象的初始化工作。
2) 静态初始化代码块:
位置:定义在类以内,方法以外,被 static修饰的代码块。
特点:用于在类加载时,和static属性按照定义的顺序依次进行初始化工作。
类加载:当JVM虚拟机第一次使用某个类时,需要通过classPath找到这个类对应的.class文件
并且对.class文件进行读取,获得其中的类相关的信息(属性、方法、方法返回值、包、父类
等),读入JVM并保存起来,只进行一次。
类加载的时机:① 创建对象
② 访问类的静态属性或静态方法,导致先进行类加载
③ 子类进行类加载(创建子类对象或是访问子类中的静态属性或是静态方
法),先加载其父类
7.代码
(1)
package demo;public class Test2{public static void main(String[] args){Myclass mc=new Myclass();Myclass mc2=new Myclass();mc.a=100;System.out.println(mc.a);System.out.println(mc2.a);mc.b=20;System.out.println("mc.b="+mc.b);System.out.println("mc2.b="+mc2.b);System.out.println(Myclass.b);mc.mb();Myclass.mb();}
}class Myclass{int a;static int b;public void ma(){System.out.println("ma...成员方法");}public static void mb(){System.out.println("静态方法..mb");}
}
(2)
package demo;public class Test4{public static void main(String[] args){//Myclass mc=new Myclass();//System.out.println(Myclass.a);Sub.y=100;}
}class Myclass{static int a=1;int b=3;static{System.out.println("静态代码块...");}public Myclass(){System.out.println("静态代码块...");}}
class Sub extends Myclass{int x=78;static int y=90;static{System.out.println("子类的静态代码块...");}}
(3)
package demo;public class Test5{public static void main(String[] args){MyClass.ma();}
}class MyClass{int a=20;static int b=100;public static void ma(){System.out.println("静态方法...");System.out.println("b="+b);}}
(4)
package demo;public class Test6{public static void main(String[] args){MyClass mc1=new MyClass();MyClass mc2=new MyClass();MyClass mc3=new MyClass();System.out.println("一共创建的对象个数为:"+MyClass.count);}
}class MyClass{static int count=0;public MyClass(){count++;}}