• 从零开始学JAVA(05):面向对象编程--01


    一、class类

    • 是用来描述一类事物的
    • 可以在把内部定义任何数量的、不同类型的变量,作为这一类事物的属性。这种属性叫做成员变量
    • 有类名,类名必须和文件名一样
    • 就好像文件路径+文件名不能重复一样,一个java程序中相同名字的类只能有一个
    • 从数据类型的角度来看,类就是自己创建了一种新的数据类型。类也叫做
      自定义类型 ”。一个Java程序中不允许类同名。

     1、创建一个类

    1. // 一个类以 public class 开头,public class代表这个类是公共类,类名必须和文件名相同
    2. public class Student {
    3. // 类体中可以定义描述这个类的属性的变量,称之为 成员变量
    4. String name;
    5. String id;
    6. int ranking;
    7. double grade;
    8. }

    2、使用类

    • 使用new操作符可以创建某个类的一个实例,在java程序运行的时候,所有这些创建出来的实例都被java放在内存里一个叫做堆的地方 
    • 通过点操作符,给类的某个成员变量赋值
    1. public class School {
    2. public static void main(String[] args) {
    3. // 创建一个Student实例,用xiaoming指向它
    4. Student xiaoming = new Student();
    5. // 使用点操作符,给xiaoming指向的实例(对象)赋值
    6. xiaoming.name = "小明";
    7. xiaoming.id = "1";
    8. xiaoming.grade = 82.5;
    9. xiaoming.ranking = 10;
    10. Student xiaoHua = new Student();
    11. xiaoHua.name = "小华";
    12. xiaoHua.id = "2";
    13. xiaoHua.grade = 87.0;
    14. xiaoHua.ranking = 8;
    15. }
    16. }

    二、引用数据类型

    Java中的数据类型分为基本数据类型和引用数据类型

    引用里边实际上存放的是一个地址

    1、示例 

    1. public class School {
    2. public static void main(String[] args) {
    3. // 创建一个Student实例,用xiaoming指向它
    4. // xiaoming 是一个Student类型的引用,只能指向Student类型的实例
    5. // 引用数据类型变量包含两部分信息:类型和实例
    6. // 每一个引用数据类型的变量,都是指向某个类的一个实例,不同类型的引用在java里都是引用
    7. // 引用的类型信息在创建时就已经确定,可以通过给引用赋值,让其指向不同的实例
    8. // xiaoming 就是 Student类型,只能指向Student的实例
    9. // 给一个引用赋值,则两者的类型必须一样
    10. Student xiaoming = new Student();
    11. // 使用点操作符,给xiaoming指向的实例(对象)赋值
    12. xiaoming.name = "小明";
    13. xiaoming.id = "1";
    14. xiaoming.grade = 82.5;
    15. xiaoming.ranking = 10;
    16. Student xiaoHua = new Student();
    17. xiaoHua.name = "小华";
    18. xiaoHua.id = "2";
    19. xiaoHua.grade = 87.0;
    20. xiaoHua.ranking = 8;
    21. }
    22. }

    2、引用数据类型和基本数据类型

     (1)相同点

    • 都可以用来创建变量,可以赋值和使用值
    • 本身就是一个地址

    (2)不同点

    • 基本数据类型变量的值,就是地址对应的值。引用数据类型的值还是一个地址,需要通过“二级跳”找到实例
      System.out.println(xiaoming); // Student@6b71769e
    • 引用数据类型是java的一种内部类型,是对所有自定义类型和数组引用的统称,并非特指某种类型

    三、类、对象和引用的关系

    1、类和对象的关系

    • 类是对象的模板,对象是类的一个实例
    • 一个java程序中类名相同的类只能有一个,也就是类型不会重名
    • 一个类可以有很多对象
    • 一个对象只能根据一个类来创建

    2、引用和类以及对象的关系

    • 引用必须、只能是一个类的引用
    • 引用只能指向其所属的类型的类的对象
    • 相同类型的引用之间可以赋值
    • 只能通过指向一个对象的引用,来操作一个对象,比如访问某个成员变量

    四、重识数组

    数组是一种特殊的类

    • 数组的类名就是类型带上小括号
    • 同一类型的数组,每个数组对象的大小可以不一样。也就是每个数组对象占用的内存可以不一样,这点和类的对象不同。
    • 可以用引用指向类型相同大小不同的数组,因为它们属于同一种类型

    引用的数组

    • 可以把类名当成自定义类型,定义引用的数组,甚至多维数组

    • 数组变量其背后真身就是引用,数组类型就是一种特殊的类 
    • 数组的大小不决定数组的类型,数组的类型是只由元素类型决定的

    五、引用的缺省值:null

    • null是引用类型的缺省值
    • null 代表空,不存在
    • 引用类型的数组创建出来,初始值都是null
    • NullPointerException
    • 如果不确定,使用前需要先判断引用是不是空
    1. public class ArrayTest {
    2. public static void main(String[] args) {
    3. Student[] students = new Student[10];
    4. for (int i = 0; i < students.length; i++) {
    5. if (i % 2 == 0) {
    6. students[i] = new Student();
    7. }
    8. }
    9. for (int i = 0; i < students.length; i++) {
    10. System.out.println(students[i]);
    11. // System.out.println(students[i].grade); // 报错Exception in thread "main" java.lang.NullPointerException
    12. if (students[i] != null) {
    13. System.out.println(students[i].grade);
    14. }
    15. }
    16. }
    17. }

     六、像自定义类型一样使用类(随意组合)

    类就是一种自定义类型

    • 在类定义中可以使用类,创建类的引用
    • 在类定义中,甚至可以使用类自己的类创建应用
    • 引用类型的缺省值是null,一个类定义中如果有引用,创建出来的实例,其缺省值是null
    1. public class MyPhone {
    2. public static void main(String[] args) {
    3. Phone phone = new Phone();
    4. phone.hasFigurePrintUnlocker = true;
    5. phone.price = 1999;
    6. phone.screen = new Screen();
    7. phone.screen.producer = "京北方";
    8. phone.screent.size = 8.8;
    9. CPU cpu = new CPU();
    10. cpu.producer = "三星";
    11. cpu.speed = 3.5;
    12. Memory memory = new Memory();
    13. memory.producer = "三星";
    14. memory.capacity = 4;
    15. Storage storage = new Storage();
    16. storage.producer = "Intel";
    17. storage.capacity = 128;
    18. phone.mainboard = new Mainboard();
    19. phone.mainboard.ccpu = cpu;
    20. phone.mainboard.memory = memory;
    21. phone.mainboard.storage = storage;
    22. phone.mainboard.model = "EA888";
    23. phone.mainboard.year = "2022";
    24. }
    25. }

    七、Java中的包和访问修饰符

    1、包 

    • 为了避免类在一起混乱,可以把类放在文件夹里。这时就需要硬package语句告诉Java这个类在哪个package里。package语句要和源文件的目录完全对应,大小写一致
    • 一般来说,类都会在包里,而不是直接放在根目录
    • 不同的包里可以有相同的类
    • 一个类只能有一个package语句,如果有package语句,则必须是类的第一行有效代码
    • 包名+类名 = 类的全限定名。简称为类的全名
    • 同一个Java程序中全限定名字不可重复
    1. package com.phone.parts;
    2. import com.phone.Phone;
    3. public class MyPhone {
    4. public static void main(String[] args) {
    5. Phone myPhone = new Phone();
    6. myPhone.name = "123";
    7. }
    8. }

     2、访问修饰符public

    • 被 public(访问不受限制,是权限最多的一个修饰符)修饰的属性,可以在任意包中的类去访问
    • 没有访问修饰符的属性,称作缺省的访问修饰符,可以被本包内的其他类和自己的对象访问
    • 访问修饰符是一种限制或者允许属性访问的修饰符
  • 相关阅读:
    【Make YOLO Great Again】YOLOv1-v7全系列大解析(输入侧篇)
    生产环境中oracle dba权限检查和回收相关命令汇总
    五、域对象共享数据
    【电子器件笔记6】三极管(BJT)参数和选型
    工业RFID识别设备可以在哪些行业应用?
    基于SSM+Vue的咖啡销售系统
    C++查漏补缺与新标准(C++20,C++17,C++11)02 C++快速回顾(二)
    【算法 | 数论 No.1】AcWing1246. 等差数列
    小学生python编程---忍者大战
    474. 一和零
  • 原文地址:https://blog.csdn.net/m0_47135993/article/details/128173808