代码截图:

代码解析:
该代码演示了接口的继承,接口的实现
比较简单,这里就略过了
修饰符详解
访问控制修饰符
public:公有的,被public修饰的部分可以被任何程序访问
protected:受保护的,被它修饰的成员只能由同包中的类或者其子类访问
default(默认):不写修饰符就是默认的,别写上defalut啊!同包与同类可见
private:私有的,是Java实现封装的关键,被修饰的成员变量与方法只能被类本身访问,同包也不行哦!
注意事项:
不能够使用protected和private修饰类;要么用public修饰,要么不加任何修饰符
其他修饰符:
static:静态修饰符
①静态变量:
用static修饰的变量,在所有对象中共享的数据,都指向内存中的同一地址
即,任何对象对改值的修改都会使存储空间的值发生改变
代码演示:
package com.jay.example;
class Test
{
//定义初始的值为3
static int a = 3;
}
public class StaticTest {
public static void main(String[] args) {
//静态成员变量可以直接通过类名进行访问
System.out.println(Test.a);
//实例化两个对象,在t1中修改a的值,发现t2中的a的值也发生改变
Test t1 = new Test();
t1.a = 4;
Test t2 = new Test();
System.out.println(t2.a);
//输出结果是:
//3
//4
//说明了静态变量都是公用一块内存区域的,任何一个对象
//对值的修改,都会改变对应内存区域的值
}
}
②静态方法:
用static修饰的方法,要注意:
静态方法中,只能够访问静态数据或者直接调用静态方法
可以直接通过类名进行调用
代码演示:
package com.jay.example;
/*
*因为我们的main方法就是静态的方法
*所以我们直接在main方法外定义参数和方法
*验证静态方法只能访问静态成员
* */
public class StaticTest2 {
//定义非静态的数据与方法
int a = 3;
void test(){System.out.println("非静态方法可不能被main调用啊");}
//定义静态的数据和方法
static int b = 4;
static void test2()
{System.out.println("静态方法被main调用了");}
public static void main(String[] args) {
//下面两个语句,如果调用了是会报错的,不信可以试试
//System.out.println(a);
//test();
System.out.println(b);
test2();
}
}
③静态代码块
放在类声明的内部,成员方法与构造方法的外部,该代码块会在该类第一次使用时
执行一次,就不会再执行了,通常是在这里写一些初始化的代码
代码演示:
package com.jay.example;
public class static3 {
static
{
System.out.println("静态代码块,通常用于类的初始化");
}
}
④复杂的成员的初始化问题
当静态数据,静态代码块,对象成员,构造方法等同时存在时,那么成员的初始化顺序又是怎样呢?
其实,初始化顺序是:(静态变量,静态初始化块) --->(变量,变量初始化块)---->构造器
下面我们通过代码来验证这一规律:
package com.jay.example;
public class static3 {
public static String staticStr = "静态成员初始化";
public String str = "普通成员初始化";
//构造方法
public static3() {
System.out.println("构造方法初始化");
}
//普通的初始化块
{
System.out.println(str);
System.out.println("普通的初始化块");
}
//静态的初始化块
static
{
System.out.println(staticStr);
System.out.println("静态的初始化块");
}
public static void main(String[] args) {
static3 st = new static3();
}
}
运行截图:

final:最终修饰符
使用方法
①使用final修饰属性(变量),此时的属性为常量;Java中利用public static final int AGE = 10;对常量进行标识
②空白final变量(没初始化的):空白的final数据成员必须在构造方法中进行初始化,否则会报错
③final常量作为方法的参数,只能够对final进行简单的引用,可不能改变常量的值哦!
④用final来修饰方法:那么该方法为一个不可覆盖的方法,如果父类有final修饰的方法,那么子类继承同一个方法
⑤用final来修饰类:那么该类不可以被继承,final类没有子类;同时该类中所有的方法都默认为final
⑥final并不涉及继承,继承取决于类的修饰符是public还是其他,是否可以继承取决于该类是否对其子类可见
如果一个方法前有private或static的修饰符,那么系统在前面自动地加上final修饰
abstract:抽象修饰符
被abstract修饰的类为抽象类,修饰的方法为抽象方法
transient:
用于修饰不想序列化,持久化的成员
volatile:
保证可见性和防止重排序,用的比较少,是并发操作那块的
枚举类型
枚举解析:
①作为jdk 1.5 后引入的枚举,用来代替以前定义多个同类型常量的public final static
②用enum表示,作用类似于class关键字;
③构造方法不要用public修饰
④变量和方法的定义需要在枚举值的后面!!!
用法示例:
简单的枚举:
package com.jay.example;
/*
* 本程序演示的是枚举的最简单用法
* 定义枚举Color有三个值,演示了switch和增强for循环遍历枚举
* 中所有的原始的方法
* */
enum Color
{