一 构造方法
1 作用 :对对象的属性(成员变量)进行初始化的
2 写法:
(1)构造方法的方法名与类名相同(大小写必须一样)
(2) 没有返回值类型(连void都不写)
(3)没有返回值 没有return
(测试类 一个文件只有一个访问public)
public class Demo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个Person方法
//构造方法是系统帮你调用的 在初始化对象时----有参 无参
//无法自己来调用方法(不能使用对象点方法);
Person p = new Person();
//p.Person();
p.sayHi();
//测试有参的构造方法
//理解 :初始化时后面的那对小括号
//填参数调用有参的构造方法
//没填参数反之调用无参 ,无参
// 思考 为什么你这么理解
//函数的重载 参数不同 :顺序 个数 参数类型
//切记 参数的名字 不同 不是函数的重载
//构造方法也属于 函数的重载
Person p2 = new Person("王五",100);
p2.sayHi();
}
}
class Person{
String name = "李四";
int age = 28;
//String name ;
//int age;
//构造方法(无参数的构造方法)
public Person() {
name="张三";
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);
}
}
二 构造方法的注意事项
1 如果你没有写任何构造方法
那么系统会给你提供一个无参的构造方法
2 如果你写了有参的构造方法
建议你把有参的构造方法写上
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(){
this.name="lanbjn";
this.num=4;
}
//写个有参的构造方法
public Car(String name,int num) {
this.name = name;
this.num = num;
}
public void sayhi() {
System.out.println(name+"...."+num);
}
}
举例
构建一个长方形的类
计算周长面积
要求
有构造方法 set、get 成员变量私有化
public class Demo03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
//起类名的时候尽量不要与系统重名
class Rect {
private int hight;//高
private int wight;//宽
//构造方法
//get set 方法
//成员方法
//wucan
public Rect() {
}
//有参
public Rect(int hight,int wight) {
this.hight = hight;
this.wight = wight;
}
//get set 方法
public void setHight(int hight) {
this.hight = hight;
}
public int getHight() {
return this.hight;
}
public void setWight(int wight) {
this.wight = wight;
}
public int getWight() {
return this.wight;
}
//成员方法
//获取周长
//注意 不用 给周长面积传参数
//谁调用这个周长面积的方法 , 就计算谁的周长面积
public int getLength() {
return (this.hight+this.wight)*2;
}
public int getAreo(){
return (this.hight*this.wight);
}
}
三 静态变量-
静态变量的使用
1可以使用对象调用(不推荐)
2 静态变量用类名调用
静态变量的特点
1 随着类的加载而加载
2 创建优先于对象的存在
3 是类创建出来的对象共有(共享)的部分
4 可以使用类名去调用
好处
1 可以节省内存空间
应用场景
饮水机
静态变量 成员变量的区别
1 所属不同
成员变量:属于对象的 所以他叫对象变量又叫实例变量
静态变量:属于类的(依托于类)又叫类变量
2 内存中的存储位置不同
成员变量:存储与堆内存中
静态变量:存储方法区的静态区中
3 加载到内存中的时机不同(生命周期)
成员变量:随着对象的创建而创建
静态变量:随着类的加载而创建
4 调用的方法不同
成员变量:只能使用对象而调用
静态变量:可以使用对象而调用 但是一般使用类去调用
内存表现步骤
public class Demo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
AVGirl g1 = new AVGirl();
g1.name = "苍老师";
AVGirl.country = "日本";
g1.sayhi();
AVGirl g2 = new AVGirl();
g2.name = "小泽老师";
//g2.country = "日本";
AVGirl.country = "日本1";
g2.sayhi();
}
}
class AVGirl{
String name;
static String country;
public void sayhi() {
System.out.println(this.name+"....."+AVGirl.country);
}
}
他们在内存中的表现