private私有化,this,构造方法,面向对象标准写法(1,2,3)

wangxiaojian-lina / 2024-09-25 / 原文

  • 关键字 private

        * java提供一个关键字给我们使用:private 私有的
        可以修饰成员变量,成员方法,构造方法
        在同一个类中,private关键字不起作用,相当于透明的,同一个类中被private关键字修饰的成员可以随意访问
    
  • 标准写法

  •    标准写法1.0
       成员变量:使用private关键字修饰
       成员方法:针对每一个成员变量提供对应公共的setXxx()和getXxx()
       自动生成get和set方法alt + inser
    
  •  一个标准类的写法2.0版本
      成员变量:使用private关键字修饰
      成员方法:针对每一个成员变量都提供getXxx()和setXxx(),其中参数需要见明知意,需要使用this关键字辅助
      show()方法:展示当前对象的所有成员变量值
    
  •   一个标准类3.0写法
      成员变量:私有化
      构造方法:一个无参,一个所有参数
      成员方法:setXxx()和getXxx()
      show方法:展示对象所有成员变量值
    
  • 关键字 this

    * java提供一个关键字:this
     this代表的是调用该方法的当前对象【谁调用了该方法,this就代表那个对象】
     this: 代表的是调用当前方法的对象
     this可以使用对象中的成员变量,成员方法,构造方法
    
  • 构造方法

      * jvm在编译一个类的时候,若该类没有自己编写的构造方法的话,会默认提供一个无参,空方法体的构造方法
       若我们自己提供了构造方法【无论是有参还是无参】,jvm都不会再提供了。
       构造方法也可以发生重载【在同一个类中,构造方法可以有多个】
    
  •    例题  (标准写法3.0)  
       定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试类Test2,进行测试。
       将长和宽定义成长方形的成员变量 
    
匿名对象,指的是没有名字的对象,只能用一次,后续无法继续使用该对象 点击查看代码
//定义一个教师类
class Teacher {
    public void fun2(){
        System.out.println("好好学习,天天向上!");
    }
}

class Demo2{
    //当你今后看到一个类作为方法的参数的时候,将来调用时需要传入该类的对象【或者该类的子类对象】
    public void method(Teacher t){ //Teacher t = new Teacher()
        t.fun2();
    }
}

public class TeacherDemo1 {
    public static void main(String[] args) {
        Demo2 d1 = new Demo2();
//        Teacher t1 = new Teacher();
        d1.method(new Teacher()); // new Teacher()

        //匿名对象,指的是没有名字的对象,只能用一次,后续无法继续使用该对象
//        d1.method(new Teacher());
    }
}

  • private关键字
    可以修饰成员变量,成员方法,构造方法
    在同一个类中,private关键字不起作用,相当于透明的,同一个类中被private关键字修饰的成员可以随意访问
    在其他类里我们需要通过get函数获取,通过set函数赋值,后期直接通过构造方法进行对参数的赋值,如果有另外的要求需要
    更改set函数
class Person {
    private String name;
    private int age;

    public String getName(){
        return name;
    }

    public void setName(String n){
        name = n;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int i) {
        if (i > 0 && i <= 130) {
            this.age = i;
        }else {
            System.out.println("输入的年龄不合实际!");
        }
    }

    private void fun1(){
        System.out.println("好好学习,天天向上!");
    }

    public void show1(){
        fun1();
    }
}

public class PersonDemo {
    public static void main(String[] args) {
        //创建一个Person类的对象
        Person p1 = new Person();
//        System.out.println("姓名:" + p1.name);
//        System.out.println("年龄:" + p1.age);
        System.out.println("姓名:" + p1.getName());
        System.out.println("年龄:" + p1.getAge());
        System.out.println("-------------------------");
//        p1.name = "江川";
//        p1.age = 1800;
        p1.setAge(1800);
        p1.setName("江川");
//        System.out.println("姓名:" + p1.name);
//        System.out.println("年龄:" + p1.age);
        System.out.println("姓名:" + p1.getName());
        System.out.println("年龄:" + p1.getAge());
        System.out.println("------------------------");
//        p1.fun1();
        p1.show1();
    }
}
  • 关键字:this

    变量查找规则:就近原则
    先在方法中查找变量,若找到就使用
    若方法中没有该变量,去成员变量的位置上查找
    如果没有this关键字,则无法调用set函数里的参数

public class Student {
    // 成员变量
    private String id;
//    private String name;
//    private int age;

    //变量查找规则:就近原则
    //先在方法中查找变量,若找到就使用
    //若方法中没有该变量,去成员变量的位置上查找    
public void setId(String id){
//        id = id;
        //我们的本意是将传进来的id赋值给成员变量的id
        //java提供一个关键字:this
        //this代表的是调用该方法的当前对象【谁调用了该方法,this就代表那个对象】
        this.id = id;
    }

    public String getId(){
        return id;
    }

    //自动生成get和set方法alt + insert

}

class Demo1{
    public static void main(String[] args) {
        //创建一个学生对象
       Student s1 = new Student();

        System.out.println("学号:"+s1.getId());
        s1.setId("sj1001");
        System.out.println("学号:"+s1.getId());
    }
}
  • 标准写法1.0代码演示
class Person {
    private String name;
    private int age;

    public String getName(){
        return name;
    }

    public void setName(String n){
        name = n;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int i) {
        if (i > 0 && i <= 130) {
            age = i;
        }else {
            System.out.println("输入的年龄不合实际!");
        }
    }

    private void fun1(){
        System.out.println("好好学习,天天向上!");
    }

    public void show1(){
        fun1();
    }
}

public class PersonDemo {
    public static void main(String[] args) {
        //创建一个Person类的对象
        Person p1 = new Person();
//        System.out.println("姓名:" + p1.name);
//        System.out.println("年龄:" + p1.age);
//因为是该类私有的无法直接调用,需要通过getname()方法来调用,
//且构造方法是无参的,默认姓名为null,age为0
        System.out.println("姓名:" + p1.getName());
        System.out.println("年龄:" + p1.getAge());
        System.out.println("-------------------------");
//        p1.name = "江川";
//        p1.age = 1800;
//setName的作用是赋值后期可直接通过含参的构造方法进行赋值
        p1.setAge(1800);
        p1.setName("江川");

        System.out.println("姓名:" + p1.getName());
        System.out.println("年龄:" + p1.getAge());
        System.out.println("------------------------");
//        p1.fun1();
//无法访问,因为 这个方法是私有的
//但是我们可以通过媒介show1()方法来调用
        p1.show1();

  • 标准写法2.0演示
public class Student2 {
    private String name;
    private int age;
    private String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void show() {
        System.out.println("姓名:" + this.name + ", 年龄:" + this.age + ", 性别:" + this.gender);
    }
}

class Demo02{
    public static void main(String[] args) {
        Student2 s1 = new Student2();

        s1.setName("江川");
        s1.setAge(18);
        s1.setGender("男");
        s1.show();
    }
}
  • 标准写法3.0演示
public class Student4 {
    private String id;
    private String name;
    private int age;

    Student4(){

    }

    Student4(String id,String name,int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("学号:" + id + ", 姓名:" + name + ", 年龄:" + age);
    }
}

class Demo4 {
    public static void main(String[] args) {
        //通过无参的构造方法创建对象,使用setXxx对成员变量赋值
//        Student4 s1 = new Student4();
//        s1.setName("江川");
//        s1.setId("1001");
//        s1.setAge(18);
//        s1.show();

        //直接通过有参的构造方法对成员变量进行赋值
        Student4 s2 = new Student4("1002","江川",19);
        s2.show();


    }
}

构造方法

public class Student3 {
    Student3(){
        System.out.println("这是无参的构造方法");
    }

    Student3(String s) {
        System.out.println("这是有参的构造方法:" + s);
    }
}

class Demo3 {
    public static void main(String[] args) {
        Student3 s = new Student3("数加科技");
        Student3 s2 = new Student3();

    }
}

例题: 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试类Test2,进行测试。
将长和宽定义成长方形的成员变量

class Rectangle {
    private int length;
    private int width;

    public Rectangle() {
    }

    public Rectangle(int length, int width) {
        this.length = length;
        this.width = width;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getPerimeter() {
        return (length + width) * 2;
    }

    public int getSize() {
        return length * width;
    }

    public void show() {
        System.out.println("周长为:" + getPerimeter() + ", 面积为:" + getSize());
    }
}

public class Test {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle(10, 5);
        rectangle.show();
    }
}