对象与类

本文深入探讨Java面向对象编程(OOP)的核心概念,包括类、对象、构造器、封装、静态域与方法等,解析如何设计高效、安全的类,并提供类设计的实用技巧。

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

一、面向对象程序设计的概述

面向对象编程OOP(Object oriented Programming),在java中,一切皆对象,与面向过程对比来说,面向过程是对一条条的语句编程,每一步都需要很清楚,编写起来非常复杂。

面向对象则是由对象组成的,在编写程序的过程中,只要对象能够满足要求,就不必关心其功能的具体实现过程。不必担心对象的具体实现,只要能满足用户的需求即可。

1、类

类是构造对象的模板或者版图,由类构造的对象称之为类的实例。

类之间关系有

①依赖:在一个类中引用了另一个类

②聚合:类A的对象包含类B的对象

③继承:类B继承类A,则类B拥有类A中所有的属性和方法。

2、对象与对象变量

new Date()//表示构造了一个新对象

Date a = new Date()// a就是对象变量

一个对象变量并没有实际包含这个对象,仅仅是引用了这个对象。

3、更改器和访问器

set和get方法分别用于构造和访问

三、用户自定义类

 

源文件名必须与public类的名字相匹配,这是因为在一个源文件中,只能有一个公有类,公有类太多会导致虚拟机找不到入口,但是可以由任意数目的非公有类。

1、构造器

构造器要与类同名

每个类可以由一个以上的构造器、构造器可以由0、1或者多个参数

构造器没有返回值

构造器总是伴随着new操作一起调用

2、隐式参数和显式参数

隐式参数是出现在方法名前的类的对象,显示参数就是括号内的参数

在每一个方法中,关键字this表示隐式参数。

4、封装

为了获得设置实例域的值,需要有一个私有的数据域、一个公用的域访问器方法,一个公有的域更改器方法。

一个方法可以访问所属类的所有对象的私有数据。

为什么需要将实例域(类变量)设置为私有的?

    将属性设为私有的,为 类内部可见,即该类的方法才可直接调用,如果不开放get,set方法,则即使实例化了该类的对象,也是不可调用到这个属性的,而将属性设为公有的,只要实例化了该类的对象,既可通过该对象调用此属性。一般只在类中使用的变量或者不想被外部调用的变量设为私有

 

5、final实例域

private final String name;

在对象被构建之后,被final修饰的类变量不可在修改,不可修改的是对象的引用,对象内的值可以改变。

 

四、静态域与静态方法

1、静态域

private static int nextId = 1;

被static修饰的类变量称为静态域,对于所在类的每一个对象对这个静态域都有自己的一份拷贝,且各个对象之间是共享的,任何对象通过方法对其可以修改(通过反射修改)。

这个域属于类,不属于任何对象。

2、静态常量

private static final int nextId = 1;

被static和final修饰的类变量称为静态常量。静态常量被所有对象共享且一旦被初始化就不可被修改。

System.out就是一个静态常量。

静态常量修改一处,全处可用。

修改静态常量:通过本地方法可绕过JAVA语言的存储控制机制。

3、静态方法

public static int getNextId(){

 

}

静态方法除访问自身类的实例域外,不能访问本类的其它实例域(因为不能操作对象)。

静态方法可以调用静态方法。

非静态方法即可调用静态方法,也可调用非静态方法。

静态方法是一种不能向对象操作的方法(可以认为没有this参数的方法)

类名.静态方法

4、main方法

main方法被任何对象操作,Main方法是程序的起点,当JVM运行这个程序的时候,首先会调用Main方法,调用时不实例化这个类的对象,而是通过类名(类.main()),因此需要限制为public static,  main方法将执行并创建程序所需要的对象。

 

五、方法参数

程序设计语言中将参数传递的方法有值调用和引用调用两种方法。

java中的方法参数传递的方式有以下三种情况来使用值调用和引用调用。

1、基本数据类型参数的传递采用值调用。(即不能修改一个基本数据类型的参数)

2、一个方法可以改变对象参数的状态(引用调用)

可以通过对象本身的方法法修改对象的状态。

3、一个方法不能让对象参数引用另一个对象。

 

六、对象构造

java提供了多种编写构造器的机制

1、重载

多个方法名相同,参数的个数、数据类型不同,Java允许重载任何方法,而不只是构造器方法。

2、默认域初始化

如果在构造器中没有显示地给赋予初始值,那么就会被自动的赋予默认值,如0,true/false,null

3、无参数构造器

如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数的构造器,这个构造器将所有的实例域设置为默认值。

4、显示域初始化

保证构造器中含有由意义的参数

5、参数名

构造器中的参数名可以和域变量相同

String name;

Double salary;

Public Employee(String name,Double Salary){

this.name=name;

this.Salary=Salary;

}

七.在构造器中调用另一个构造器

八、初始化块

代码块和静态代码块。

在构造器构造对象时,首先运行初始化块,然后才运行构造器中的主体部分。

 

Note:初始化语句调用顺序

①静态变量、静态块

②成员变量、普通方法块

③构造方法

静态变量的声明、静态块的执行顺序与定义的顺序有关

成员变量的声明、普通方法块的执行顺序与定义的顺序有关。

 

九、类设计技巧

1、一定要保证数据的私有

2、一定要对数据初始化

3、不要在类中使用过多的基本类型

4、不是所有的域都需要独立的域访问器和域构造器

5、将职责过多的类进行分解

6、类名和方法名要能够体现它们的职责

7、优先使用不可变类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值