java学习 java -- 构造方法 静态变量和方法

来源:互联网 发布:mysql导入大文件 编辑:程序博客网 时间:2024/06/08 05:37

一、构造方法
构造函数的作用:对对象的属性(成员变量)进行初始化。

写法:
1.构造方法的方法名与类名完全相同(大小写必须一样)
2.没有返回值类型(连void也不写)
3.没有返回值(没有return)
4.一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。
5.构造方法可以重载。参数顺序 个数 类型的不同

public static void main(String[] args) {    //  构造方法 是系统帮你调用的  在初始化对象时    Person p = new Person();    //p.Person(); 无法  自己来调用构造方法(不能使用对象点方法)    p.sayHi();    Person p1 = new Person();    p1.sayHi();    //  测试有参的构造方法    //  初始化对后面那对小括号  填参数调用的就是有参构造方法    //  没有填参数反之  调用无参构造方法    Person p2 = new Person("wangwu",100);    p2.sayHi();    // TODO Auto-generated method stub}}class Person{String name = "lisi";int age = 18;//  构造方法(无参数的构造方法)public Person() {    name = "zhangsan";    age = 18;    System.out.println("我是一个构造方法");}//写一个有参数的构造方法public  Person(String name, int age) {    //  给对象的成员变量赋值    this.name = name;    this.age = age;}public void sayHi() {    System.out.println(name + "---" + age);}}

输出结果
这里写图片描述

构造方法运行的顺序

public class Demo01 {public static void main(String[] args) {    Person person = new Person();}}class Person{String name;int age;public Person() {    System.out.println("我是一个无参的构造方法");}public Person(String name, int age) {}}

输出结果
这里写图片描述

也就是说 我们 在构造方法中 只要你在实例一个对象的时候 new创建对象的时候相当于输出这个构造方法,然后在执行main方法里的其他语句,比如说上一个例子中 在new之后的sayhi();方法是new之后的 的语句 所以 先输出一个构造方法,然后输出sayhi()中的语句。

  • 构造方法的注意事项
  • 1.如果你没写任何构造方法
  • 那么系统会给你提供一个 无参的构造方法
  • 2.如果你写了有参的构造方法
  • 这时系统就不再为你提供 无参的构造方法
  • 3.如果你想写有参构造方法 建议你把无参的构造方法也写上

例:

public class Demo02 {public static void main(String[] args) {    Car c1 = new Car("五菱宏光", 4);    //  这样修改对象的属性  属于  谋杀    //  坏处:浪费内存空间    c1 = new Car("长城汽车",5);    //  直接对象点属性修改 相对上面的方法 更灵活 省空间    c1.name = "北京吉普";    c1.num = 100;    c1.sayHi();}}class Car{String name;int num;public Car() {}//  写个有参构造方法public Car(String name, int num) {    this.name = name;    this.num = num;}public void sayHi() {    System.out.println(name + "---" + num);}

}

二、静态变量
静态变量
静态变量调用
1.可以使用对象去调用(但是不推荐)
2.静态变量用类名调用
(静态变量不依托对象 因为静态变量被加载的时候 对象还没有创建)

静态变量的特点:
1.随着类的加载而加载
2.创建优先于对象存在
3.是类穿件出来的对象 共享的部分
4.可以使用类名去调用
静态变量的好处:
节省内存空间
静态变量的应用场景:
举例:饮水机 和 水杯

静态变量与成员变量的区别
1.所属不同
成员变量:属于对象的 又叫对象变量(实例变量)
静态变量:属于类的 又叫类变量
2.内存中的存储不同
成员变量:存储在堆内存
静态变量:存储在方法区的静态区
3.加载到内存中的时机不同(生命周期不同)
成员变量:随着对象的创建而创建 随着对象的灭亡而灭亡
静态变量:随着类的加载而存在
4.调用方法不同
成员变量:只能使用对象去调用
静态变量:可以用对象区调用 但是一般用类名去调用

内存中表现步骤
1.类加载到方法区
2.加载到方法区的同时 静态变量被加载到方法区的 静态区
3.main函数入栈
4.在堆内存中创建 对象
5.把地址赋值给main函数的 对象保存
6.main函数 出栈
7.程序结束

静态变量在内存中的表现

这里写图片描述

public static void main(String[] args) {    AVgirl g1 = new AVgirl();    g1.name = "苍老师";    AVgirl.country = "日本";    g1.sayHi();    AVgirl g2 = new AVgirl();    g2.name = "小泽老师";    AVgirl.country = "日本";    g2.sayHi();}}class AVgirl{String name;        //  姓名static String country;      //  国籍public void sayHi() {    System.out.println(name + "---" + country);}

}

三、静态方法

public static void main(String[] args) {    Man m1 = new Man();    m1.sayHi();    //静态方法的调用  使用类名点方法调用    Man.sayHi2();}}class Man{int nim1;            //  成员变量static int num2;     //  静态变量//  在成员方法中  可以使用  成员变量 和 静态变量public void sayHi() {    System.out.println(this.nim1);    System.out.println(Man.num2);}//  声明一个  静态成员方法//  静态成员方法中  不能使用  成员变量//  只能使用静态变量//  简单记:静态的方法只能使用静态的变量  和  静态方法public static void sayHi2() {    //System.out.println(this.num1);    System.out.println(num2);}

}

设计一个数组工具类,可以实现的功能1.数组的反转、2.数组的遍历、3.数组的最大值输出。

private ArrayTools() {}/** * 获取数组的最大值 * @param array  数组 * @return       返回数组的最大值 */public static int getArrayMax(int[] array) {    //  在数组中随便找一个数当最大值    int max = array[0];    for (int i = 0; i < array.length; i++) {    if (array[i] > max) {        max = array[i];    }    }    return max;}/** * 遍历数组 * @param array  数组 */public static void printArry(int[] array) {    for (int i = 0; i < array.length; i++) {        System.out.println(array[i]);    }}/** * 数组元素反转 * @param array  数组 */public static void changeArray(int[] array) {    for (int i = 0; i < array.length / 2; i++) {    int temp = 0;    temp = array[i];    array[i] = array[array.length - 1 - i];    array[array.length - 1 - i] = temp;    }    System.out.println(Arrays.toString(array));}

}

在这些类中有一个共同点 就是没有成员变量,只有方法

如果仅仅需要使用类中成员方法, 这时可以 把成员方法写成静态方法, 在调用的时候 直接使用类名去调用 方便 , 一般 工具类 都会使用静态方法
查看系统类 Math发现, 系统把 构造方法私有化, 私有化后 外界无法创建 Math这个类的对象
什么时候可以构造方法私有化 , 当一个类 所有的 属性 和 方法 都是静态的, 可以私有化构造方法 因为根本不需要对象

原创粉丝点击