构造方法
作用:
初始化成员变量的
注意:
1.构造方法 没有返回值 甚至不写返回值的类型
2.构造方法的方法名 与类名 相同
书写:
关键字 构造方法名(){
}
举例:
创建cat类:
public class Cat {
private String name;
private String color;
private String kind;
public Cat() {
name = "小不花";
color = "不花色";
kind = "中华不田园猫";
System.out.println("我是猫类的构造方法");
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
public String getKind() {
return this.kind;
}
public void setKing(String kind) {
this.kind = kind;
}
public void eat() {
System.out.println("会吃鱼");
}
public void cute() {
System.out.println("会卖萌");
}
public void catchMouse() {
System.out.println("会抓老鼠");
}
public void sayHi() {
System.out.println(name);
System.out.println(color);
System.out.println(kind);
}
}
测试类:
public static void main(String[] args) {
Cat cat = new Cat();
cat.sayHi();
Cat cat1 = new Cat();
cat1.sayHi();
}
有参构造方法
注意:
不存在无参构造方法时 系统会提供无参构造方法
无参构造方法:
注意:
存在有参的构造方法时 系统不会提供无参的构造方法
书写:
成员变量 -> 无参有参构造方法 -> set/get方法 -> 成员方法
举例:
class Car{
String name;
int num;
public Car() {
System.out.println("我是无参的构造方法");
}
public Car(String name, int num) {
this.name = name;
this.num = num;
System.out.println("我是有参的构造方法");
}
public void sayHi() {
System.out.println(name + "..." + num);
}
public void fun() {
System.out.println("哈哈");
}
}
测试:
public static void main(String[] args) {
Car car = new Car();
car.name = "法拉利";
car.num = 911;
car.sayHi();
Car car2 = new Car("吉利金刚", 10);
System.out.println(car2.name);
Car car3 = new Car("吉利美人豹", 11);
car3.sayHi();
}
举例:
需求:
创建一个矩形类
计算周长 和 面积(都是整数就行)
要求:
无参有参构造方法 set/get方法
class Square {
private int length;
private int width;
private int perimeter;
private int area;
public Square() {
}
public Square(int length, int width) {
this.length = length;
this.width = width;
this.perimeter = (this.length + this.width) * 2;
this.area = this.length * this.width;
}
public int getLength() {
return this.length;
}
public void setLength(int length) {
this.length = length;
}
public int getWidth() {
return this.width;
}
public void setWidth(int width) {
this.width = width;
}
public int getPerimeter() {
return this.perimeter;
}
public void setPerimeter(int perimeter) {
this.perimeter = perimeter;
}
public int getArea() {
return this.area;
}
public void setArea(int area) {
this.area = area;
}
}
静态变量和静态方法
特点:
使用static修饰
静态变量:
静态变量保存在方法区的静态区(共享区)
静态变量是共享的区间
调用:
1.对象调用
2.类名调用(推荐)
推荐原因:只要加载了.class文件 就加载静态变量 这时还没有对象产生
静态变量(类变量)和 非静态变量的(对象变量)区别
1.调用方式不同
静态变量: 对象或类名去调用(推荐 类名)
非静态变量:只能使用对象去调用
2.内存中存在位置不同
静态变量: 方法区的静态区
非静态变量:堆内存
3.加载的是不同
静态变量:随着类的加载而加载(不依赖对象而加载)
非静态变量:随着对象的创建而创建(依赖对象)
4.生命周期不同
静态变量: 随着类的销毁而销毁(相当于程序结束)
非静态变量:随着对象销毁而销毁
举例:
创建类
class Girl{
String name;
static String country;
public void sayHi() {
System.out.println(this.name + "..." + Girl.country);
}
}
main中测试
public static void main(String[] args) {
Girl girl1 = new Girl();
girl1.name = "夏可可";
Girl.country = "中国";
girl1.sayHi();
Girl girl2 = new Girl();
girl2.name = "伊柯";
girl2.sayHi();
}
图片分析:

总结步骤:
1.加载.class文件(字节码文件)到方法区
2.main方法入栈
3.要创建Girl的对象 先要加载 Girl.clss
Girl.clss中分为 静态区和非静态区
这时初始化静态变量country初始值为null
4.创建对象(堆内存开辟空间)
5.把对象地址 赋值给 girl 变量 保存
6.通过类名 修改 类变量的值
7.sayHi方法入栈 打印
8.sayHi出栈
9.main出栈
静态方法
特点:
使用static修饰的方法
非静态方法:
1.可以使用静态变量 和 非静态变量
2.可以使用静态方法 和 非静态方法
静态方法:
1.只能使用静态变量
2.只能使用静态方法
举例:
class Man {
int num1 = 10;
static int num2 = 5;
public void fun() {
System.out.println(num1);
System.out.println(num2);
Man.sayHi();
}
public static void sayHi() {
System.out.println("我是sayhi");
}
public static void fun1() {
System.out.println(Man.num2);
sayHi();
}
}
public static void main(String[] args) {
Man man = new Man();
man.fun();
Man.fun1();
}
main解析
main就是为了让jvm去调用的方法
public jvm调用这个方法 要使用最大权限
static jvm调用时是不需要创建对象 直接使用类名调就行
main 不是关键字 jvm只认识main这个词
String[] args 接收键盘输入的值