Java第九天
类变量和类方法
类变量
基本介绍
类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样,任何一个该类的对象去修改它时,修改的也是同一个变量
定义语法
访问修饰符 static 数据类型 变量名;[推荐]
static 访问修饰符 数据类型 变量名;
访问类变量
类名.类变量名 或者 对象名.类变量名【静态变量的访问修饰符的访问权限和范围和普通属性是一样的】
推荐使用:类名.类变量名
package com.xiaban.static_;
public class ChildGame {
public static void main(String[] args) {
//int counter = 0;
Child child1 = new Child("白骨精");
child1.join();
//counter++;
child1.count++;
Child child2 = new Child("狐狸精");
child2.join();
//counter++;
child2.count++;
Child child3 = new Child("老鼠精");
child3.join();
//counter++;
child3.count++;
System.out.println("共有"+Child.count+"名小孩加入游戏");
System.out.println("child1.count = " + child1.count);//3
System.out.println("child2.count = " + child2.count);//3
System.out.println("child3.count = " + child3.count);//3
}
}
class Child{
private String name;
//定义一个变量count,是一个类变量(静态变量) static静态
//该变量最大的特点就是会被child类的所有的对象实例共享
public static int count = 0;
public Child(String name) {
this.name = name;
}
public void join(){
System.out.println(name+"加入了游戏");
}
}
类变量使用注意事项和细节讨论
-
什么时候需要用类变量
当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量 -
类变量与实例变量(普通属性)的区别
类变量是该类的所有对象共享,而实例变量是每个对象独享 -
加上static称为类变量或者静态变量,否则称为实例变量/普通变量/非静态变量
-
类变量的访问需要满足访问修饰符的访问权限和范围
-
实例变量不能通过 类名.类变量名 的方式访问
-
类变量是在类加载时就初始化了,也就是说,即使没有创建对象,只要类加载了,就可以使用类变量了
package com.xiaban.static_; public class VisitStatic { public static void main(String[] args) { //类变量是随着类的加载而创建的,所以即使没有创建对象实例也可以访问 System.out.println(A.name);//xiaban A a = new A(); System.out.println(a.name);//xiaban } } class A{ public static String name = "xiaban"; }
-
类变量的生命周期是随着类的加载开始,随着类消亡而销毁
类方法
基本介绍
类方法也叫静态方法,和类变量类似
定义形式
访问修饰符 static 数据返回类型 方法名(){ } [推荐]
static 访问修饰符 数据返回类型 方法名(){ }
类方法的调用
类名.类方法名 或者 对象名.类方法名
package com.xiaban.static_;
public class StaticMethod {
public static void main(String[] args) {
Stu tom = new Stu("tom");
tom.payFee(100);
Stu Mary = new Stu("Mary");
Mary.payFee(100);
Stu.showFee();//200
}
}
class Stu{
private String name;//普通成员
//定义一个静态变量,来累积学生的学费
private static double fee = 0;
public Stu(String name) {
this.name = name;
}
public static void payFee(double fee){
Stu.fee += fee;//
}
public static void showFee(){
System.out.println("总学费有:"+ Stu.fee);
}
}
类方法经典的使用场景
当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率
比如:工具类中的方法 utils
**在开发自己的工具类时,可以将方法做成静态,方便调用
类方法使用注意事项和细节讨论
- 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
类方法无this的参数 即 不能用this
普通方法中隐含着this的参数 - 类方法可以通过类名调用,也可以通过对象名调用
- 普通方法和对象有关,需要通过对象名调用,但是不能通过对象名调用
- 类方法不允许使用和对象有关的关键字,比如this和super
- 类方法(静态方法)中只能访问静态变量或者静态方法
- 普通成员方法,既可以访问普通变量(方法),也可以访问静态变量(方法)
main方法语法
深入理解main方法
解释main方法的形式:public static void main(String[] args){}
- java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public
- java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static
- 该方法接收String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
特别提示
- 在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性
- 但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象区访问类中的非静态成员
package com.xiaban.main_;
public class Main01 {
private int n1 = 100;
private static String name = "xiaban";
public static void hi(){
System.out.println("Main01的hi方法");
}
public void cry(){
System.out.println("Main01的cry方法");
}
public static void main(String[] args) {
//可以直接使用 name
//静态方法main可以访问本类的静态成员
System.out.println(name);
//静态方法main可以访问本类的静态方法
hi();
//静态方法main 不可以访问本类的非静态成员/方法
//System.out.println("n1 = "+ n1);
//cry();
//静态方法main要访问本类的非静态成员,需要先创建对象,再调用
Main01 main01 = new Main01();
System.out.println(main01.n1);
main01.cry();
}
}
如果想在idea中给main方法穿参
可以选择idea的右上角 的 方法名 中点击 编辑配置 接着在 程序实参(Program Arguments) 一栏中输入想要传递的参数 参数之间用空格分开