java面向对象之工具类
【其他修饰符】 static 返回值类型 方法名 (【形参列表】){ // 执行语句 }
(1)在本类中,静态方法可以直接访问静态方法和静态变量。
(2)在其他类中:可以使用“类名.方法"进行调用,也可以使用"对象名.方法",推荐使用“类名.方法"
(3)在静态方法中,不能出现:this,也不能直接使用本类的非静态的成员。相反,非静态的实例成员方法可以直接访问静态的类变量或静态方法。
this,非静态的成员,这些都是需要创建对象时,才能使用的,而静态方法调用时,可能没有对象。
小贴士:静态方法只能访问静态成员。
public class Test{ public static void main(String[] args){ Son s = new Son(); s.fun();//有警告,没错误 Son.fun(); } } class Son{ private int a; public static void fun(){ // method();//错误的 // System.out.println(a);//错误 // System.out.println(this.a);//错误 System.out.println("Son:fun()"); } public void method(){ System.out.println("Son:method()"); } }
static修饰的成员变量,称为类变量、静态变量。
(1)该成员变量的值是该类所有对象共享的
(2)类变量的值和类信息一起存在于方法区中。
public class Test{ public static void main(String[] args){ Chinese c1 = new Chinese("张三"); Chinese c2 = new Chinese("李四"); System.out.println("国家名:" + c1.getCountry() + ",姓名:" + c1.getName()); System.out.println("国家名:" + c2.getCountry() + ",姓名:" + c2.getName()); c1.setCountry("中国");//两个对象共享,一个对象修改,会影响另一个对象 System.out.println("国家名:" + c1.getCountry() + ",姓名:" + c1.getName()); System.out.println("国家名:" + c2.getCountry() + ",姓名:" + c2.getName()); Chinese.setCountry("China");//通过“类名.”访问可读性更好 System.out.println("国家名:" + c1.getCountry() + ",姓名:" + c1.getName()); System.out.println("国家名:" + c2.getCountry() + ",姓名:" + c2.getName()); } } class Chinese{ private static String country = "中华人民共和国"; private String name; public Chinese(String name) { super(); this.name = name; } public static String getCountry() { return country; } public static void setCountry(String country) { Chinese.country = country;//类名.静态变量来区别区别同名变量 } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.atguigu.test; import static java.lang.Math.*; public class Test{ public static void main(String[] args){ System.out.println("PI:" + Math.PI); System.out.println("平方根:" + Math.sqrt(4)); System.out.println("随机数:" + Math.random()); //有静态导入,可以简写如下 System.out.println("PI:" + PI); System.out.println("平方根:" + sqrt(4)); System.out.println("随机数:" + random()); } }
变量的分类与区别详解
1、变量按照数据类型分:
(1)基本数据类型的变量,里面存储数据值
int a = 10;//a中存储的是数据值 Student stu = new Student();//stu存储的是对象的地址值 int[] arr = new int[5];//arr存储的是数组对象的地址值 String str = "hello";//str存储的是"hello"对象的地址值
2、变量按照声明的位置不同:
(1)成员变量
(2)局部变量
class Person{ private static String country = "中华人民共和国";//成员变量,静态成员变量,类变量,"中华人民共和国"是常量值 private String name;////成员变量,非静态成员变量,实例变量 public Person(String name) {//name 局部变量 this.name = name;//=左边带this.的是成员变量,=右边没有this.的是局部变量 } public Person() { } public static String getCountry() { return country;//成员变量 } public static void setCountry(String country) {//局部变量 Person.country = country;//=左边带类名.的是成员变量,=右边是局部变量 } public String getName() { return name;//成员变量 } public void setName(String name) {//局部变量 this.name = name;//=左边带this.的是成员变量,=右边是局部变量 } }
3、成员变量与局部变量的区别
(1)声明的位置不同
成员变量:类中方法外
局部变量:(1)方法的()中,即形参(2)方法体的{}的局部变量(3)代码块{}中
(2)存储的位置不同
成员变量:
如果是静态变量(类变量),在方法区中
如果是非静态的变量(实例变量),在堆中
局部变量:栈
(3)修饰符不同
成员变量:4种权限修饰符、static等多种修饰符
局部变量:不能有任何修饰符
(4)作用域
成员变量:
如果是静态变量(类变量),在本类中随便用,在其他类中使用“类名.静态变量"
如果是非静态的变量(实例变量),在本类中只能在非静态成员中使用,在其他类中使用“对象名.非静态的变量"
局部变量:有作用域,出了作用域就不能使用
(5)生命周期
成员变量:
如果是静态变量(类变量),和类相同,随着类的加载而分配,随着的类的卸载才消亡。
如果是非静态的变量(实例变量),和所属的对象相同,每一个对象是独立。对象创建时,才在堆中分配内存,随着对象被垃圾回收而消亡。