黑马程序员--java基础之类与对象

本文深入浅出地介绍了面向对象的基本概念,包括面向过程与面向对象的区别、类与对象的定义及使用、构造方法的作用与特点、封装的概念及其在代码安全性和复用性上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——- android培训java培训、期待与您交流! ———-

面向对象:就是以对象为视角来看待世界或者来阐述的一种思维方式。
面向过程:强调的是过程、强调的是方法
面向对象:强调的是拥有这个方法的对象。

    鸡蛋灌饼:
        面向过程:
            1.学习鸡蛋灌饼的制作方法
            2.麦面、鸡蛋、油、设备
            3.和面、制作鸡蛋灌饼
            4.吃
        面向对象:
            1.找一个卖鸡蛋灌饼的大妈
            2.给人家钱
            3.吃
    洗衣服:
        面向过程:
            1.买个洗衣机
            2.买洗衣粉
            3.加水、加洗衣服、把衣服放进去
            4.打开洗衣机,设置时间
            5.晾衣服
            6.收衣服
        面向对象:
            1.找一个会洗衣服的对象
/**
*
*   自定义一个 汽车类
*/
class Car {
    //属性:
    //品牌,价格
    //品牌
    String brand;
    //价格
    double price;

    //方法
    //跑的方法
    public void run(){
        System.out.println("哎呦,我怎么跑这快……");
    }
}


//汽车测试类
class CarTest {
    public static void main(String[] args){
        /*
        //创建一个汽车对象
        Car c = new Car();
        //给c的品牌赋值
        c.brand = "劳斯莱斯幻影"; 
        System.out.println(c.brand);
        System.out.println(c.price);


        //创建一个汽车对象‘
        Car c1 = new Car();
        //让这辆车的品牌是“奔驰”
        c1.brand = "奔驰";

        //创建第二辆汽车
        Car c2 = new Car();
        //第二辆车的价格是“40”
        c2.price = 40;

        System.out.println(c1.price);
        System.out.println(c2.brand);

        */


        //创建一个汽车对象
        Car c1 = new Car(); 
        Car c2 = c1;
        c2.brand = "宝马";
        //c1.brand;
        System.out.println(c1.brand);
    }
}
面向对象的特点:
1.把事物简单化
2.更加符合人们的思维习惯
3.把我们从执行者转换为指挥者

面向过程:
    1.冰箱打开()
    2.大象进去()
    3.冰箱关闭()
面向对象:
    1.冰箱把门打开
    2.指挥大象进入冰箱

在方法中的变量称之为:局部变量
在方法之外,类之中的变量:成员变量

属性:就是放在类之中方法之外的变量。
方法:
        今天我们所有的方法(除了main方法),都不写static
//定义一个美女类
class Beauty {
    //属性(成员变量)
    //姓名
    String name;
    //年龄
    int age;
    //性别
    String sex;

    //方法
    //撒娇、卖萌
    //撒娇
    public void coquetry(){
        System.out.println("哎呀,讨厌……");
    }
    //卖萌
    public void cute(){
        System.out.println("么么哒");
    }
}
测试类:一般用来测试别的类的类叫做测试类。测试类一般包含main方法

操作类,必须现有类的对象才能操作。操作类本质上操作的是类的对象。
创建对象:
    格式:
        类 对象名 = new 类名();
        类 对象名:叫做对象的声明。对象的引用。
        new 类名();这一部分才是真正的创建对象。
class BeautyTest {
    public static void main(String[] args) {
        //创建一个美女对象
        Beauty bea = new Beauty();

        //对对象进行操作
        //bea
        //操作方法
        bea.coquetry();  //让bea这个美女,执行撒娇方法。
        //美女去卖萌
        bea.cute();

        //属性的使用
        //使用名字
        System.out.println(bea.name);
        //使用年龄
        System.out.println(bea.age);
        //改名字
        bea.name = "如花";

        System.out.println(bea.name);
    }
}
成员变量和局部变量的区别:
    所在位置:
        成员变量:方法外部、类的内部。
        局部变量:方法内部。
    使用范围:
        成员变量:在类的内部任何地方都可以被访问。
        局部变量:只能在他所在的方法中访问。
    默认值:
        成员变量:有默认值
        局部变量:没有默认值
    所在位置:
        成员变量:在堆中存储,和对象放在一块。
        局部变量:存储在栈中。
    生命周期:
        成员变量:随着对象的创建而创建,随着对象的消失而消失。  //对象变量
        局部变量:随着方法的调用而创建,随着方法的消失而消失。
class ChengYuanBianLiang {

    //定义一个int类型的变量
    int a;

    public void test(){
        int b;
        System.out.println(b);
    }

    public void show(){
        System.out.println(a);  
    }


}

class ChengYuanBianLiangTest {
    //主方法
    public static void main(String[] args){
        //创建对象
        ChengYuanBianLiang cybl = new ChengYuanBianLiang();
        //System.out.println(cybl.a);   
        cybl.show();
    }
}
构造方法:
    格式:
        访问修饰符 类名(){
        }

        注意:
            1.不能有返回值类型。
            2.方法名和类名完全相同

    构造方法注意事项:
        1.当我们的类中不写构造方法时,系统会默认给我们添加一个无参构造方法。
        2.构造方法也可以实现方法重载。也就是说构造方法也可以有多个。
        3.构造方法在创建对象时调用。
        4.构造方法不允许手动调用,只能在创建对象时由Java虚拟机自动调用。
        5.当我们写了构造方法之后,系统就不再默认给我们添加无参构造方法了。


    构造方法的作用:一般用来对属性进行赋值(初始化)


普通方法完整格式:
    访问修饰符 返回值类型 方法名(参数列表){
        方法体
        return 值
    }
class PersonTest {
    public static void main(String[] args) {
        //创建一个对象
        //Person p = new Person();
        //调用方法
        //p.say();
        Person p1 = new Person("你好世界");
        System.out.println(p1.name);


    }
}

//自定义一个人类。
class Person {

    String name;

    public void say(){
        System.out.println("你好");
    }

    /*
    public Person(){
        System.out.println("无参构造方法");
    }
    */

    public Person(String s){
        //System.out.println("有参构造方法");

        name = s;
    }


}
private:私有的。可以修饰属性,可以修饰方法。
被private修饰的属性或方法在类的外部都不能被访问。

封装:把我们不想让别人看到或用到的东西加以限制,不让别人随意使用,这种思想就是封装。
    封装的体现:
        1.属性私有化。
        2.方法也是封装。
    封装的好处:
        1.提高了代码的安全性。
        2.提高了代码的复用性,可维护性。
        3.隐藏了实现细节。
class PersonTest1 {
    public static void main(String[] args) {
        //创建一个人的对象
        Person p = new Person("张曼玉");

        //System.out.println(p.name);

        //p.name = "张妞妞";

        //System.out.println(p.name);

        //p.say();


    }
}

//自定义一个人类。
class Person {  

    private String name;

    public void say(){
        System.out.println("你好");
    }

    public Person(String s){
        name = s;
    }
}
使用封装的思想写一个学生类。
    潜规则:
        对于设置属性的方法,一般都叫做:“set属性名()”
        对于获取属性的方法,一般都叫做: “get属性名()”
class Student {
    //属性
    //姓名
    private String name;
    //年龄
    private int age;

    //写一个用来改名字的方法
    public void setName(String s){
        /*
            if(s 很难听){
                我就不允许你給我改名字
            }
        */
        name = s;
    }


    //定义一个获取名字的方法
    public String getName(){
        return name;
    }


    //设置年龄的方法
    public void setAge(int i){
        age = i;
    }

    //获取年龄的方法
    public int getAge(){
        return age;
    }



    //方法,study方法
    public void study(){
        System.out.println("学习方法");
    }
}

class StudentDemo {
    public static void main(String[] args){
        //创建一个学生对象
        Student s = new Student();
        //该这个人的名字
        s.setName("张妞妞");

        //String str = s.getName();
        //System.out.println(str);
        System.out.println(s.getName());
    }
}
一个Java文件中可以有多个类。文件名必须和main方法所在的类的类名保持一致。

类名 如花 = new 类名();
调用:
    调用属性:如花.name;
    调用方法:如花.study();
class Student {
    //属性
    //姓名、年龄
    //姓名
    String name;
    //年龄
    int age;


    //方法。
    //学习、吃饭
    //学习
    public void study(){
        System.out.println("正在上课");
    }
    //吃饭
    public void eat(){
        System.out.println("一会再去吃饭");
    }
}

//写一个学生的测试类
class StudentTest {
    public static void main(String[] args){
        //创建学生对象
        Student s = new Student();

        //调用学生的学习方法
        s.study();
        //调用学生的姓名属性
        System.out.println(s.name);
    }
}
标准版的教师类:
    Java中的标准类:
        属性、方法
        属性必须都封装
        构造方法必须有2个,一个无参,一个有参
class Teacher {
    //属性
    //姓名
    private String name;
    //年龄
    private int age;

    //构造方法
    //无参构造
    public Teacher(){}
    //有参构造方法
    public Teacher(String n,int a){
        name = n;
        age = a;
    }

    //设置名字的方法
    public void setName(String n){
        name = n;
    }
    //获取名字的方法
    public String getName(){
        return name;
    }

    //设置年龄的方法
    public void setAge(int a){
        age = a;
    }

    //获取年龄的方法
    public int getAge(){
        return age;
    }


    //方法
    //教学方法
    public void teach(){
        System.out.println("上课");
    }
}
匿名对象:就是没有名字的对象
    匿名对象可以调用方法,也可以调用属性。

    匿名对象只能使用一次。
class NiMingDemo {
    public static void main(String[] args) {
        //创建一个汽车对象;
        //Car c = new Car();
        //c.run();
        //匿名对象调用方法
        //new Car().run();
        //匿名对象调用属性
        //System.out.println(new Car().price);

        new Car().brand = "奥拓";
        new Car().price = 10;
        System.out.println(new Car().brand);

    }
}

class Car {
    //品牌
    String brand;
    //价格
    int price;

    //run方法
    public void run(){
        System.out.println("汽车在跑");
    }
}
咱们自定义的类,也是数据类型,也可以作为参数。
匿名对象的应用场景:
    1.可以作为参数进行传递
    2.当我们只是使用一次时,我们就可以使用匿名对象。
class NiMingDemo2 {
    public static void main(String[] args) {
        //创建一个Car对象
        Car c = new Car();
        //把c作为参数进行传递
        test(c);

        /*
        Car c1 = new Car();
        test(c1);

        Car c2 = new Car();
        test(c2);

        Car c3 = new Car();
        test(c3);


        test(new Car());

        test(new Car());

        test(new Car());


        Car c1 = new Car();
        c1.run();
        */

         new Car().run();

    }

    public static void test(Car c){
        //只要进入这个方法,S这辆车就必须有了
        c.run();

        //打印一下c的品牌
        System.out.println(c.brand);
    }
}


class Car {
    //品牌
    String brand;
    //价格
    int price;

    //run方法
    public void run(){
        System.out.println("汽车在跑");
    }
}

总结

    构造方法和普通方法的区别:
方法名:
    构造方法:方法名必须和类名保持一致。
    普通方法:见名知意
    返回值:
    构造方法:没有返回值。连void 都没有
    普通方法:正常的返回值
方法调用:
    构造方法:我们自己不能调用,只能在创建对象时,由Java虚拟机来调用。
    普通方法:方法名(参数列表);
方法体:
    构造方法:可以写任何东西,但是一般用来给属性赋值(初始化)
    普通方法:任何代码都可以。

构造方法:
    如果我们一个都不写,则系统会给我们添加一个默认的。
    如果我们写了,不管写的是什么构造方法,系统就不再给我们添加默认的构造方法了。

面向对象概述:
面向对象指的就是,以对象为视角来阐述世界的思维方式。
OO:指的就是面向对象
OOP:面向对象编程
对象:
万物皆对象。

面向对象特点:
1.把事物简单化
2.更加符合人的思维习惯。
3.把我们从执行者变成指挥者。

面向对象三大特征:封装、继承、多态。

类的定义:
主要定义类的属性和方法。
    属性必须放在方法之外,类之内。
    方法:今天的方法没有static,其他和普通方法一样。

对象的创建和使用:
创建对象格式:
    类名 对象名 = new 类名();
        类名 对象名:叫做对象的声明也叫对象的引用。
        new 类名();才是真正的对象。
对象的使用:
    1.使用属性:
        对象名.属性;
    2.使用方法:
        对象名.方法();

成员变量和局部变量:
定义位置:
    成员变量:在方法之外,类之内
    局部变量:在方法内部。
使用范围:
    成员变量:在整个类中都可以访问。
    局部变量:只能在局部变量所在的方法内部访问。
默认值:
    成员变量:有默认值
    局部变量:没有默认值
生命周期:
    成员变量:随着对象的创建而创建,随着对象的消失而消失。
    局部变量:随着方法的调用而出现,随着方法的结束而消失。
存储位置:
    成员变量:在堆中,和对象在一块
    局部变量:在栈中。


匿名对象:就是没有名字的对象。
注意:“
    1.匿名对象只能使用一次。
    2.匿名对象可以作为参数传递。

构造函数:
1.方法名必须和类名保持一致。
2.构造方法没有返回值。连void都没有
3.如果我们自己不写构造方法,则系统会自动给我们添加一个默认的无参构造方法。
    如果我们写了任何构造方法,系统不再给我们提供默认的构造方法了。
4.构造方法一般用来对属性进行初始化。
5.构造方法不能手动调用,只能在创建对象时,由JVM自动调用。

private(私有)关键字:
可以修饰方法,可以修饰属性
当priavte修饰方法或属性时,属性和方法都不能在类的外部被访问。
封装:
对我们不想让被人知道或者用到的东西加以限制,限制别人的访问,这种思想就是封装。
    属性的私有化就是一种封装。
    方法也是一种封装。

属性封装:
1.把属性私有化。
2.给每个属性都提供两个方法。
    一个用来获取属性的值:"get属性名()"
    一个用来设置属性的值:"set属性名()"

——- android培训java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值