成员变量和行为变量
描述加代码
成员变量:
成员变量: Dog类由我所定义的名字,种类和年龄组成 这些也就是狗的成员,成员变量组成了类(Dog),是类的重要组成部分 行为变量: 狗需要吃饭,睡觉,这些就是行为 类中的变量和方法统称为属性(共性特性)
public class Dog {
public int age;
//年龄
public String name;
//名字
public String variety;
//种类
public void eat()
{
System.out.println("狗吃饭");
}
public void sleep()
{
System.out.println("狗睡觉了");
}
}
使用这些类
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Dog mydog= new Dog();
//相当于注册一个帐号,在这里使用类
mydog.name="kitty";
mydog.age=2;
mydog.variety="柯基";
//赋值
mydog.eat();
mydog.sleep();
//注销我的账户
mydog=null;
System.out.println(mydog.name);
}
}
Dog mydog=new Dog(); 这里申请创建一个账户,
使用她 mydog=null; 销毁这个账户,使他指向空指针
重点
oop和封装
我们把成员变量做的安全,用private代替public同时提供了getter,setter这种方法叫作 oop 的封装
支付宝里面的余额你只由有充值才可以使用
如果设置成public,余额可以任意修改
这时候就得用private,私有变量去定义余额
当我设置blance为私有变量,如果使用PUBLIC那样的方式去使用会报错 不可以在main里像上图那样赋值,使用 那么该怎么使用捏??
getter and setter
public void setBlance(int blance) {
this.blance = blance;
}
public int getBlance() {
return blance;
}
}
我在Dog类定义get和set函数,用于访问private变量
然后在main函数里面这样使用他
mydog.setBlance(88888);
mydog.getBlance();
System.out.println("mydog.getBlance() = " + mydog.getBlance());
this.blance 指的又是啥捏?
如果每个私有变量都得这样写get set函数那就太麻烦了
所以我准备用别人写好的库来用 这里用的是lombok,这样导包就可以使用我们需要的函数了,getter setter
这样把全部的变量都设置成私有时 这些定义就不可用了
这样使用就可
如果想限止某些变量可以单写一个
//方法的重写
public void setAge(int age) {
if(age>0){
this.age=age;}
else
{
this.age=0;
System.out.println("输入的数值错误,请重新输入");
}
}
toString
这样设置三个变量,如果我那样输出会得到啥? 三个值么?
mydog.setName("kennys");
mydog.setAge(11);
mydog.setVariety("东八区的美国狗");
System.out.println("mydog = " + mydog);
好像是一串地址
加入tostring(alt+insert)后
构造方法
先定义,后赋值
直接初始化(定义加赋值)
//构造方法,不用加类型
//默认创建的 无参数的,只要创建类,就会有无参构造函数(无参构造器)。
//自己构造了方法也得写,不然报错
public Dog(){}
//有参构造器
public Dog(int age, String name, String variety, int blance) {
this.age = age;
this.name = name;
this.variety = variety;
this.blance = blance; }
//
Dog zhangdog = new Dog(18,"kennys","柴犬",88);
System.out.println(zhangdog.getName());
静态变量和静态方法
//dog类中
public static String house = "nang";
//main中,好像new的对象不能用,只能类用
System.out.println("Dog.house = " + Dog.house);
这样好像还是可以改变值,所以设置成private,就不可以额去改变值了.
那么还是得用getter setter来获取么? 区别是不可以用return this.house=house,因为我的函数好像没有传参w
private static String house = "nang";
public static String getHouse()
{
return house;
}
static单例模式
public class earth {
//单例设计模式
private static earth instance=new earth();
//在类中定义,也没必要必须在Main在调用
//只给一次new的机会,在类中定义对象
private earth(){}
public static earth getInstance()
{
return instance;
}
public void heelo()
{
System.out.println("heelpo");
}
}
//main中
earth instance=earth.getInstance();
instance.heelo();