1、类的基本概念
static
表示类方法,也叫静态方法,与此相对的是实例方法,即没有static修饰,必须通过实例或对象调用,而类方法可以通过类名直接调用- 静态初始化代码块在类加载的时候执行,在任何对象创建之前,且只执行一次
static int STATIC_TWO;
//静态初始化代码块
static {
STATIC_TWO = 2;
}
-
可见性范围从大到小:private<默认(包)<protected<public
-
打包方式:到编译后的Java class文件根目录,运行命令
jar -cvf <包名>.jar <最上层包名>
例如
E:\bin\shuo\laoma\Hello.class
就用jar -cvf hello.jar shuo
-
Object
是所有类的父类,它定义的方法可以直接被所有类使用,有:- equals(): boolean
- getClass(): Class<?>
- hashCode(): int
- notify() void
- notifyAll(): void
- toString() String
- wait() void
- wait(long timeout): void
- wait(long timeout,int nanos) void
-
多态:一种类型的变量可引用多种实际类型对象
2、类的继承
- 重载:方法名相同参数签名(参数个数、类型、顺序)不同;重写:子类重写与父类相同参数签名的方法
- 调用多个重名函数时寻找重载版本中最匹配的,然后才看变量的动态类型惊醒动态绑定
instanceof
表示变量引用的对象是不是该类或其子类的对象,也可以用来判断一个对象是否实现了某接口
public boolean canCast(Base b) {
//返回Base类型变量是否可以转换成Child类型
return b instanceof Child;
}
//判断p是否实现了Comparable接口
Point p = new Point(2,3);
if(p instanceof Comparable) {
return true;
}
- 用
final
防止继承:修饰类或者方法就不能被继承 - 封装就是隐藏实现细节,提供简化接口,是程序设计的第一原则
- 继承可能破坏封装是因为子类和父类之间可能存在着实现细节的依赖
3、类的扩展
- 接口可以降低耦合,提高灵活性,可以代码复用
- java8允许接口中定义两类新方法:静态方法和默认方法
public interface IDemo {
void hello();
//静态方法
public static void test() {
System.out.println("hello");
}
//默认方法
default void hi() {
System.out.println("hi");
}
}
- 抽象类
public class abstracClassTest {
public static void main(String[] args) {
test t = new abstractTest();//注意这个定义
//abstractTest t = new abstractTest();错误的
t.print();
}
}
abstract class test {
public void print() {
System.out.println("hello world");
}
}
class abstractTest extends test {}
- 内部类
- 方法内部类只能在定义的方法中使用
- 匿名内部类只能被使用一次,用来创建一个对象
4、异常
- Java7开始支持一种新的捕获多个异常的语法,用“|”操作符
try {
//exception
}catch (ExceptionA | ExceptionB e){
e.printStackTrace();
}
- 如果在
try
或者catch
语句中有return
语句,则return
语句在finally
语句执行结束后才执行,但是finally
并不能改变返回值 - 避免在finally语句中使用return或者抛出异常
###5、常用基础类 - hashCode:返回对象的哈希值,哈希值是一个int类型的数
1、对两个对象如果equals返回true则hashCode必须一样,返回false可以一样也可以不一样
2、hashCode默认实现一般是将对象的内存地址转换为整数
3、子类如果重写equals方法也必须重写hashCode