0x01 static修饰属性
-
示例程序:static变量和非satatic变量的区别
- 非static属性
class Static{ private String name; private int age; String address = "中国武汉"; public Static(String name,int age) { this.name = name; this.age = age; } public String getInfo() { return "姓名:"+this.name+",年龄:"+this.age+",地址:"+this.address; } } public class Demo3 { public static void main(String[] args) { Static obj_1 = new Static("Jenny", 18); Static obj_2 = new Static("Tom", 20); Static obj_3 = new Static("Join", 22); obj_1.address = "中国厦门"; System.out.println(obj_1.getInfo()); System.out.println(obj_2.getInfo()); System.out.println(obj_3.getInfo()); } }
![](https://i.imgur.com/hqmrx2O.png)
- static属性
class Static{ private String name; private int age; static String address = "中国武汉"; public Static(String name,int age) { this.name = name; this.age = age; } public String getInfo() { return "姓名:"+this.name+",年龄:"+this.age+"," + "地址:"+Static.address; } } public class Demo3 { public static void main(String[] args) { Static obj_1 = new Static("Jenny", 18); Static obj_2 = new Static("Tom", 20); Static obj_3 = new Static("Join", 22); Static.address = "中国厦门"; System.out.println(obj_1.getInfo()); System.out.println(obj_2.getInfo()); System.out.println(obj_3.getInfo()); } }
当address为非静态属性(变量)时,address属性被每一个实例化对象(new)独享。
当address为静态属性时(被static关键字修饰),address属性为共享属性时(所有对象可以访问)。
- static修饰属性的特点:
- static声明的属性也称为类属性,所有的类属性都可以通过类名.属性直接调用,没有static关键字的属性必须在产生实例化对象之后才可以被使用;
0x02 static修饰方法
-
示例程序:static方法和非satatic方法的区别
- 非static方法
class Static{ private String name; private int age; private String address = "中国武汉"; public Static(String name,int age) { this.name = name; this.age = age; } public void setCountry(String addre) { address = addre; // 设置内容 } public String getInfo() { return "姓名:"+this.name+",年龄:"+this.age+"," + "地址:"+this.address; } } public class Demo3 { public static void main(String[] args) { Static obj_1 = new Static("Jenny", 18); Static obj_2 = new Static("Tom", 20); Static obj_3 = new Static("Join", 22); obj_1.setCountry("中国厦门"); System.out.println(obj_1.getInfo()); System.out.println(obj_2.getInfo()); System.out.println(obj_3.getInfo()); } }
![](https://i.imgur.com/tZ9csIx.png)
- static方法
class Static{ private String name; private int age; private static String address = "中国武汉"; public Static(String name,int age) { this.name = name; this.age = age; } public static void setCountry(String addre) { address = addre; // 设置内容 } public String getInfo() { return "姓名:"+this.name+",年龄:"+this.age+"," + "地址:"+Static.address; } } public class Demo3 { public static void main(String[] args) { Static obj_1 = new Static("Jenny", 18); Static obj_2 = new Static("Tom", 20); Static obj_3 = new Static("Join", 22); Static.setCountry("中国厦门"); System.out.println(obj_1.getInfo()); System.out.println(obj_2.getInfo()); System.out.println(obj_3.getInfo()); } }
![](https://i.imgur.com/AovEtPv.png)
-
static和非static方法互调用的注意事项:
- static的方法不允许调用非static定义的属性或者方法;
- 所有的非static方法允许访问static属性或方法;
- 原因:
- 因为static方法可以在没有实例化对象的时候访问,而非static方法必须在有实例化对象产生之后才可以操作。
- static方法使用场景:
- 方法不希望受到类的实例化限制;