首页 > 编程语言 >Java SE核心技术——6类与对象

Java SE核心技术——6类与对象

时间:2024-08-02 15:30:13浏览次数:15  
标签:Java name 核心技术 构造 对象 方法 public SE String

面向对象编程(Object-Oriented Programming,简称OOP)和面向过程编程(Procedure-Oriented Programming)是两种不同的编程范式,它们在设计和实现软件时采用了不同的方法和哲学。

一、面向对象编程

  1. 核心概念:面向对象编程的核心是"对象",对象可以包含数据(属性)和代码(方法)。万物皆对象。

  2. 封装:将数据和操作数据的方法组合在一起,隐藏内部实现细节。

  3. 继承:允许新创建的类(子类)继承现有类(父类)的属性和方法。

  4. 多态:允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。

  5. 应用:面向对象编程适用于大型、复杂的系统,可以提高代码的复用性和可维护性。

    优点:可维护性,可复用性,可扩展性,灵活性好。

二、面向过程编程

  1. 核心概念:面向过程编程侧重于将问题分解成一系列的过程或函数。
  2. 过程:每个过程执行特定的任务,并且可以调用其他过程。
  3. 数据和函数分离:数据和处理数据的函数是分开的,函数操作数据但不包含数据。
  4. 优点:简单、直观,适合小型或逻辑简单的程序。
  5. 缺点:难以维护,无法复用,难以扩展,灵活性差。

三、对比

  • 设计哲学:面向对象强调的是数据和功能的结合,面向过程则强调的是功能的分解。
  • 代码组织:面向对象通常以类和对象的形式组织代码,面向过程则以函数和过程的形式组织。
  • 可维护性:面向对象由于其封装、继承和多态的特性,通常更容易维护和扩展。
  • 适用场景:面向对象适合于需要高度模块化和可复用性的复杂系统,而面向过程适合于逻辑简单、规模较小的程序。

一、什么是类

类(Class)

  1. 定义:类是现实世界中某些具有共同属性(数据)和方法(行为)的对象的抽象和模板。类是封装对象的属性和行为的载体。
  2. 属性:类中的属性代表了对象的状态信息,通常是变量。
  3. 方法:类中的方法定义了对象的行为,通常是函数。
  4. 封装:类通过将数据和操作数据的方法封装在一起,保护了数据不被外部直接访问,只能通过类提供的方法进行操作。
  5. 创建:通过类可以创建多个对象实例,每个实例拥有自己的状态,但共享相同的行为定义

二、什么是对象

  1. 实例:对象是类的实例化,每个对象都是一个独立的实体,拥有自己的属性值。
  2. 状态:对象的状态由其属性值决定,不同的对象可以有不同的状态。
  3. 行为:对象的行为由类中定义的方法决定,所有对象实例共享相同的方法。
  4. 交互:对象之间可以通过消息传递进行交互,一个对象可以请求另一个对象执行其方法。
  5. 作用:对象是程序中的基本单位,用于存储数据和执行操作。

类与对象的关系

  • 模板与实例:类是创建对象的模板,对象是类的实例。就像模具和铸造出来的产品一样。
  • 属性与状态:类的属性定义了对象可能拥有的状态,而对象的属性值则代表了其当前状态。
  • 方法与行为:类的方法定义了对象的行为,对象通过调用这些方法来执行操作。
  • 多态性:对象可以通过继承和接口实现多态性,即不同的对象可以对相同的消息做出响应,但具体的行为会根据对象的实际类型而有所不同。

三、成员变量

属性(成员变量)=访问修饰符+数据类型+变量名

Java中,对象的属性也称为成员变量,成员变量可以是任意类型,成员变量的作用域是整个类。

public calss Book{    //定义一个书类
	private String name;  //定义String类型的成员变量
	public String getName(){  //成员变量name的get方法
        return name;
    } 	
   
   public void setName(String name){   //成员变量name的set方法
       this.name = name;   //将参数值赋给成员变量name
   }
}

上面创建的是一个Book类,在类中设置了一个name属性,并编写了该属性的Getter/Setter方法。

在Java语言中定义类需要使用class关键字,Book是类的名称,在Book类中定义了一个成员变量,成员变量的类型为String类型。成员变量其实就是一个普通的变量,可以为它设置初始值,也可以不设置初始值,如果不设置初始值,那么会有默认的初始值。

四、成员方法

在Java中,使用成员方法对应于类对象的行为,以上面的Book类为例,它包含了getName()和setName()两个方法,这两个成员方法分别为获取图书名称和设置图书名称的方法。

定义成员方法的语法格式如下:

权限修饰符  返回值类型  方法名(参数类型  参数名){
	……    //方法体
	return 返回值;
}

一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值,可以使用return关键字来返回值,使用这个关键字,方法执行到这句语句的时候,方法将被中止。(如果想要使成员方法无返回值,可以使用void关键字表示)。

成员方法的返回值可以是计算结果,也可以是其它想要的数值和对象,返回值的类型要与方法返回值类型一致。

在成员方法中可以调用其他成员方法和类成员变量,在成员方法中也可以定义一个变量,但是方法中定义的变量为局部变量。

成员方法和成员变量统称为类成员。

五、对象实例化(构造器)

对象实例化是一个过程,它创建了类的一个具体实例,即对象。不同的编程语言有不同的语法来实现对象的实例化。构造器是类中用于实例化Java对象的一个特殊方法,该方法要求方法名必须与类名相同

1.默认构造器(无参)

当一个类没有构造器,就默认为无参构造器。当有构造器时,无参构造器需手写。

public 类名(){}

默认构造器不接收任何参数,会调用父类的无参构造器(如果存在的话),然后初始化类的对象。

public class MyClass {
    private String name;

    // 没有显式定义构造器,编译器将提供一个无参构造器
}

// 实例化对象,使用默认的无参构造器
MyClass myObject = new MyClass();

MyClass有一个私有的name属性,但没有定义任何构造器。当你创建MyClass的实例时,使用的是默认的无参构造器。
2.有参构造器

有参构造器(Parameterized Constructor)是一种接收初始化参数的构造方法。当你创建对象时,可以传递参数给这些构造器,以便在对象创建时就初始化对象的状态。

以下是一些关于有参构造器的关键点:

  1. 定义:有参构造器的方法名必须与类名完全相同,并且不返回任何值(不包括void)。
  2. 参数:构造器可以有一个或多个参数,用于接收初始化数据。
  3. 作用:主要用于在创建对象时设置对象的初始状态。
  4. 调用:在创建对象时,必须提供与构造器参数匹配的参数值。

下面是一个Java类使用有参构造器的例子:

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

    // 有参构造器,接收两个参数:姓名和年龄
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 其他方法,例如获取姓名和年龄
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

// 使用有参构造器实例化对象
Person person = new Person("Alice", 30);

包含无参构造器和有参构造器:

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

    // 无参构造器
    public Person() {
        this("Unknown", 0); // 调用有参构造器,设置默认值
    }

    // 有参构造器,接收两个参数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

// 使用无参构造器实例化对象,实际上会调用有参构造器
Person personDefault = new Person();

在这个例子中,无参构造器通过this("Unknown", 0);调用了有参构造器,从而实现了构造器之间的调用。这是一种常见的模式,用于为类的不同构造器提供一致的初始化逻辑。

3.构造器重载

构造器重载(Constructor Overloading)是Java中多态的一种表现,允许一个类拥有多个同名的构造器,只要它们的参数列表不同即可。这使得类能够提供多种方式来创建对象,每种方式都可以接受不同数量或类型的参数。

构造器重载的要点:

  1. 方法名相同:所有重载的构造器必须具有相同的方法名,即类名。
  2. 参数列表不同:构造器的参数数量或类型(或两者)必须不同。
  3. 返回类型:构造器没有返回类型,即使是void也不行。
  4. 访问修饰符:可以有不同的访问修饰符,但这不影响重载。
public class Car {
    private String model;
    private String color;
    private int year;

    // 无参构造器
    public Car() {
        this("Unknown", "Black", 0); // 默认构造器,调用有参构造器
    }

    // 有参构造器1:接收三个参数
    public Car(String model, String color, int year) {
        this.model = model;
        this.color = color;
        this.year = year;
    }

    // 有参构造器2:接收两个参数
    public Car(String model, int year) {
        this(model, "Black", year); // 调用另一个有参构造器
    }

    // 有参构造器3:接收一个参数
    public Car(String model) {
        this(model, "Black", 0); // 调用另一个有参构造器
    }

    // 其他方法...
}

// 使用不同的构造器实例化对象
Car car1 = new Car(); // 使用无参构造器
Car car2 = new Car("Tesla", "Red", 2021); // 使用有参构造器1
Car car3 = new Car("Toyota", 2020); // 使用有参构造器2
Car car4 = new Car("Honda"); // 使用有参构造器3

六、对象的使用

在面向对象编程(OOP)中,对象的使用通常涉及以下几个步骤:

  1. 定义类:首先,你需要定义一个类(Class),它是一个蓝图,描述了具有相同属性和方法的对象的结构。
  2. 实例化对象:使用类来创建一个或多个对象实例。这通常通过调用类的构造器完成。
  3. 访问属性:对象的属性(也称为字段或成员变量)可以通过点(.)操作符来访问和修改。
  4. 调用方法:对象的方法(也称为成员函数)可以通过点操作符调用,以执行某些操作或返回某些值。
  5. 修改对象状态:通过设置对象的属性,可以改变对象的状态。
  6. 实现接口或继承:对象可能实现了特定的接口或继承自其他类,这为它们提供了额外的行为或属性。
  7. 销毁对象:在某些语言中,如Java,对象会在不再被引用时由垃圾收集器自动销毁。在其他语言中,如C++,可能需要手动管理内存和对象的销毁。
// 定义一个类
class Person {
    private String name;
    private int age;

    // 构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 获取姓名的方法
    public String getName() {
        return name;
    }

    // 设置姓名的方法
    public void setName(String name) {
        this.name = name;
    }

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

    // 描述个人信息的方法
    public void describe() {
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

// 使用类创建对象
public class Main {
    public static void main(String[] args) {
        // 实例化Person类的对象
        Person person1 = new Person("Alice", 30);

        // 访问和修改属性
        person1.setName("Bob");
        person1.setAge(25);

        // 调用方法
        person1.describe(); // 输出: Name: Bob, Age: 25

        // 创建另一个对象
        Person person2 = new Person("Charlie", 40);
        person2.describe(); // 输出: Name: Charlie, Age: 40
    }
}

七、对象的销毁(GC垃圾回收)

在Java中,对象的销毁是由垃圾收集器(Garbage Collector, GC)自动管理的。当一个对象没有任何引用指向它时,它就变得“无用”,GC会在某个时间点回收它所占用的内存。 System.GC()

  • 垃圾收集触发条件:当对象没有被任何变量、对象或类引用时。
  • 垃圾收集过程:GC周期性地运行,检查对象的引用状态,并回收那些没有被引用的对象。
  • GC可回收new的对象,系统资源对象不能回收
public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        // 当person变量离开作用域或被设置为null时,对象可能被GC回收
        person = null; // 显式地断开引用,加快对象的回收
    }
}

八、匿名对象

匿名对象:没有名字的对象。只用一次。
格式如下:

new Person().showMessage();

 这种对象通常用于临时使用,不需要命名的情况。不同的编程语言对匿名对象的支持程度不同。

在Java中,匿名对象通常用于创建一次性使用的对象,或者作为参数传递给方法。例如,创建一个实现了Runnable接口的匿名对象,并将其作为线程启动:

在Java中,匿名对象通常用于创建一次性使用的对象,或者作为参数传递给方法。例如,创建一个实现了Runnable接口的匿名对象,并将其作为线程启动:
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from an anonymous Runnable!");
    }
}).start();

实例化对象方式:

new 对象

Object clone
image-20240801153912718

最高设计原则:高内聚低耦合。

  1. 继承(Inheritance):父类,子类
    • 继承是一种"是一个"(is-a)的关系。例如,如果有一个Animal类,可以有一个Dog类继承自它,因为狗是一种动物。
  2. 实现(Implementation):订票接口,网上订票类
    • 实现通常指的是一个类实现了一个接口。接口定义了一组方法,类必须实现这些方法,但接口本身不提供实现。
  3. 关联(Association):学生类,老师类
    • 关联是一种"有"(has-a)的关系。例如,一个Car类可能有一个Engine类作为其属性,表示汽车有引擎。
  4. 聚合(Aggregation):学生类,班级类
    • 聚合是一种特殊的关联,表示整体与部分的关系,但部分可以独立于整体存在。例如,一个University类可能聚合了多个Student类的对象。
  5. 组合(Composition):心脏,人
    • 组合也是整体与部分的关系,但与聚合不同,部分不能独立于整体存在。如果整体被销毁,部分也会被销毁。
  6. 依赖(Dependency):动物,水
    • 依赖是一种"使用"(uses-a)的关系。一个类可能在其方法中使用另一个类的对象,但不一定拥有它。

标签:Java,name,核心技术,构造,对象,方法,public,SE,String
From: https://www.cnblogs.com/zxt102220/p/18338854

相关文章

  • Java SE核心技术——7封装
    封装的概述对外部隐藏内部细节1、封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问和操作的接口。通过将类的属性设置为私有(private),防止外部直接访问和修改这些属性。2、好处:高内聚低耦合(面向对象设计的最高原则)(1)隐藏事物的实现细节降低使用难度(2)提高了......
  • java的数据类型之基本类型
    强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后使用。如果没有按照指定要求使用变量,则该变量将报错。java就是强类型语言。java的两大数据类型1.基本类型2.引用类型其中基本类型分为八小种按照图示内容了解各个类型的字节范围(若超过该范围,则IDEA会报错)1......
  • 使用pg_basebackup备份和恢复一个pg数据库
    创建用于备份用的用户:创建数据库备份用户:psql-Upostgres-c"CREATEUSERdbbackupWITHREPLICATIONPASSWORD'123456'"-U指定备份用户-c指定创建用户命令备份用户只需要授权:replication即可创建用于备份的目录:创建备份目录:mkdir-p/pgdata/backup/如果不是本......
  • 反序列化靶机serial
    1.安装靶场进行配置2.打开kali扫描IPnmap-PS-T4192.168.245.0/243.物理机访问靶场4.F12查看网络,刷新一下得到一串base64编码5.进行base64解码,乱码为空格改为\x00,再次进行base64加密,得到payload如下Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjM6InNrNCI7czo5O......
  • WEEK5|WEB Unserialize Again
    进入后是一个文件上传但是这里并没有漏洞点看cookie得到源码<?phphighlight_file(__FILE__);error_reporting(0);classstory{private$user='admin';public$pass;public$eating;public$God='false';publicfunction__wakeup(){......
  • 基于SpringBoot的智能购房推荐系统-09040(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    Springboot智能购房推荐系统摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智......
  • java之WIFI信号模块
    开发步骤分为以下几点:1.在AndroidManifest中声明相关权限(网络和文件读写权限)声明权限:<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissiona......
  • 在cmd/powershell中使用java/javac -cp/--class-path命令链接多个jar包
    ​ 之前使用ide,习惯了傻瓜式一键运行java文件,对于java虚拟机以及java指令了解的很少,最近重温java,在使用windows中的cmd来运行java项目时,遇到了一点问题,相同的指令在cmd中能够运行,在powershell中不能正确运行,在国内网站上搜索无果后,果断去国外,在stackoverflow上找到解决办法。​ ......
  • 最新SEO自动外链蜘蛛池工具促进百度快速收录使用方法介绍
    此工具集成市面上所有自动外链网站的资源链接,经过合并、去重、筛选、验证总结出最终的外链资源,软件实时更新 本软件将您繁杂的外链推广转为自动化进行,并且加入站群的支持,您只需要将你的站群域名粘贴到软件里,点击开始按钮就可以了 软件会自动轮刷您的每一个网站 软件效......
  • 图书《数据资产管理核心技术与应用》分享
    《数据资产管理核心技术与应用》是由清华大学出版社出版的一本图书,该图书主要特点如下:1、依托于大数据技术,独家解密数据血缘的底层技术实现2、详解数据资产管理的知识体系和核心技术3、应用元数据管理和数据建模技术,充分发挥出数据资产的更大潜力和价值。4、全书从元数据、数......