Java面向对象编程基础
对象与类
面向对象程序设计概述
-
面向对象程序设计(OOP)与传统结构化程序设计的区别:前者先考虑如何操作数据(算法),再考虑数据的组织(数据结构)。后者相反,先定义数据,再考虑对数据的操作。

-
由类构造对象的过程称为创建类的实例(instance)。一个对象包括两个部分,数据称为实例字段(instance field),操作数据的过程称作方法(method)。实例字段值的集合就是类的当前状态(status),调用方法可以改变对象的状态。
-
可以通过继承来创建新的类,新类具有被扩展类的所有属性和方法。Java中的所有类都源于超类Object。
-
对象的三个特性

-
类间关系


定义和使用类
-
Java中已经创建好了许多类,如Math,Date等等,这些类可以直接使用。
-
使用对象前,首先要构造对象,构造对象通过构造器(constructor,或称构造函数)完成。

-
通过在构造器前加上new操作符创建一个对象。
new Date()。 -
对象和对象变量的区别
Date today=new Date()

Java中所有的对象都存储在堆中,若想获得对象的完整副本,应该使用clone方法。
-
在一个文件中,只能有一个public类,但可以有任意个非公共类。文件名应该与public类名相同。
-
在Java10中,当可以通过变量的初始值推导类型时可以使用var声明局部变量。
var a=new Date() -
隐式参数通过关键词this指示
-
C++中在类内定义方法,该方法会自动成为内联(inline)方法。而在Java中方法必须定义在类内,但是不表示它们是内联方法,是否将某个方法设置为内联方法由Java虚拟机决定。
-
对数据的访问与修改可以通过get和set方法实现,这样的好处是保证了类的封装性。

-
注意get方法不应该返回可变对象引用,例如:

该get方法返回了Date对象引用,可以通过该引用调用set方法修改Date对象的值。这违背了get方法的初衷。若要返回引用对象,应该先进行clone:

-
类方法可以访问所属类的所有对象的数据。例如:

equals方法访问了other的私有字段。 -
final修饰的实例字段必须在构造对象时初始化。
-
static修饰的实例字段叫静态字段,一个类只有一个静态字段,所有对象共享该字段。
-
static修饰的方法是静态方法,静态方法只能访问静态变量。
-
Java中参数都是按值传递的,没有按引用传递。
-
方法名相同,参数不同的方法叫做方法重载,方法名和参数列表叫做方法的签名,返回类型不是方法签名的一部分。
-
Java中,如果在构造器中没有显式的为字段设置值,那么就会自动的赋默认值。(局部变量若没有初始化,将会编译错误)
-
当没有为类编写任何构造器时,编译器会默认生成一个无参构造器。但是只要编写了任意一个构造器,系统就不会自动生成,需要自己编写无参构造器。
-
可以直接在类定义中为字段赋值:
class A{ private String name=""; }将在执行类的构造器之前完成赋值操作。
-
在构造器的开头可以通过this调用另一个构造器方法,在C++中这是不允许的。
-
初始化块,在类声明中,可以编写任意多个代码块,只要构造这个类的对象,这些代码块就会被执行。

首先运行初始化块,然后才会运行构造器的主体部分。
-
调用构造器的步骤

-
静态代码块
static{ }在类第一次加载时(不需要创建实例对象),会执行静态代码块。
-
Java中没有析构函数,因为Java中的内存回收由垃圾回收器自动清理。
-
一个类可以使用所属包中的所有类,以及其他包中的公共类。
import 包名.*可以导入该包下的所有类。* 只能导入一个包,而不能用import java.*但如以java为前缀的所有包。 -
import static java.lang.System.*可以导入静态方法和静态字段。导入后可以直接使用方法名调用方法,或者变量名访问变量。 -

-
编译器在编译源文件时不检查目录结构。例如假设某个源文件开头有
package com.mycompany,即使这个源文件不在 com/mycompany 下,也可以进行编译,如果他不依赖其他包就不会出现编译错误,但是无法运行,因为如果包与目录不匹配,虚拟机就找不到类。(因为编译后的class文件放在源文件目录下,然而运行时,通过java com.mycompany调用,但是这个目录下并没有编译后的class文件,因此编译器找不到类。) -
public修饰的部分,可以被任何类使用,private修饰的部分只能被定义他们的类使用,如果没有指定private和public,这个部分可以被同一个包中的所有方法访问。
-
类文件可以存储在JAR(Java归档)文件中。在一个JAR文件中,可以包含多个类文件和子目录,JAR文件使用ZIP格式压缩。
-
Java中的类若想被别的程序共享,可以放在三个位置:
- 将该类文件放在一个目录中
- 将JAR文件放在一个目录中
- 当前目录
想要使用类就要设置类路径,类路径包括:
- 基目录
- 当前目录
- JAR文件目录
由于总是会搜索Java API的类,因此不用将这个类显示的包含在类路径中。

当虚拟机想要搜寻某个类文件,比如
com.sjw.A类的类文件,他首先查看Java API类中是否有这个类,显然没有,因此他会转而在类路径中查找:- 基地址/com/sjw/A.class
- 当前目录/com/sjw/A.class
- JAR/com/sjw/A.class
而编译器查找文件要比虚拟机复杂的多,如果引用了一个类,而没有指定这个类的包,它会查看所有的import指令,确定其中是否包含这个类。

-
创建JAR包



浙公网安备 33010602011771号