Java基础(1) 对象与类(Java核心技术卷笔记)

类和对象的相关知识

类与对象

类是构造对象的模板

对象的几个特性:行为(对象可以使用哪些方法?)/状态(调用方法,对象会如何响应?)/标识(如何区分有相同行为、状态的不同对象?)

写面向对象程序的方式:先识别类,再为各个类写方法。

类之间的关系:依赖(一个类的方法使用或操控另一个类的对象)/聚合(has-a)/继承

封装

封装是处理对象的重要概念。

将数据与行为组合在一个包中,对对象使用者隐藏具体实现方式。

有些时候,可能想要获得或者设置实例字段的值。那么需要提供下面三项内容:

一个私有的数据字段;

一个公共的字段访问器方法;

一个公共的字段更改器方法。

类中变量的类型

1 字段/成员变量(类中的变量)

2 局部变量(代码块中的变量)

3 参数(方法声明中的变量)

字段(成员变量)

Java编程语言中类的一个成员。

从静态角度,分为静态/非静态字段

从对象和类的角度,分为实例字段(对象变量)/类字段(静态字段)

修饰符为final的变量是常量。分为静态(static final)/非静态(final)。常量也是字段。

static final修饰的常量必须在声明时初始化

final修饰的实例常量必须在构造对象时初始化

对象实例可以访问静态属性!!

一般类的组成

修饰符 class 类名{

字段

构造器

方法(实例方法+类方法/静态方法)

}

源代码

多个类可以放在一个源文件中

一个源文件只能有一个公共类(源文件名与该类名匹配)+任意数目非公共类

编译源文件:

javac一个.java文件名,如果使用到了别的类(A.java),寻找A.class,找不到或者.java较.class已更新,则搜索A.java进行编译。

也可以使用*通配符寻找全部编译

用var声明局部变量

但是参数和字段的类型必须声明。

使用对象:构造对象+调用方法

1 构造对象,指定其初始状态; 2 对对象调用类的方法

Java中,要用 构造函数 构造新对象

如:

Date date = new Date();

new操作符+构造函数构造一个新对象,而new操作符返回的值是对对象的引用

date是对象变量是对新创建的对象的一个引用

对象变量:引用了一个对象,不包含对象。任何对象变量的值都是对存储在另外一个地方某个对象的引用。

实例就是对象,比如构造一个新实例就是构造一个新对象。实例变量就是随着对象创建而创建的变量,能被实例/对象调用。类变量/静态变量就是随着类创建而创建的变量,能被类调用。

可以 使用预定义类/构造自定义类 构造对象。

构造函数/构造器(特殊的方法)

一种特殊的方法,用来构造并初始化对象。

1 与类同名。构造该类的对象时,构造器会运行,从而将实例字段(变量)初始化为希望的初始状态。

2 无返回值

3 每个类可以有大于等于一个构造函数(没有写默认有一个无参构造器)

4 构造函数可以有大于等于0个参数

5 与其他方法的不同:总是结合new操作符来调用;不能对一个已经存在的对象调用构造函数来重设实例变量。

方法

隐式参数和显式参数

隐式参数:又称方法调用的目标/接收者

在一个方法中,this指示隐式参数。(方法所处的类的对象)

显式参数:传参的参数。

静态字段与静态方法

静态字段:

一个字段被定义为static,则每个类只有一个这样的字段 (属于类,不属于单个对象) 非静态的实例字段,每个对象都有自己的一个副本

静态常量:

static final

静态方法:

不在对象上执行,无隐式参数

工厂方法: main方法:

静态方法;不对任何对象进行操作;执行并构造程序所需要的对象

更改器方法与访问器方法

前者:修改对象

后者:只访问对象,不修改对象

私有方法

私有方法常常作为辅助方法出现。

方法参数:将参数传递给方法

1 按值调用:接收调用者提供的值

2 按引用调用:接收调用者提供的地址

Java:按值调用!!方法得到的是参数值的一个副本

比如说一个方法:

public void method(int x , Employee y){

...

}

此方法展示了参数变量的两种类型基本数据类型+对象引用

传递基本数据类型参数:

double percent = 10;
tripleValue(percent);
 
public static void  tripleValue(double x){
x = 3 * x;
}

传参过程 :

x初始化为percent值的一个副本;

x→30,但percent仍为10;

方法结束后,参数变量x不再使用。

传递对象引用参数:

harry = new Employee(...);
tripleSalary(harry);
 
public static void tripleSalary(Employee x){
x.raiseSalary(200);
}

x初始化为harry值的一个副本,也就是x是harry引用的对象的一个新的引用;

raiseSalary方法应用于这个对象引用,x与harry同时引用的那个Employee对象的工资提高200;

方法结束后,参数变量x不再引用;对象变量harry仍然引用那个涨了200工资的对象。

证明Java是按值调用,而不是按引用调用

var a = new Employee("Alice",...);
var a = new Employee("Bob",...);
swap(a,b);
 
public static void swap(Employee x,Employee y){
Employee temp = x;
x = y;
y = temp;
}

 

最终,交换了x、y两个副本,而a、b没有交换。

总结——方法参数能干什么:

所以,Java中对方法参数:

1 方法不能修改基本数据类型的参数

2 方法可以修改对象参数的状态

3 方法不能让一个对象参数引用新的对象

对象构造的过程

重载(针对方法的机制)

有些类有多个构造器,或方法有相同的名字、不同的参数,这种功能叫重载。

Java可以重载任何方法。

重载解析:查找匹配的过程

三种初始化方式

默认字段初始化显式字段初始化初始化块

(其他字段在调用构造函数时赋值)

默认:构造器中如果没有显式设置字段初始值,则自动赋为默认值(0,false,null)

(方法中的局部变量必须明确初始化

显式:直接为字段赋值/利用方法调用直接为字段赋值

初始化块:放在类中用{}括起来的一段初始化代码(静态则static{})

静态初始化块最优先的,并且只会随着类执行一次

顺序是先运行初始化块,再构造函数顺序向下

关于无参构造器

如果一个类没写构造函数,则会为你提供一个无参构造器,进行默认字段初始化

如果写了构造函数并有参(没写无参的),则直接调用无参不合法。

关于构造器内调用构造器

关键字 this:

1 隐式参数 2 构造器的第一个语句形如this(...),将调用同类另一构造器

类内如何定义参数名?(遮蔽)

因为参数(局部变量)会遮蔽同名的实例字段(成员变量),所以有两种方式:

1 令参数名不同

2 利用this.指示隐式函数,给其赋值

类组织在一个集合中

包方便人组织代码,并将自己的代码与别人提供的代码分开管理。

使用包的主要原因是确保类名的唯一性。比如有两个人同时创建了Employee类,可以通过包名进行区分。

编译器的角度,嵌套的包没有任何关系。如java.util和java.util.jar

类的导入

一个类可以使用所属包的所有类+其他包的公共类

在包中定位类编译器的工作。类文件中的字节码总是使用完整的包名引用其他类。

访问其他包的公共类时,有两种调用方式:

1 使用完全限定名。形如:java.time.LocalDate today = java.time.LocalDate.now();

2 使用import语句(可以利用*导入包中所有类,也可以具体导入一个类)

ps:只能导入一个包。诸如java..*是不存在的

静态导入(用import语句导入静态方法与字段)

import static ....(如java.lang.System.*)

import static java.lang.Math.*;

sqrt(20);

在包中增加类

(编写源代码时),将包名放在源文件开头。

包访问的范围

public:由任意类使用

private:由定义它们的类使用

无标记:可以被同一个包中的所有方法访问

类路径

类存储在文件系统的子目录中;也可以存在JAR文件中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值