【Java】Java学习笔记-对象和类

Java 对象和类

Java作为一种面向对象语言。支持以下基本概念:
1. 多态
2. 继承
3. 封装
5. 抽象
6. 类
7. 对象
8. 实例
9. 方法
10. 消息解析

  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • 类:类是一个模板,它描述一类对象的行为和状态。

1. Java中的对象

具有状态和行为的实体可称为对象(女朋友也可以叫对象)。 椅子,自行车,标记,笔,桌子,汽车等。它可以是物理或逻辑(有形和无形)。 无形对象的例子是银行系统。

一个对象有三个特点:
  • 状态: 表示一个对象的数据(值)。
  • 行为: 表示对象的行为(功能),例如:存款,取款等。
  • 标识: 对象标识通常通过唯一ID实现。该ID的值对外部用户不可见。 但是,它由JVM内部使用来唯一地标识每个对象。

    例如: 汽车是一个对象。它的名字是:捷达,颜色是白色等这些就是它的状态(数据值)。它用于跑路,所以跑路就是它的行为。

对象是类的一个实例。 类是创建对象的模板或蓝图。 所以对象是一个类的实例。

对象定义:
  • 对象是一个现实世界的实体。
  • 对象是一个运行时实体。
  • 对象是具有状态和行为的实体。
  • 对象是类的一个实例。

2. Java中的类

类是具有共同属性的一组对象。它是创建对象的模板或蓝图。它是一个逻辑实体。 它不能是物理存在的实体。

Java中的类可以包含:
  • 字段
  • 方法
  • 构造函数
  • 代码块
  • 嵌套类和接口
//声明一个类的语法:
class <class_name>{  
    field;  
    method;  
}
2.1. Java中的实例变量

实例变量在类内部,但在方法外部定义的变量称为实例变量。 实例变量在编译时不获取内存。 它在运行时获取对象(实例)创建时的内存。 这是为什么,它被称为实例变量。

2.2. Java中的方法

在java中的方法类似函数,用于暴露对象的行为。

方法的优点
  • 代码可重用性
  • 代码优化
2.3. Java中的new关键字

new关键字用于在运行时分配内存。所有对象在堆内存区域中获取内存。

2.4构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
//下面是一个构造方法示例:
public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // 这个构造器仅有一个参数:name
   }
}
2.5创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字new来创建一个对象。
  • 初始化:使用new创建对象时,会调用构造方法初始化对象。
//下面是一个创建对象的例子:
public class Puppy{
   public Puppy(String name){
      //这个构造器仅有一个参数:name
      System.out.println("Passed Name is :" + name ); 
   }
   public static void main(String []args){
      // 下面的语句将创建一个Puppy对象
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

//编译并运行上面的程序,会打印出下面的结果:
Passed Name is :tommy
在Java中创建对象的不同方法有哪些?
在java中有很多方法可以用来创建对象。它们分别是:
  • 通过new关键字
  • 通过newInstance()方法
  • 通过clone()方法
  • 通过反序列化
  • 通过工厂方法等
  • 在接下来的章节中,将学习这些方法用来创建对象。
匿名对象
匿名只是表示没有名。没有引用的对象(也就是不使用实例变量)称为匿名对象。它只能在创建对象时使用。如果只需要使用一个对象,匿名对象是一个很好的方法。 例如:
new Puppy();//匿名对象
Puppy p = new Puppy();// 使用实例变量,所以不是匿名对象

源文件声明规则

当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

  • 一个源文件中只能有一个public类
  • 一个源文件可以有多个非public类
  • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
  • 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
  • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
  • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
  • 类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。这些将在访问控制章节介绍。

    除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。


Java包

包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。


Import语句

在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

//例如,下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类
import java.io.*;

一个简单的例子

class Employee{
    String name;
    int age;
    String designation;
    double salary;
    // Employee 类的构造器
    public Employee(String name){
        this.name = name;
    }
    // 设置age的值
    public void empAge(int empAge){
        age =  empAge;
    }
    /* 设置designation的值*/
    public void empDesignation(String empDesig){
        designation = empDesig;
    }
    /* 设置salary的值*/
    public void empSalary(double empSalary){
        salary = empSalary;
    }
    /* 打印信息 */
    public void printEmployee(){
        System.out.println("Name:"+ name );
        System.out.println("Age:" + age );
        System.out.println("Designation:" + designation );
        System.out.println("Salary:" + salary);
    }
}

public class EmployeeExample {

    public static void main(String args[]){
        /* 使用构造器创建两个对象 */
        Employee empOne = new Employee("James Smith");
        Employee empTwo = new Employee("Mary Anne");

        // 调用这两个对象的成员方法
        empOne.empAge(26);
        empOne.empDesignation("Senior Software Engineer");
        empOne.empSalary(1000);
        empOne.printEmployee();

        empTwo.empAge(21);
        empTwo.empDesignation("Software Engineer");
        empTwo.empSalary(500);
        empTwo.printEmployee();
    }
}

//运行结果:
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

Java面向对象(OOP)概念

对象意味着真实的单词实体,如:笔,椅子,表等。面向对象编程是一种使用类和对象来设计程序的方法或模式。 它通过提供一些概念简化了软件开发和维护:

  • 对象: 任何具有状态和行为的实体都称为对象。 例如:椅子,钢笔,桌子,键盘,自行车等。它可以是物理和逻辑的。
  • 类: 对象的集合称为类。 它是一个逻辑实体。
  • 继承: 当一个对象获取父对象的所有属性和行为,称为继承。 它提供代码可重用性。 它用于实现运行时多态性。
  • 多态性: 当一个任务通过不同的方式执行时,称为多态性。 例如:以不同的方式说服客户,画一些东西,如:形状或矩形等。
  • 抽象: 隐藏内部细节和显示功能称为抽象。 例如:电话,但我们不知道内部是如何处理通话/通信的。
  • 封装: 将代码和数据绑定(或包装)在一起成为单个单元称为封装。 例如:胶囊,它包裹着不同的药物。

OOP的优点相对于面向过程的编程语言

  • OOP使开发和维护变得更容易,因为在面向过程的编程语言中,如果代码随着项目规模的增长而增长,则不容易管理。

  • OOP提供数据隐藏,而在面向过程的编程语言中,可以从任何地方访问全局数据。

  • OOP提供更有效地模拟真实世界事件的能力。 如果使用面向对象的编程语言,我们可以提供真实世界里的问题的解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿周周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值