Java基础:对象与类的定义与使用

简介: Java基础:对象与类的定义与使用

我们知道Java是完全面向对象的,所以需要熟悉OOP(面向对象程序设计)才能够编写Java程序。


一、面向对象程序设计


面向对象程序设计就是通过对象来进行程序设计,将客观世界中的一个事物作为一个对象来考虑,对象表示一个可以明确标识的实体。

比如一只小狗,他就是一个对象。每个对象都有自己的属性和行为。小狗的属性根据需要有性别、体重等,他的行为有吃饭、睡觉、玩耍等。

从程序设计的角度来看,事物的属性可以用变量来描述,行为则用方法来反映。

每个对象都有自己独特的标识、状态和行为。


1.面向对象的三大特征:封装、继承、多态


封装

类是封装的基本单元。通过封装可以隐藏类的实现细节,也可以避免对类中属性的直接操作。可以通过类的公共接口访问类中的变量,而不必知道这个接口的具体实现方式。只要这个方法的名字和参数不变,即使类中的变量被重新定义,或方法的代码被修改,对类中的变量的访问也不会受到影响。比如,你在计算机上安装了一个声卡,你不必知道声卡的内部结构,也不必知道功能如何实现的,因为实现声卡功能的继承电路被封装了。你只要知道声卡应该装在电脑主板的什么位置,其他的设备如音箱,光驱怎样和声卡连接就可以了。


继承

继承是对类的功能的重用和扩充。通过对某一个类的继承产生一个新的子类,子类既有从某个类中继承下来的功能,又可以自行定义自己的变量和方法,产生新的功能。


多态

多态性指的是方法的名字相同,但实现不同。即“同一接口,多个方法”。如有三个方法,分别用来计算圆、矩形、三角形面积,他们的名字可以都叫做area。


2.类

类是构造对象的模板或蓝图。我们可以将类想象成制作甜饼的切割机,将对象想象为甜饼。由类构造对象的过程称为创建类的实例。


对象中的数据称为域,操纵数据的过程称为方法。对于每个特定的类实例对象都有一组特定的实例域值。


在Java中,所有类都源自于Object类


3.类之间的关系


依赖 ( “uses-a” )

聚合 ( “has-a” )

继承 ( “is-a” )

这里简单的解释一下:


依赖: 如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类.是一种最明显,最常见的关系.

我们应该尽可能少的减少类之间的依赖,(类B的改变不会导致A产生任何bug是最好的). 用软件工程的术语来说,就是让类之间的耦合度最小.


二、使用预定义类


1.对象与对象变量


要想使用对象,就必须首先构造对象,并指定其初始状态.然后对对象应用方法.


在Java程序设计语言中,使用构造器(构造器会在之后的文章介绍)构造新实例. 构造器是一种特殊的方法, 用来构造并初始化对象.


我们以Java类库中的Date类为例:


构造器的名字应该与类名相同.因此Date类的构造器名为Date.下面构造一个Date对象:


new Date()


这个表达式构造了一个新对象. 这个对象被初始化为当前的日期和时间.

也可以将这个对象传递给一个方法:


System.out.println(new Date());


想多次使用构造对象,可以将对象存放在一个变量中:

Date birthday = new Date();


如图显示了引用新构造的对象变量birthday:


20190221221702151.png


在对象与对象变量之间存在着一个重要区别. 例句:

Date deadline;


定义了一个对象变量deadline,它可以引用Date类型的对象.

一定要认识到:变量deadline不是一个对象,实际上也没有引用对象.

还要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象.

代码举例:

    deadline = new Date() ;  //  用新构造的对象初始化变量
    deadline = birthday;


现在这两个变量引用同一个对象. 如图:


2019022122480634.png

目录
相关文章
|
21天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
41 8
|
1月前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
22天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
42 1
|
1月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
57 17
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
102 4
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
53 2
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
44 4
|
26天前
|
Java
在Java中定义一个不做事且没有参数的构造方法的作用
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。