不关心对象的具体实现,只要能满足用户需求即可。
由类(class)构造(construct)对象的过程称为创建类的实例(instance)。
在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())
表示方法接收的是调用者提供的值
Java 程序设计语言总是采用按值调用
表示方法接收的是调用者提供的变量地址
方法参数共有两种类型:
1.基本数据类型(数字 、 布尔值)
2.对象引用
java中方法参数的使用情况:
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允许使用包将类组织起来,如果两个程序员都创建了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("...");