权限修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。

Java 支持 4 种不同的访问权限。
  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使* 用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

    权限修饰符

    
    public class PersonTest {

    public static void main(String[] args) {

    // 创建一个人类对象 张三
    Person person = new Person();
    // 设置 该人的名字未 张三
    person.name = "张三" ;
    // 设置年龄 为 10 岁
    // person.age = 10 ;
    // 设置 手机号
    person.tel = "13112345678" ;
    
    // 给张三设置 金额为 10000
    //person.money = 10000 ;
     person.study("Java");
    
    // 调用赚钱的方法
    //person.earnMoney();

    }
    }

public class Person {

/**
 * 属性 field 名字
 */
public String name ;

/**
 * 人的年龄
 */
private Integer age ;

/**
 * 性别
 */
String sex ;

/**
 * 手机号
 */
protected String tel ;

/**
 * 钞票
 */
private double money ;

public void study(String subject) {
    System.out.println(name + "正在学习" + subject + ", 他今年已经" + age + "岁了");
}

private void earnMoney() {
    System.out.println(name + "正在拼命的工作、养家、赚钱");
}

}

import com.qikux.day3.Person;

public class Student extends Person {

public void study() {

    System.out.println(name + "正在学习,他的手机号是" + tel + ", 他的账户余额有" );
}

}

* 添加给 私有属性 money 设置值的方法
>public void setMoney(double money) {
        this.money = money ;
    }
* 添加 获取 私有属性 age 的方法
 >public int getAge() {
    return this.age ;
    }
* 添加 获取 私有属性 money 的方法
>public double getMoney(){
        return this.money ;
    }
    public void study(String subject) {
        System.out.println(name + "正在学习" + subject + ", 他今年已经" + age + "岁了");
    }
private void earnMoney() {
       System.out.println(name + "正在拼命的工作、养家、赚钱");
    }

}

#### 完整案例
* 给 Person类添加 构造方法,完成对私有属性的赋值
* 类中,如果没有特殊需求,推荐 添加一个 无参构造方法
* 添加给 私有属性 age 设置值的方法
* 添加给 私有属性 money 设置值的方法

public class Person {

/**
 * 属性 field 名字
 */
public String name ;

/**
 * 人的年龄
 */
private Integer age ;

/**
 * 性别
 */
String sex ;

/**
 * 手机号
 */
protected String tel ;

/**
 * 钞票
 */
private double money ;
 public Person() {}
public Person(int age, double money){
    this.money = money;
    this.age = age ;
}

public void setAge(int age) {
    //if ( age < 0 || age > 150) throw new RuntimeException("年龄的范围应该在0-150之间") ;
    this.age = age ;
}

/**
 * 添加给 私有属性 money 设置值的方法
 */
public void setMoney(double money) {
    this.money = money ;
}

/**
 * 添加 获取 私有属性 age 的方法
 */
public int getAge() {
    return this.age ;
}

/**
 * 添加 获取 私有属性 money 的方法
 */
public double getMoney(){
    return this.money ;
}
public void study(String subject) {
    System.out.println(name + "正在学习" + subject + ", 他今年已经" + age + "岁了");
}

private void earnMoney() {
    System.out.println(name + "正在拼命的工作、养家、赚钱");
}

}
class PersonTest {

public static void main(String[] args) {

    // 创建一个人类对象 张三
    Person person = new Person();
    // 设置 该人的名字未 张三
    person.name = "张三" ;
    // 设置年龄 为 10 岁
    //person.age = 10 ;
    person.setAge(1000);

    //person.sex = "男" ;

    // 设置 手机号
    //person.tel = "13112345678" ;

    // 给张三设置 金额为 10000
    //person.money = 10000 ;

    person.study("Java");

    // 调用赚钱的方法
    //person.earnMoney();

}

}


#### 比较各属性是否一样(自己编译一段代码,用来比较两个对象是否内容相等)

如果传入的对象和this地址相同
>if (this==obj)return true;

如果两个地址不相同,判断obj是否为空
>if (obj ==null)return false;

比较两个对象的 类型是否 相等
获取 一个 对象的 类型,通过 对象的 getClass() 方法
>if (this.getClass()!=obj.getClass())return false;

如果两个对象是同种类型,继续进行下面的比较
>Person p = (Person) obj;
>Objects.equals(a, b) ;  

比较两个对象的内容是否相同的工具类,解决了可能会产生空指针的问题
>if (!Objects.equals(this.name,p.name))return false;

如果名字相同, 继续比较 年龄
>if (this.age!=p.age)return false;

如果年龄 也相等, 继续比较 性别
>if (!Objects.equals(this.sex,p.sex))return false;

如果 性别 相等, 继续比较 手机号
>if (!Objects.equals(this.tel,p.tel))return false;
    return true;
#### 一个类中最多只会发生一次类加载,类加载的产物是“类对象”,用Class类型来表示类加载的过程
1.分配空间
2.加载静态属性,如果有赋值语句,同时完成赋值操作。
3.加载静态代码块,并执行代码块中的语句。
4.如果有静态属性没有被赋值,此时完成对静态属性的赋值
5.将类中的静态方法,全部压入内存(此时方法不会被执行)
* static 修饰的属性(静态属性)
* 静态属性被类的所有对象共享,任何一个对象如果对静态属性修改,那么所有对象看到的都是修改后的数据
* static修饰方法(一般用于工具类的编写)
* static修饰代码块(做数据的一次性初始化工具)
上一篇:KubeEdge云端部署


下一篇:泛型、Junit