构造方法注意事项:
接https://blog.csdn.net/lijock/article/details/80244581
1. 当类中没有提供无参的构造方法的时候
系统在你创建对象时 会自动调用无参的构造方法
这个被调用的无参构造方法是系统本身提供的
2. 如果你只提供了有参的构造方法
那么系统将不再给你提供无参构造方法
建议: 书写类的时候 为了规范化 最好将无参和有参构造方法都写上
class Car{ private String name; private String description; // 无参构造方法 public Car(){ this.name = "车名"; this.description = "描述"; } // 有参构造方法 public Car(String name,String description){ this.name = name; this.description = description; } }
静态变量
静态变量: 相当于一个共享的变量 每个对象都能访问到
使用关键词 static修饰
形如: static String name;
静态变量也叫类变量 即可以使用对象直接调用 也可以使用类名直接调用
建议使用类名直接调用:
1. 方便静态变量和成员变量的区分
2. 静态变量与对象无关,生成静态变量时 对象还没有被创建
public class Demo03 { public static void main(String[] args) { AVGirl girl1 = new AVGirl(); girl1.name = "苍老师"; AVGirl.country = "日本"; girl1.sayHi(); AVGirl girl2 = new AVGirl(); girl2.name = "小泽老师"; AVGirl.country = "韩国"; girl2.sayHi(); } } class AVGirl{ String name; // 姓名 static String country; // 国籍 public AVGirl() { } public void sayHi() { System.out.println(name + ".." + country); } }
对象加载到内存中的表现步骤:
1.加载有main方法的类(class文件) 到方法区中
2.main方法 入栈(创建AVGirl对象)
3.先把AVGirl.class加载到 方法区中
4.在堆内存中 开辟空间 创建AVGirl的对象(根据class文件的成员变量写入对象属性)
5.赋值方法 入栈 赋值完 出栈
6.main方法执行完毕 出栈
7.程序结束
静态变量与成员变量的区别:
1.所属不同
静态变量: 属于类的 也叫类变量
成员变量: 所属对象的 也叫对象变量
2.在内存中的位置不同
静态变量: 在方法区的静态区
成员变量: 在堆内存中
3.在内存中的加载时机不同(生命周期不同)
静态变量: 随着类的加载而加载 随着类的销毁(程序结束时)而销毁
成员变量: 随着对象的创建而创建 随着对象的销毁(运行完)而销毁
4.调用方式不同
静态变量: 对象名.静态变量名 或者 类名.静态变量名(推荐)
成员变量: 对象名.成员变量名
静态方法
main方法 就是静态方法
public static void main(String[] args){ }
静态方法与成员方法:
成员方法中 即可以使用成员变量 也可以使用静态变量
静态方法中只能使用静态变量
静态方法跟静态变量一样 随着类的加载而加载
静态方法的执行和成员方法一样 在栈内存中执行 入栈和出栈
简单记: 静态的只能调用静态的 成员的都可以
int num1 = 10; // 成员变量 static int num2 =20; // 静态变量 // 成员方法 public void fun1() { System.out.println(this.num1); System.out.println(num2); } // 静态方法 public static void fun2() { //System.out.println(this.num1); System.out.println(num2); // fun1(); --- this.fun1(); 不能调用成员方法 fun3(); // 只能调用静态方法 } // 静态方法 public static void fun3() { System.out.println("666"); }
解析main函数
public JVM调用main方法的时候 需要最高的权限
static 调用静态方法 是不需要创建对象的
main 不是关键词 当程序运行时
jvm只会调用并且使用类名调用 一个叫main的函数
String[] args 原来是用来接收键盘输入的字符串
(可以使用 javac 和 java指令 测试)
编写工具类
1.一般所有的构造方法都使用静态的 方便调用
2.构造方法私有化 (对象对于这个工具类无作用)