
类和对象
class MyClassName {
DataType memberVariableName = InitialValue;
ReturnType memberMethodName(ParameterList) {
MethodBody;
}
}基本数值类型 -> 0boolean 类型 -> false引用类型 -> nullstatic 和 private, 只有内部类才可以 MyClassName myName = new MyClassName();Person p = null;
ReturnType methodName(DataType... args) {}
0 ~ n class MyClassName {
MyClassName(ParameterList) {
Constructor Body;
}
}Person() {}new 关键字创建对象时会自动调用构造方法"this." 的方式调用成员变量和成员方法this 的前缀this 不同, 从而 this 访问的结果也不同this() 的方法, 调用本类的其他构造方法this 前缀, 明确要求该变量是成员变量this 关键字还可以作为方法的返回值private 关键字修饰get 和 set 方法, 在方法中进行合理值的判断set 方法进行合理值判断private 和 public 之间get, set 方法static 关键字和继承static 关键字static 修饰成员变量表示静态的含义static 关键字修饰this 和 super 关键字static 关键字final -- 可以修饰类, 成员方法以及成员变量java.lang.Stringjava.text.Dateformat 类中 format 方法java.lang.Thread 类中 MAX_PRIORITYpublic static final 关键字共同修饰成员变量public static final double PI_CONSTANT = 3.14159{} 括起来的代码块super() 后和目前对象构造方法前执行this 访问成员static 关键字修饰的构造块this 和 super 关键字三要素:
private 关键字修饰private static 关键字共同修饰public static 关键字共同修饰<< 开头和以 >> 结尾的为注释+ 代表 public, - 代表 private, # 代表 protected, 什么都没有代表包可见
实现方式:
private static Singleton sin = new Singleton();volatileprivate static Singleton sin = null;extends (扩展) 关键字来表示继承public class Worker extends PersonPerson 类叫超类, 父类, 基类Worker 类叫派生类, 子类, 孩子类super().@Override 注解, 若没有构成重写则编译报错修饰符 | 本类 | 同一个包中的类 | 子类 | 其他类 |
|---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | - |
默认 | 可以访问 | 可以访问 | - | - |
private | 可以访问 | - | - | - |
注意事项
public 修饰的成员可以在任意位置使用private 修饰的成员只能在本类内部使用public 关键字修饰, 成员变量使用 private 关键字修饰packagepackage 包名;package 包名1.包名2.包名3...包名n;org.apache.commons.lang.StringUtillangcommonsorg.apacheStringUtilimport 关键字导入包import 关键字导入静态成员import static java.lang.System.out记事本, Notepad++, Edit Plus, UltraEdit...IntelliJ IDEA, Eclipse, MyEclipse, JBuilder...ParentClass p = new ChildClass();new 关键字后面的子类类型, 而其它地方无需修改就可以立即生效. 提高了代码的可维护性和可扩展性. if (引用变量 instanceof 数据类型)访问权限 abstract 返回值类型 方法名(形参列表);public abstract void cry();abstract 关键字修饰, 没有方法体abstract 关键字不能共同修饰一个方法privatefinalstaticpublic abstract class Account {}final 关键字不能修饰抽象类abstract 关键字修饰, 不能创建对象abstract 关键字修饰的类public static final/*public static final*/ int CNT = 1;/*public abstract*/ void show();default 关键字修饰private void show();private static void show();interface 的私有方法也不可以为 abstractprivate 不可以修饰 default, 因为 default 可能会被实现类重写class, 而定义接口的关键字为 interface名称 | 关键字 | 关系 |
|---|---|---|
类和类的 | extends | 支持单继承 |
类和接口 | implements | 支持多实现 |
接口和接口 | extends | 支持多继承 |
abstract class, 而接口是 interfaceextends, 而实现接口的关键字是 implements访问修饰符 class 外部类的类名 {
访问修饰符 class 内部类的类名 {
内部类的类体;
}
}Outer$Inner.classfinal 或 abstractprivate 或 protected 进行修饰this 关键字和"外部类名.this"的方式区分访问修饰符 class 外部类的类名 {
访问修饰符 static class 内部类的类名 {
内部类的类体;
}
}StaticOuter$StaticInner.classnew 外部类对象来访问非静态成员"类名."的方式区分访问修饰符 class 外部类的类名 {
访问修饰符 返回值类型 成员方法名 (形参列表) {
class 内部类的类名 {
内部类的类体;
}
}
}"OuterClass$1InnerClass.class"static 关键字修饰符final 的, 由局部内部类和局部变量的声明周期不同所致接口/父类类型 引用变量名 = new 接口/父类类型() {
方法的重写;
}"MyInterface$1.class"public static final 表示的常量描述较为繁琐, 使用 enum 关键字来定义枚举类型取代常量public static final 关键字共同修饰"枚举类型."的方式调用privateprivatejava.lang.Enum 类, 常用方法如下常用方法 | 描述 |
|---|---|
static T[] values() | 返回当前枚举类中的所有对象 |
String toString() | 返回当前枚举类对象的名称 |
int ordinal() | 获取枚举对象在枚举类的索引位置 |
static T | 将参数指定的字符串名转为当前 |
valueOf(String str) | 枚举类的对象 |
int compareTo(E o) | 比较两个枚举对象在定义时的顺序 |
public enum DirectionEnum implements MyInterface {
UP("上") {
@Override
... overridedMethod(...) {
...
}
},
DOWN("下") {...},
LEFT("左") {...},
RIGHT("右"){...};
private final String desc;
private DirectionEnum(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
//@Override
//... overridedMethod(...) {
// ...
//}
}访问修饰符 @interface 注解名称 {
注解成员;
}java.lang.annotation.Annotation 接口@注解名称的方式可以修饰包, 类, 成员方法, 成员变量, 构造方法, 参数, 局部变量的声明等value, 而类型只能是:String 类型, Class 类型(泛型, 如: Class<?> 或 Class<T>), enum 类型,Annotation 类型.public @interface MyAnnotation {
public String value() default "123";
public String value2();
}
@MyAnnotation(value = "hello", value2 = "456")
public class Person {
...
}@Retention, @Documented, @Target, @Inherited, @RepeatableRententionPolicy.SOURCE 只在源码阶段保留, 在编译器进行编译时它将被丢弃忽视RententionPolicy.CLASS 保留到编译进行的时候, 不会被加载到 JVM, 默认方式RententionPolicy.RUNTIME 保留到程序运行的时候, 会被加载到 JVM 中, 程序运行时可以获取@Documented -- 注解将被 javadoc 工具提取进文档javadoc 工具从程序源代码中抽取类, 成员等注释, 形成一个和源代码配套的 API 帮助文档, 而该工具抽取时不包括注解本身Retention 值为 RUNTIME元注解 @Target 的参数类型枚举值 | 描述 |
|---|---|
ElementType.ANNOTATION_TYPE | 可以给一个注解进行注解 |
ElementType.CONSTRUCTOR | 可以给构造方法进行注解 |
ElementType.FIELD | 可以给属性进行注解 |
ElementType.LOCAL_VARIABLE | 可以给局部变量进行注解 |
ElementType.METHOD | 可以给方法进行注解 |
ElementType.PACKAGE | 可以给包进行注解 |
ElementType.PARAMETER | 可以给方法内的参数进行注解 |
ElementType.TYPE | 可以给类型进行注解, 如类 |
@Target 的参数类型枚举值增加两个:元注解 @Target 的参数类型枚举值 | 描述 |
|---|---|
ElementType.TYPE_PARAMETER | 能写在类型变量的声明语句中, 如泛型 |
ElementType.TYPE_USE | 能标注任何类型名称. Use of a type. |
@Inherited -- 子类继承超类的注解@Repeatable -- 表示自然可重复的含义预制注解 | 描述 |
|---|---|
@author | 表明类模块的作者, 多个作者用逗号隔开 |
@version | 表明该类模块的版本 |
@see | 参考转向, 也就是相关主题 |
@since | 从哪个版本开始增加的 |
@param | 对方法中某参数的说明, 如果没有参数就不能写 |
@return | 对方法返回值的说明, 类型为 void 就不能写 |
@Override | 限定重写父类方法, 该注解只能用于方法 |
@exception | 对方法可能抛出的异常进行说明 |
@Deprecated | 用于表示所修饰的元素(类, 方法)等已过时 |
@SuppressWarnings | 抑制编译器警告 |
IllegalArugumentException 非法参数异常ClassCastException 类型转换异常NullPointException 空指针异常ArithmeticException 算术异常ArrayIndexOutOfBoundsException 数组下标越界异常