javaDay6

面向对象思想

    面向对象思想:
            面向对象是基于面向过程的一种编程思想。
            
            面向过程:强调的是每一个功能的步骤
            面向对象:强调的是对象,然后由对象调用功能
            
    面向对象特点:
            A:是一种符合我们思考习惯的思想
            B:可以将复杂的事情简单化
            C:让我们从执行者变成了指挥者
            
    举例:洗衣服
            面向过程:把衣服脱下来--找一个盆--放水--放洗衣粉--浸泡--揉搓-清洗衣服-脱水-晾晒
            面向对象:把衣服脱下来--打开全自动洗衣机-放入衣服--启动-晾干

类是什么

我们通过以类来讲=将现实世界的事物描述出来

我们学习编程语言,其实就是为了把现实世界的实物模拟出来,实现信息化。

    我们是如何表示现实世界的事物呢?
            A:属性  就是事物的描述信息
            B:行为  就是食物能够做什么

    Java语言最基本的组成单位是类,所以,在后面的学习过程中,我们是通过类来体现事物的。

            举例:
                类    学生    (某类事物的统称)
                对象  张三同学(具体体现的个体)

类的定义


    类的定义:类是描述现实世界事物的
    事物
            属性
            行为
    类如何和事物如何对应?
            类:
                成员变量
                成员方法

    成员变量:和我们学过的变量的定义是一样的,有两个小区别。
                位置不同:类中,方法外
                初始值:成员变量不需要初始化值也可以使用,因为他有默认值

    成员方法:和我们学习的方法的定义是一样的,有一个小区别
                去掉了修饰符static关键字

类的使用

类的使用:
            使用一个类,其实就是使用该类的成员。(成员变量和成员方法)
        而我们要想使一个类的成员,就必须先拥有该类的对象。
        那么,我们如何拥有一个类的对象呢?
            创建对象就可以了
        我们如何创建对象呢?
            格式:
                类名 对象名 = new 类名();
        对象如何访问成员?
            成员变量:
                对象名.变量名
            成员方法:
                对象名.成员方法
 */

public class StudentTest {
    public static void main(String[] args) {
        //类名 对象名 = new 类名()
        Student s =new Student();
        //System.out.println(s);//com.itheima.Student@1b6d3586

        //使用成员变量
        System.out.println("姓名:"+s.name);
        System.out.println("年龄:"+s.age);
        System.out.println("-----------------");

        //更成员变量赋值
        s.name="李卫云";
        s.age=18;

        //再次使用成员变量
        System.out.println("姓名:"+s.name);
        System.out.println("年龄:"+s.age);
        System.out.println("-----------------");

        //调用成员方法
        s.study();
        s.eat();
    }
}

举例

/*
    手机类:
        成员变量:品牌,价格,颜色...
        成员方法:打电话、发短信...
*/

//定义类
public class Phone {
    //品牌
    String brand;
    //价格
    int price;
    //颜色
    String color;
    //打电话
    public void call (String name){
        System.out.println("给"+name+"打电话");
    }
    //发短信
    public void sendMessage(String name){
        System.out.println("给"+name+"发短信");
    }

}

对象

{
    public static void main(String[] args) {
        //创建对象
        Phone p =new Phone();

        //输出成员变量
        System.out.println("品牌:"+p.brand);//null
        System.out.println("价格:"+p.price);//0
        System.out.println("颜色:"+p.color);//null
        System.out.println("-----------------");

        //给成员变量赋值
        p.brand="华为";
        p.price=5999;
        p.color="棕色";
        //再次输出成员变量
        System.out.println("品牌:"+p.brand);
        System.out.println("价格:"+p.price);
        System.out.println("颜色:"+p.color);
        System.out.println("-----------------");

        //成员方法、;‘、【、;、’‘
        p.call("林青霞");
        p.sendMessage("林青霞");

    }
}

成员变量和局部变量##

成员变量和局部变量
        A:在类中位置不同
            成员变量:在类中,方法外
            局部变量:在方法中或者方发声明上(形式参数)
        B:在内存中位置不同
            成员变量:在堆内存
            局部变量:在栈内存
        C:生命周期不同
            成员变量:随着对象的创建而存在,随着对象的消失而消失
            局部变量:随着方法的存在而存在,随着方法的消失完毕而消失
        D:初始化值不同
            成员变量:有默认值
            局部变量:没有默认值,必须先定义、赋值,再使用
 */
public class VariablesDemo {
	//成员变量
    int x;
    public void show() {
    	//局部变量
        int y=10;

        System.out.println(x);
        System.out.println(y);
    }
}

private

个人理解:为了解决数据安全,同时,也可以对数据是否有效进行判断。

  直接使用对象名访问成员变量,会存在数据安全问题
    这个时候,我们就应该思考能不能让外界不要直接访问成员变量?
    能
    如何实现呢?
            用private关键字
    private:
            是一个修饰符
            可以修饰成员变量,也可以修饰成员方法
            被private修饰的成员只能在本类中访问
    针对被private修饰的成员变量,我们会给出相应的getXxx()和setXxx()
    用于获取和设置成员变量的值,方法用public修饰

封装

封装概念 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界无法直接操作和修改。就像刚才说的年龄。

封装原则 将不需要对外界提供的内容都隐藏起来。 把属性隐藏,提供对应的getXxx(){}/setXxx(){}方法

好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性。

this

个人理解:解决局部变量与成员变量重复,可以有效地对成员变量赋值。

如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。

    我们有没有办法把局部变量的name赋值给成员变量的name呢?
    有

    有什么办法?
            用this关键字就可以解决这个问题。

    this:代表所在类的对象引用
            方法被那个对象引用,this就代表谁

    使用场景:
            就是用于解决成员变量被隐藏的问题。

举例

public class Student {
    private String name;
    private int age;

    public void setName(String name){//"林青霞"
        //name=
        this.name=name;//this 代表Student这个类,
        //this.name代表Student类中的name成员变量
        //= 号 后的name,采用就近原则,属于String name
    }
    public String getName(){
        return name;
    }

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

构造方法

      方法名和类名相同;
            没有返回值类型,连void都不能写;
            没有具体的返回值

    构造方法的注意事项:
            A:如果我们没有给出构造方法,系统将给出默认的无参构造方法供我们使用
            B:如果我们给出了有参构造方法,系统将不在提供默认的无参构造方法供我们使用。
                这个时候我们想使用无参构造方法,就必须自己提供
                推荐:自己给出无参构造方法
            C:构造方法也是可以重载的。

    给成员变量赋值的方法:
            A:通过setXXX()
            B:通过构造方法
            
举例
public class Student {
    private String name;
    private int age;

    public Student(){}

    public Student(String name){
        this.name=name;
    }

    public Student(int age){
        this.age=age;
    }
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }

    public void show(){
        System.out.println(name+"***"+age);
    }
    public void study(){
        System.out.println("学生要好好学习");
    }
}

标准的类代码写法和测试

标准类的代码写法和测试

成员变量
被private修饰
构造方法
无参构造方法
带参构造方法
成员方法
getXxx()
setXXX()
给成员变量赋值的方法
无参构造方法+setXXX()
带参构造方法
举例

public class StudentTest {
    public static void main(String[] args) {
        //无参构造方法+setXXX()
        Student s = new Student();
        s.setName("林青霞");
        s.setAge(30);
        System.out.println(s.getName()+"----"+s.getAge());

        //带参构造方法
        Student s2 =new Student("林青霞",30);
        System.out.println(s2.getName()+"----"+s2.getAge());


    }

}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页