JAVA 核心技术 卷Ⅰ 第四章

对象与类

  • 面向对象程序设计(OOP)
    • 类(class)
      • 构造器
      • 方法
      • 静态域与静态方法
        • 静态域
        • 静态常量
        • 静态方法
    • 方法参数
      • 按值调用(call by value)
      • 按引用调用(call by reference)
    • 包(package)
      • 类的导入
      • 静态导入

面向对象程序设计(OOP)

不关心对象的具体实现,只要能满足用户需求即可。

类(class)

由类(class)构造(construct)对象的过程称为创建类的实例(instance)。

构造器

  1. 构造器与类同名
  2. 每个类可以有一个以上的构造器
  3. 每个构造器可以有0个、1个或多个参数
  4. 构造器没有返回值
  5. 构造器总是伴随着new操作一起调用

方法

在JAVA中所有的方法都在类中(但并不表示它们是内联方法)。
在C++中通常在类外,如果定义在类内部,这个方法将自动成为内联(inline)方法。

//C++
void Employee::raiseSalry(double byPercent)
{
...
}
class Employee
{
...
int getName(){return name;}//inline in C++
}

静态域与静态方法

静态域

每个类中只有一个这样的域

class Employee
{
private static int nextId = 1;
}
静态常量
public class Math
{
public static final double PI = 3.1415926;
}
静态方法

静态方法是一种不能向对象实施操作的方法,大白话:静态方法就是类的,和对象无关。
Employee类的静态方法不能访问id实例域,因为它不能操作对象。但是静态方法可以访问自身类中的静态域。

class Employee
{
private static int nextId = 1;
private int id;

//静态方法
	public static int getNextld()
	{
	return nextId; / / returns static field
	}
}

静态对象可以访问静态方法,但不推荐,一般还是Empoyee.getNextId();

在下面2种情况下使用静态方法 :
1.方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如:Math.pow())
2. 一个方法只需要访问类的静态域 ( 例如:Empoyee.getNextId())

方法参数

按值调用(call by value)

表示方法接收的是调用者提供的值
Java 程序设计语言总是采用按值调用

按引用调用(call by reference)

表示方法接收的是调用者提供的变量地址

方法参数共有两种类型:
1.基本数据类型(数字 、 布尔值)
2.对象引用

java中方法参数的使用情况:

  1. 一个方法不能修改一个基本数据类型(整数型或布尔型)的参数
  2. 一个方法可以改变一个对象参数的状态
  3. 一个方法不能让对象参数引用一个新的对象
    针对第三点看下面这个例子:
public static void swap(Employee x,Employee y){
	Employee t;
	t=x;
	x=y;
	y=t;
}
//如果 Java 对对象采用的是按引用调用,那么这个方法就应该能够实现交换数据的效果
//但是!!!
Employee a = new("alice",...);
Employee b = new("bob",...);
swap(a,b);
//方法并没有改变存储在变量a和b中的对象引用。swap方法的参数 x和 y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。
//在方法结束时参数变量X 和 y 被丢弃了 

JAVA 核心技术 卷Ⅰ 第四章_第1张图片

包(package)

java允许使用包将类组织起来,如果两个程序员都创建了Employee类,只需将他们放到不同的包里,就不会引起冲突。因为因特网域名独一无二的特性,一般推荐已逆序的形式作为包名。
例如公司域名:aaa.bbb.com
包名推荐:com.bbb.aaa
子包名推荐:com.bbb.aaa.xxx

类的导入

一个类可以使用所属包的所有类,一级其他包的公有类(public class)。有两种方式可以访问其他包的公有类:
1.在类名前添加完整的包名(不推荐)。

java.time.LocalData tody = java.time.LocalDate.now();

假设两个包里都有Date类,如果编译器无法识别究竟用了哪个包的Date类,就需要在前面加上完整的包名。

//都有Date类
import java.util.*;
import java.sql.*;

java.util.Date deadline = new java.util.Date();
java.sql.Date today = new java.sql.Date.(...);

2.用import语句导入一个特定的类或整个包

//这条语句,导入java.until包中所有的类。
import java.until.*;
//这条,导入特定的类
import java.time.LocalDate;

静态导入

import 语句不仅可以导人类,还增加了导人静态方法和静态域的功能

import static java.lang.System.*;
//就可以使用System类的静态方法和静态域,而不必加前缀名
out.println("ye!");//平常:System.out.println("...");

你可能感兴趣的:(JAVA基础学习,java)