1.类
类(class)是**构造对象**的蓝图, 由类来创建对象的过程叫做**实例化**。
1.1去识别类
在分析问题的过程中寻找名词,而方法对应着动词。
结合类 ,对象,方法举个例子,在订单处理系统中,有商品(Item),订单(Order)一类名词,将这些看作“类”。
“支付”,“发送”,“取消”,很明显是对订单的操作,即动词。
当一个新的商品(Item)添加到订单(Order)时,一个新的订单对象出现了。假设订单知道如何增删商品,以及排序商品,那么增加(add)应该是订单(Order)类中的一个方法,而Item对象是一个参数。
2.封装
封装(encapsulation)是与对象有关的一个重要概念 。
-
形式上,封装将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
-
对象中的数据称为实例域,操纵数据的过程称为 方法。
实现封装的关键 就是不让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法 与对象数据进行交互。
3.对象
思考:对于对象的操作,对象本身的响应,对象的标示(区分相同行为与状态的不同对象)
- 构造对象
想要使用对象,首先要构造对象, 构造器是一种特殊的方法,用来构造并且初始化对象。
构造器的名字应该与类名相同。
例如类Data,假设其对象将描述当前时间,比如13:28:03 星期日 2021年8月29日。Data类的构造器名即Data,要创造一个Data对象,在构造器钱加上new操作符
new Date()
这个表达式构造了一个新对象,这个对象被初始化为当前时间,也可以将这个对象传递一个一个方法
sout(new Data());String s = new Date().toString();
不像上图那样,通常我们想让构造的对象多次使用,需要将对象存放在一个变量中
Date birthday = new Date();
对象变量和对象的区别
Date deadline; //这里定义了
//一个对象变量,但他不是一个对象
//因此不能将Data的方法应用到这个变量上
//所以我们必须像上图那样为他初始化
Date deadline = new Date();
Java中,任何对象变量的值都是对存储在另外一个地方的对象的引用,表达式new Date()
创造了一个Date类型的对象,并且它的值是对新创造对象的引用。这个引用存储在对象deadline中。
将对象变量赋值为null时,表明这个变量目前没有引用对象,如果将方法应用于值为null的对象上,就会有runtime error(运行时错误)。
Java核心技术笔记抄写。
4.静态域
class Employee
{
private static int nextId = 1;
private int id;
实例域 id, 静态域 nextId
如果有 1000 个 Employee 类的对象, 则有 1000 个实例域 id。但是, 只有一
个静态域 nextld。即使没有一个雇员对象, 静态域 nextld 也存在。它属于类。
所以可以称静态域为类域
5.值传递和引用传递
Java设计语言总是按照值调用,完成引用传递可以将对象引用作为参数,然后再更改对象的数据。
public static void tripieSalary (Employee x) // works
{
x.raiseSalary(200);
}
harry = new Employee(. . .);
tripieSalary(harry);
6.重载
有些类由多个构造器,例如可以构造一个空的字符串对象
StringBuilder messages = new StringBuilderO;
或者, 可以指定一个初始字符串:
StringBuilder todoList = new StringBuilderC(“To do");
如果多个方法有相同名字,不同参数便构成了重载。
7.变量初始化
局部变量没有默认值,要初始化。类变量 有默认值 ,可进行初始化。
8.无参构造器
如果在编写一个类的时候没有编写构造器,那么系统会提供一个无参数构造器,这个构造器将所有类域设置为默认值。
另一种情况,如果类中至少提供了一个有参构造器,但没有提供无参构造器,如果你在构造对象的时候没有提供参数就会被视为不合法。
9.调用另一个构造器
this关键词的另一个含义:一个构造器可以调用另一个构造器。
如果构造器的第一个语句形如 this(…), 这个构造器将调用同一个类的另一个构造器。下
面是一个典型的例子:
public Employee(double s)
{
// calls Employee(String, double)
this("Employee #" + nextld, s);
nextld++;
}
当调用 new Employee(60000) 时, Employee(double) 构造器将调用 Employee(String,double)
构造器。
采用这种方式使用 this 关键字非常有用, 这样对公共的构造器代码部分只编写一次
即可。
10.初始化块
public class InitializationBlock {
public static void main(String[] args) {
xx a = new xx("Nihat",55);
}
}
class xx {
private static int nextld;
private int id;
private String name;
private double salary;
// object initialization block
{
id = nextld;
id++;
System.out.println("yes");
}
public xx(String n, int s)
{
name = n;
nextld = s;
}
public xx()
{
name = "";
salary = 0;
}
}
无论使用哪个构造器构造对象,id域都在对象初始化块中被初始化。首先运行初始化块,然后才运行构造器主体部分。
(建议将类变量定义放在初始化块前面,以免造成重复定义,就是初始化块中最好不要进行变量定义。)
清晰可见,初始化块是直接用大括号括起来的
java.util.Random 1.0
•Random( )
构造一个新的随机数生成器。
• int nextlnt(int n)1.2
返回一个 0 ~ n-丨之间的随机数。
11.作用域
标记为public的部分可以被任意的类使用,标记为private的部分只能被定义他们的类使用,如果没有指定public或者private,那么这个部分(类,变量,方法)可以被同一个包中的所有方法访问。