当有new创建一个对象的,里面属性和方法,通过构造函数,能定义多个不同的对象,在我们做面向对象开发的时候,给一个场景,人在一个班级的时候,你的老师可能是固定的。
当我们用构造方法去构造的时候,每次都去传递一个固定的实参去定义个老师。
这样好会显得代码非常的冗余。
一.static修饰的静态成员变量
1.静态变量
被static修饰的成员变量,叫做静态变量。
2.特点
该类所有对象共享
3.调用方式
(1)类名调用(推荐)
(2)对象名调用
4.代码案例
5.代码内存图
1.首先在测试类中加载main方法,解析字节码文件
2.初始化成员变量和方法,默认给初始值。
3.被static修饰的静态成员变量,单独放在一个位置,我们暂且叫它静态成员变量区。
4.通过new关键字在堆里面去构造一个对象
5.将赋值过去的成员变量,给对应的变量
6.并且每个对象都有一个地址值,我们暂且理解他用隐藏的this关键字来连接起来的。
7.在创建第二个新对象的时候,还是一样初始化变量的值,重复以上的操作,不过已经不用给静态变量那一块赋值了,因为没创建一个对象,都会加载静态成员变量区的static修饰的静态成员变量。
6.共享
当我们去定义一个类的时候,发现他的属性,每个对象都用得到的时候,我们可以使用静态成员变量。
二.static修饰的静态方法
1.三种类
(1)测试类
程序的入口,判断测试是否能正常运行。
(2)JavaBean类
用来描述一类事物
package aa.com;public class JvB {String name;int age;public JvB() {}public JvB(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void show() {System.out.println("我是" + name + "今年" + age + "岁");}}
(3)工具类
不是用来描述一类事物的,而是帮我们做一些事情的类。
1.规则
(1)类名见名知义
(2)私有化构造方法
(3)方法定义成静态的方便调用
2.案例(定义一个求数组和的方法)
工具类:
package aa.com;public class gjl {public static int getResult(int[] arr) {int sum = 0;for (int i = 0; i < arr.length; i++) {sum = sum + arr[i];}return sum;}
}
测试类:
package aa.com;public class ceShi {public static void main(String[] args) {
//
// JvB aa = new JvB("张三", 20);
// aa.show();int[] arr = {10, 20, 30, 40, 50};System.out.println(gjl.getResult(arr));}
}
3.调用
类名.方法名;
三.static的注意事项
1.静态方法只能访问静态变量和静态方法
2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
3.静态方法中是没有this关键字
总结:
静态方法中,只能访问静态。
非静态方法可以访问所有。
静态方法中没有this关键字