Java学习笔记(11)--面向对象基础

目录

封装

原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

 封装的好处:

private关键字

举例:

this关键字

成员变量和局部变量

举例:

构造方法

 空参构造方法

带参构造方法

注意事项


封装

封装是面向对象三大特征之一,其他两大特征分别为:继承、多态。

封装告诉我们如何正确设计对象的属性和方法。

原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

举例:


1.

Q:人画圆,圆是自己画的还是人画的?

A:圆自己画的

所以画圆这个方法应该在圆这个对象里

2.

Q:人关门,门是自己关的还是人关的?

A:门自己关的

所以关门这个方法应该在门这个对象里

 封装的好处:

Java中有已经写好的一些对象以及他们的方法,可以直接用。

比如:

public class StringTest {
    public static void main(String[] args) {
        //先定义一个字符串
        String s = "woshiyigebianchengxinshou";
        //调用方法
        int len = s.length();
        System.out.println(len);

        String ss = s.toUpperCase();
        System.out.println(ss);
    }
}

private关键字

public的值可以更改,不太安全,而且没有对输入做规定,可能有奇怪的值。可以用private修饰。

  • 是一个权限修饰符
  • 可以修饰成员(成员变量·和成员方法)
  • 被private修饰的成员只能在本类中才能访问

 针对每一个私有化的变量成员,如果需要被其他类使用,都要提供get 和 set 方法

  • “setXxx(参数)” 方法:给成员变量赋值,方法用public修饰
  • "getXxx()" 方法:对外提供成员变量的值(用于获取成员变量的值),方法用public修饰

举例:

GirlFriend类:

public class GirlFriend {
    //属性
    private String name;
    private int age;
    private String gender;

    //作用:给成员变量那么进行赋值
    public void setName(String n){
        name = n;
    }
    //作用:对外提供name属性,不用接收数据,直接把name给外面。
    public String getName(){
        return name;
    }
    //age
    //setAge:给成员变量age进行赋值的。
    //getAge:对外提供成员变量age的值
    public void setAge(int a){
        int i = 50;
        if(a >= 18 && a<=50){
            age = a;
        }else{
            System.out.println("非法参数");
        }
    }

    public int getAge(){
        return age;
    }

    //gender
    public void setGender(String g){
        gender = g;
    }
    public String getGender(){
        return gender;
    }

    //行为
    public void sleep(){
        System.out.println("牛朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");

    }
}

GirlFriendTest类: 

package com.test1;

public class GirlFriendTest {
    public static void main(String[] args) {
        //创建女朋友的对象
        GirlFriend gf1 = new GirlFriend();
        //赋值
        gf1.setName("小红");
        gf1.setAge(18);
        gf1.setGender("女");

//        String name = gf1.getName();
//        int age = gf1.getAge();
//        String gender = gf1.getGender();

        System.out.println(gf1.getName());
        System.out.println(gf1.getAge());
        System.out.println(gf1.getGender());

        gf1.eat();
        gf1.sleep();

    }
}

this关键字

两个地方用同一个单词表示时,会发生一些问题,但是换个名字又不合适,这种情况应该怎么办呢?

成员变量和局部变量

当成员变量和局部变量重复时,无特殊说明, 采用就近原则,用距离近的那个。

如果局部变量距离近,但是想要用成员变量可以用this关键字来区分。

举例:

package com.test1;

public class GirlFriend {
    //属性
    private String name;
    private int age;
    private String gender;

    //作用:给成员变量那么进行赋值
    public void setName(String name){
        //局部变量表示测试类中调用方法传递过来的数据
        //等号左边则表示成员位置的name
        this.name = name;
    }
    //作用:对外提供name属性,不用接收数据,直接把name给外面。
    public String getName(){
        return name;
    }
    //age
    //setAge:给成员变量age进行赋值的。
    //getAge:对外提供成员变量age的值
    public void setAge(int age){
        int i = 50;
        if(age >= 18 && age<=50){
            this.age = age;
        }else{
            System.out.println("非法参数");
        }
    }
    public int getAge(){
        return age;
    }

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


    //行为
    public void sleep(){
        System.out.println("牛朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");

    }
}

构造方法

作用:在创建变量时,由虚拟机自动调用的,给成员变量初始化进行赋值。

一般用于写代码时属性已知的情况

格式:

public class student {
    修饰符 类名(参数) {
        方法体;
    }
}

特点:

  • 方法名与类名相同,大小写也要一致
  • 没有返回值类型,连void都没
  • 没有具体返回值(不能用return带回结果数据)

 空参构造方法

  • 一般是空的,什么都不写
  • 初始化对象时,成员变量的数据均采用默认值

如果自己没写任何构造方法,虚拟机会自动帮我们加一个空参构造方法 

public Student(){
        System.out.println("看看我执行了没");
    }

用以下代码调用:

Student s = new Student();

带参构造方法

  • 在初始化对象的时候,同时可以为对象进行赋值
public Student(String name, int age){
        this.name = name;
        this.age = age;
    }

用以下代码调用:

Student s = new Student("zhangsan",23);

执行时机:

  1. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  2. 每创建一次对象,就会调用一次构造方法

注意事项

1.构造方法的定义

  • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
  • 如果定义了,系统将不再提供默认空参构造方法

2.构造方法的重载

  • 带参构造方法,和无餐构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载

3.使用方式

  • 为了代码可阅读性,最好都手动写
  • 看具体参数情况决定使用哪种一种 

4.误区

  • “构造方法就是用来创建对象的”这句话是错的
  • 创建对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化的。

你可能感兴趣的:(Java学习笔记,学习,笔记,java)