1 关键字
2 代码块
3 接口
4 枚举
用一句话说就是:可以直接通过对象.的形式使用,不用new实例化调用
public class Student {String name;int age;static String school;public void show() {System.out.println(name + "---" + age + "---" + school);}
}
/*static关键字的特点 :1 静态成员被该类的所有对象的进行共享2 静态成员可以通过类名调用 , 也可以通过对象进行调用 , 推荐使用类名3 静态成员随着类的加载而加载 , 优先于对象存在*/
public class StudentTest {public static void main(String[] args) {Student.school = "清华大学";Student s = new Student();s.name = "张三";s.age = 23;s.show();Student s2 = new Student();s2.show();}
}
final关键字 : 翻译中文代表最终的意思 , 是java的一个关键字 也是一个修饰符 , 可以修饰类 , 可以修饰方法 , 也可以修饰变量
final关键字修饰的特点
package com.itheima.final_demo;/*final的特点final修饰的类 , 不能被继承, 也就是没有子类final修饰的方法 , 不能被重写final修饰的变量基本数据类型 : 值不可以发生改变引用数据类型 : 地址不可发生改变 , 对象的内容可以发生改变注意 :1 被final修饰的变量 , 我们叫做自定义常量 , 命名规范 : 每个字母需要大写 , 多个单词之间用下划线分割2 final修饰成员变量需要注意初始化时机的问题1) 直接赋值2) 在构造方法执行完毕前赋值*/
public class FinalDemo1 {public static void main(String[] args) {// final修饰的基本数据类型变量 , 值不能被修改
// final int num = 10;
// num = 20;
// System.out.println(num);final int[] arr = {1, 2, 3, 4, 5};// final修饰的引用数据类型 , 地址不可改发生改变// arr = new int[3];// final修饰的引用数据类型 , 对象中的内容可以发生改变arr[0] = 100;}
}// final修饰的类 , 不能被继承, 也就是没有子类
//final class Person {
//
//}class Person {// final修饰的方法 , 不能被重写public final void eat() {}
}class Student extends Person {// final修饰成员变量需要注意初始化时机的问题// 要么直接赋值 , 要么在构造方法执行完毕前赋值// final int num = 10;final int num;public Student() {num = 100;}// @Override
// public void eat() {
// super.eat();
// }
}
public – protected – 默认的 – private
package com.itheima.permissions_demo1;/*public -- protected -- 默认的 -- private*/
public class Fu {public void method1() {}protected void method2() {}void method3() {}private void method4() {}// 同一个包中同一个类public void show(){method1();method2();method3();method4();}}
===================================================package com.itheima.permissions_demo1;public class Test {// 同一个包中 , 无关类public void show(){Fu f = new Fu();f.method1();f.method2();f.method3();// f.method4();}
}
====================================================
package com.itheima.permissions_demo1;public class Zi extends Fu {// 用一个包中 , 有子类父关系public void show(){method1();method2();method3();// method4();}
}
package com.itheima.permissions_demo2;import com.itheima.permissions_demo1.Fu;public class Test {// 不同包中 , 无关类public void show(){Fu f = new Fu();f.method1();// f.method2();// f.method3();// f.method4();}
}======================================package com.itheima.permissions_demo2;import com.itheima.permissions_demo1.Fu;public class Zi extends Fu {// 不同包中 , 有子类父关系public void show(){method1();method2();// method3();// method4();}
}
package com.itheima.code_block;
/*构造代码块*/
public class Student {final int NUM;{NUM = 10;System.out.println("构造代码块...");}public Student() {System.out.println("空参构造...");}public Student(int a) {System.out.println("有参构造...");}
}class StudentTest {public static void main(String[] args) {Student s = new Student();Student s2 = new Student(10);}
}
静态代码块 : 在一对大括号前加上static关键字 , 定义在类中方法外
执行时机 : 随着类的加载而加载 , 只加载一次
作用 : 一般用于给静态成员初始化
package com.itheima.code_block.static_demo;
/*静态代码块 :1 定义的位置 : 在一对大括号前加上static , 定义在类中方法外2 执行时机 ; 随着类的加载而执行, 只加载一次3 可以给类中的静态成员进行初始化数据*/
public class Test {public static void main(String[] args) {new Student();new Student(10);}
}
class Student {
static {
System.out.println(“静态代码块”);
}
public Student() {System.out.println("空参构造");
}public Student(int a) {System.out.println("有参构造");
}
}
### 2.3 局部代码块- 成员代码块 : 用一对大括号表 , 可以定义在任何的局部位置 , 方法中居多
- 执行时机 : 正常执行(从上往下依次执行)
- 控制变量的局部变量的声明周期```java
package com.itheima.code_block.local_demo;
/*局部代码块 :1 位置 : 可以定义任何的局部的位置 , 方法中居多2 执行时机 : 正常执行(从上往下依次执行)3 作用 : 控制变量的生命周期 , 变量在使用完毕, 及时释放内存
*/
public class Test {public static void main(String[] args) {int num1 = 10;System.out.println(num1);// 局部代码块{int num2 = 20;System.out.println(num1);System.out.println(num2);}System.out.println(num1);
// System.out.println(num2);// 作用域不够 , 报错}
}
package com.itheima.interface_demo;public interface Inter {public abstract void show();public abstract void method();
}interface Inter2 {}
package com.itheima.interface_demo;public class InterImpl extends Object implements Inter ,Inter2{@Overridepublic void show() {}@Overridepublic void method() {}
}
package com.itheima.interface_demo;/*1 定义接口的关键字使用interfacepublic interface 接口名{ ... }2 类与接口的关系是实现关系 , 使用implements进行连接public class 类名 implements 接口名{ ... }3 接口不能实例化(不能创建对象)4 接口的子类,我们叫做实现类要么重写接口中所有的抽象方法要么这个实现类是一个抽象类注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口还可以继承一个类的同时 , 实现多个接口*/
public class InterfaceDemo1 {public static void main(String[] args) {// 接口不能实例化(不能创建对象)// Inter inter = new Inter();}
}
package com.itheima.interface_demo;public interface Inter {// 是一个常量 , 默认修饰符 public static finalpublic static final int num = 10;// 不存在构造方法// public Inter(){}public abstract void show();public abstract void method();
}interface Inter2 {}
public class InterfaceDemo1 {public static void main(String[] args) {// 接口不能实例化(不能创建对象)// Inter inter = new Inter();// 成员变量被static修饰System.out.println(Inter.num);// 是一个常量 , 只能赋值一次// Inter.num = 20;}
}
package com.itheima.interface_demo.interface_test;public interface player {public abstract void play();public abstract void pause();public abstract void stop();
}
package com.itheima.interface_demo.interface_test;public class MP3 implements player {@Overridepublic void play() {System.out.println("MP3开始播放音乐");}@Overridepublic void pause() {System.out.println("MP3开始暂停");}@Overridepublic void stop() {System.out.println("MP3开始关闭音乐");}
}
package com.itheima.interface_demo.interface_test;public class MP4 implements player {@Overridepublic void play() {System.out.println("MP4播放音乐");}@Overridepublic void pause() {System.out.println("MP4暂停音乐");}@Overridepublic void stop() {System.out.println("MP4关闭音乐");}
}
package com.itheima.interface_demo.interface_test;
/*需求 :1 创建一个播放接口 player2 定义三个抽象方法 , 播放(play),暂停(pause),停止(stop)3 定义MP3类,MAP4类,手机类,实现接口,重写抽象方法*/
public class PlayerTest {public static void main(String[] args) {MP3 mp3 = new MP3();mp3.play();mp3.pause();mp3.stop();System.out.println("=============");MP4 mp4 = new MP4();mp4.play();mp4.pause();mp4.stop();}
}
枚举 : 当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型
作用 : 更贴切 , 加见名之意
定义 : public enum 枚举名{ … }
使用 : 通过枚举类型名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL
注意 : 每个枚举项都相当于枚举的对象
案例代码
package com.itheima.enum_demo;public enum Sex {// 每一个枚举项都是枚举的对象GIRL("女孩"), BOY("男孩"), YAO;// 成员变量private String name;// 空参构造方法private Sex() {}// 有参构造方法private Sex(String name) {this.name = name;}// 成员方法public String getName() {return name;}
}class Test {public static void main(String[] args) {System.out.println(Sex.GIRL.getName());System.out.println(Sex.BOY.getName());System.out.println(Sex.YAO.getName());}
}
枚举的本质 :
组成部分 :