当前位置: 首页 > article >正文

java面向对象(详细讲解)

第一章 类和对象

1.面向对象的介绍

1.面向过程:自己的事情自己做,代表语言c语言

2.面向对象:自己的事情别人做,代表语言java

3.为啥要使用面向对象思想编程:很多功能别人给我们实现好了,我们只需要拿过来用即可,减少了我们的代码量

4.什么时候使用面向对象思想编程:

        调用别人的功能时

        在一个类中想使用别的类中的成员时,就使用面向对象思想编程

        至于我们使用的功能人家怎么实现的,我们不需要关心,只需要知道怎么使用即可

5.怎么使用面向对象思想编程:

        new,new完点呀  ->点代表的是调用

        特殊:如果调用的成员带static关键字,我们不需要new ,直接类名点即可

public class Demo01Object {
    public static void main(String[] args) {
        /*
            我们想在Demo01Object类中使用Scanner类中的next()方法实现键盘录入字符串
            那么我们就需要使用面向对象思想编程

            对象:Scanner  ->  new出来的
            对象实现好的功能:next()

            我们只需要知道找来Scanner对象,就可以调用这个对象中实现好的next()方法
            至于next()方法怎么实现的,我们不需要关心
        * */
        Scanner sc = new Scanner(System.in);
        String data1 = sc.next();
        System.out.println("data = " + data1);

        System.out.println("=====================================");

        /*
           我们想在Demo01Object类中使用Random类中的nextInt()方法实现随机整数
           那么我们就需要使用面向对象思想编程

           对象:Random  ->  new出来的
           对象实现好的功能:nextInt()

            我们只需要知道找来Random对象,就可以调用这个对象中实现好的nextInt()方法
            至于nextInt()方法怎么实现的,我们不需要关心
        * */

        Random rd = new Random();
        int data2 = rd.nextInt();
        System.out.println(data2);

        System.out.println("=======================================");

        int[] arr = {1,2,3,4};
//        System.out.print("[");
//        for (int i=0; i<arr.length;i++){
//            if (i<arr.length-1){
//                System.out.print(arr[i]+",");
//            }else{
//                System.out.print(arr[i]+"]");
//            }
//        }

        /*
            Arrays就是我们找来的对象
            toString就是此对象中实现好的功能
            我们只需要调用,怎么实现我们并不关心
        * */
        System.out.println(Arrays.toString(arr));

    }
}

2.类和对象

2.1类(实体类)——class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

        世间万物的分类:比如,人类 狗类 猫类  鼠标类

组成部分:

        1.属性(成员变量)这一类事物有啥

                a.定义位置:类中方法外

                b.作用范围:作用于当前类

                c.定义格式:数据类型 变量名

                d.默认值:

                        整数:0

                        小数:0.0

                        字符:‘\u0000’

                        布尔:false

                        引用:null

        2.行为(成员方法)这一类事物都能干啥

                只需要将模块六所学的方法 中的static干掉,其他的都一样

描述人类:

public class person {
    //属性   ->成员变量
    String name;
    int age;
    
    //行为   ->成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }
    
    public void drink(){
        System.out.println("人要喝水");
    }
}

描述动物类:

public class Animal {
    String kind;//品种
    String color;//颜色
    
    public void eat(){
        System.out.println("动物也要吃饭");
    }
    
    public void sleep(){
        System.out.println("动物也要睡觉");
    }
}

描述手机类:

public class Phone {
    String kind;//型号
    String brand;//品牌
    String color;//颜色
    int price;//价格
    
    public void call(String name){
        System.out.println("给name打电话");
    }
    
    public String message(){
        return "给鹭卓发短信";
    }
}

2.2对象

1.概述:一类事物的具体体现

2.使用:

        a.导包:import   包名.类名

                如果两个类在同一个包下,则不需要导包

                如果两个类不在同一个包下,想要使用对方的成员则需要导包

                特殊包:java.lang   ->使用lang包下的类不需要导包,比如字符串

                友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下

        b.创建对象:想要使用哪个类中的成员,就new哪个类的对象

        类名  对象名  =  new   类名()   ->比如:Person person = new Person();

        c.调用成员(成员变量,成员方法):   ->想要使用哪个类中的成员,就用哪个类的对象去点哪个成员

        对象名.成员变量名 =值;

        对象名.方法名()   ->调用的是无参无返回值方法

        对象名.方法名(实参)   ->调用的是有参无返回值方法

        数据类型  变量名 = 对象名.方法名()   ->调用的是无参有返回值方法

        数据类型  变量名 = 对象名.方法名(实参)   ->调用的是有参有返回值方法

public class Person {
    //属性   ->成员变量
    String name;
    int age;

    //行为   ->成员方法
    public void eat(){
        System.out.println("人要吃饭");
    }

    public void drink(){
        System.out.println("人要喝水");
    }
}
public class Demo01Person {
    public static void main(String[] args) {
        Person person = new Person();
        person.name = "路卓豪";
        person.age = 29;

        System.out.println(person.name+"   "+person.age);

        person.eat();
        person.drink();
    }
}

2.3练习

需求:用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

手机类:

public class Phone {
    String kind;//型号
    String brand;//品牌
    String color;//颜色
    int price;//价格

    public void call(String name){
        System.out.println("给"+name+"打电话");
    }

    public String message(){
        return "给鹭卓发短信";
    }
}

测试类:

public class Demo02Phone {
    public static void main(String[] args) {
        /*
        用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能
        * */
        Phone pc = new Phone();
        //给属性赋值
        pc.brand = "小米";
        pc.color = "橙色";
        pc.price = 2999;

        System.out.println(pc.brand);
        System.out.println(pc.color);
        System.out.println(pc.price);

        //调用其功能
        pc.call("十个勤天");
        String mess = pc.message();
        System.out.println("message = " + mess);
    }
}

3.匿名对象的使用

1.int i =10;

        int:指的是数据类型

        i:指的是变量名

        等号右边的10是真正的数据

2.Person p = new Person();

        等号左边的Person是对象类型

        p:对象名

        等号右边的new Person():真正的数据,一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象:其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

        new 对象().成员

3.注意:

        如果我们只想单纯的调用一个方法,让方法执行,我们可以考虑使用匿名对象

        但是如果涉及到赋值,千万不要使用匿名对象

public class Person {
    String name;
    public void eat(){
        System.out.println("人要吃饭");
    }
}
public class Demo01Person {
    public static void main(String[] args) {
        //原始方式
        Person p = new Person();
        p.name = "十个勤天";
        System.out.println(p.name);
        p.eat();

        System.out.println("=============================");

        //匿名对象
        new Person().eat();
        new Person().name = "做大做强";
        System.out.println(new Person().name);//null
    }
}

第二章 成员变量和局部变量的区别

1.定义位置不同(重点)

1.成员变量:类中方法外

2.局部变量:定义在方法之中或者参数位置

2.初始化值不同(重点)

1.成员变量有默认值,所以不用手动赋值就可以直接使用

2.局部变量没有默认值,所以需要先手动赋值再使用

3.作用范围不同(重点)

1.成员变量作用于整个类

2.局部变量只作用于自己所在的方法,其他方法使不了

4.内存位置不同(了解)

1.成员变量在堆中,跟着对象走

2.局部变量在栈中,跟着方法走

5.生命周期不同(了解)

1.成员变量随着对象的创建而产生,随着对象的消失而消失

2.局部变量随着方法的调用而产生,随着方法的调用完毕而消失

public class Person {
    String name;//成员变量
    public void eat(){
        int i =10;//局部变量
        System.out.println(i);
        System.out.println(name);//成员变量不用手动赋值可以直接使用
    }
    public void drink(){
        int j;
        //System.out.println(j);//局部变量需要手动赋值再使用
        System.out.println(name);//成员变量作用于整个类
        System.out.println(i);//i是aet()方法的局部变量,在drink()中无法使用
    }
}

第三章 练习

需求:定义一个类MyData,属性有   year month  day

        在定义一个类Citizen(公民类),属性有   name(String类型)   birthday(MyData 类型)   idCard(String类型)   为这三个属性赋值,然后将值取出来

public class MyData {
    /*
        定义一个类MyData,属性有year month day

        在定义一个类Citizen(公民类),属性有name(String类型) birthday(MyData 类型) idCard(String类型) 为这三个属性赋值,然后将值取出来
    * */
    int year;
    int month;
    int day;

}
public class Citizen {
    String name;
    MyData birthday;
//    MyData birthday = new MyData();
    String idCard;

}
public class Test {
    public static void main(String[] args) {
        MyData myData = new MyData();
        myData.year = 2025;
        myData.month = 3;
        myData.day = 22;

        Citizen citizen = new Citizen();
        citizen.name = "十个勤天";//默认值null
        /*
            生日  MyData类型

            MyData属于自定义类型(引用数据类型)
            这种类型要操作之前必须要赋值
            怎么赋值:需要new对象赋值
        * */
        citizen.birthday = new MyData();//默认值null
        citizen.idCard = "后陡门58号";//默认值null
        /*
            citizen.birthday获取的是MyData对象
            再去点year获取的是MyData对象中的year

            链式调用
        * */
        citizen.birthday.year = 2000;
        citizen.birthday.month = 2;
        citizen.birthday.day = 17;

        System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard);
    }
}

给自定义(引用)的类型赋值,需要new对象,String比较特殊可以直接使用


http://www.kler.cn/a/573783.html

相关文章:

  • 记录linux安装mysql后链接不上的解决方法
  • 期权帮|2025年股指期货最新规则是什么?
  • 2025.3.3总结
  • android接入rocketmq
  • FastGPT 源码:混合检索调用链路
  • PHP fastadmin 学习
  • [杂学笔记]HTTP1.0和HTTP1.1区别、socket系列接口与TCP协议、传输长数据的时候考虑网络问题、慢查询如何优化、C++的垃圾回收机制
  • MQ保证消息的顺序性
  • 如何在Windows下离线部署DeepSeek并以WebApi形式调用
  • Golang的代码注释规范指南
  • Macro Bullion:国际金价回调态势下,金市表现与金银交易建议
  • 数据结构与算法:回溯(下):子集相关力扣题(78.子集、90.子集Ⅱ、491.非递减子序列)、排列相关力扣题(46.全排列、47.全排列Ⅱ)
  • es如何进行refresh?
  • 鸿蒙NEXT开发-端云一体化开发
  • Python 爬取唐诗宋词三百首
  • 由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务
  • 闭包:前端开发的“记忆胶囊“与Vue框架的“隐身特工“
  • ANI AGI ASI的区别
  • python学习第三天
  • C# Enumerable类 之 数据(类型)转换