构造方法注意事项:
接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.构造方法私有化 (对象对于这个工具类无作用)