类和对象
class MyClassName {
DataType memberVariableName = InitialValue;
ReturnType memberMethodName(ParameterList) {
MethodBody;
}
}
基本数值类型 -> 0
boolean 类型 -> false
引用类型 -> null
static
和 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.String
java.text.Dateformat
类中 format
方法java.lang.Thread
类中 MAX_PRIORITY
public 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();
volatile
private static Singleton sin = null;
extends
(扩展) 关键字来表示继承public class Worker extends Person
Person
类叫超类, 父类, 基类Worker
类叫派生类, 子类, 孩子类super()
.@Override
注解, 若没有构成重写则编译报错修饰符 | 本类 | 同一个包中的类 | 子类 | 其他类 |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | - |
默认 | 可以访问 | 可以访问 | - | - |
private | 可以访问 | - | - | - |
注意事项
public
修饰的成员可以在任意位置使用private
修饰的成员只能在本类内部使用public
关键字修饰, 成员变量使用 private
关键字修饰package
package 包名
;package 包名1.包名2.包名3...包名n;
org.apache.commons.lang.StringUtil
lang
commons
org.apache
StringUtil
import
关键字导入包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
关键字不能共同修饰一个方法private
final
static
public 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
的私有方法也不可以为 abstract
private
不可以修饰 default
, 因为 default
可能会被实现类重写class
, 而定义接口的关键字为 interface
名称 | 关键字 | 关系 |
---|---|---|
类和类的 | extends | 支持单继承 |
类和接口 | implements | 支持多实现 |
接口和接口 | extends | 支持多继承 |
abstract class
, 而接口是 interface
extends
, 而实现接口的关键字是 implements
访问修饰符 class 外部类的类名 {
访问修饰符 class 内部类的类名 {
内部类的类体;
}
}
Outer$Inner.class
final
或 abstract
private
或 protected
进行修饰this
关键字和"外部类名.this"
的方式区分访问修饰符 class 外部类的类名 {
访问修饰符 static class 内部类的类名 {
内部类的类体;
}
}
StaticOuter$StaticInner.class
new
外部类对象来访问非静态成员"类名."
的方式区分访问修饰符 class 外部类的类名 {
访问修饰符 返回值类型 成员方法名 (形参列表) {
class 内部类的类名 {
内部类的类体;
}
}
}
"OuterClass$1InnerClass.class"
static
关键字修饰符final
的, 由局部内部类和局部变量的声明周期不同所致接口/父类类型 引用变量名 = new 接口/父类类型() {
方法的重写;
}
"MyInterface$1.class"
public static final
表示的常量描述较为繁琐, 使用 enum
关键字来定义枚举类型取代常量public static final
关键字共同修饰"枚举类型."
的方式调用private
private
java.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
, @Repeatable
RententionPolicy.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
数组下标越界异常