1.final关键字
(1)修饰类:不可以继承
public final class Animal {
}
(2)修饰方法:被修饰的方法,不能被重写
public final void method(){
System.out.println("!!!");
}
(3)修饰变量:不可二次赋值,修饰成员变量不能使用set方法二次赋值
(4)修饰对象:不能修改地址值,但可以修改属性值
public class Dog extends Animal{
final Animal animal = new Animal();
animal = new Animal(); //错误
}
2.代码块
(1)构造代码块:优于构造方法执行,每new一次就执行一次
(2)静态代码块:优于构造代码块和构造方法之前执行,且只执行一次
package bilibili.chapter11;
public class Animal {
public Animal(){
System.out.println("我是构造方法");
}
public final void method(){
System.out.println("!!!");
}
//构造代码块
{
System.out.println("我是构造代码块");
}
//静态代码块
static {
System.out.println("我是静态代码块");
}
}
(3)应用场景
3.内部类
(1)成员内部类(静态、非静态)
package bilibili.chapter11;
public class Person {
public String name="yxc";
public void method(){
System.out.println("人类方法");
}
//静态成员内部类
static class Heart{
public void jump(){
System.out.println("心在跳");
}
}
//非静态成员类
class Leg{
//内部类的成员变量
String name = "胳膊";
public void click(){
Person.this.name = "yzq";
System.out.println("打人");
}
public void display(String name){
System.out.println(name);
System.out.println(this.name);
//外部类的成员变量
System.out.println(Person.this.name);
}
}
}
调用
package bilibili.chapter11;
public class test {
public static void main(String []args){
//静态成员内部类的实现类
Person.Heart heart = new Person.Heart();
heart.jump();
//非静态成员内部类的实现类
Person.Leg leg = new Person().new Leg();
leg.display("肘子");
}
}
(2)局部内部类
可以定义在方法里,代码块里,构造方法里
public class Person {
public String name="yxc";
public void method(){
System.out.println("人类方法");
class Heart{
public void jump(){
System.out.println("局部内部类的心在怦怦跳");
}
}
new Heart().jump();
}
}
调用
//局部内部类
Person person = new Person();
person.method();
局部内部类实际操作:定义类,实现接口,重写方法,创建对象,调用方法
public class test {
public static void main(String []args){
USB usb = method();
usb.open();
}
public static USB method(){
class Mouse implements USB{
@Override
public void open() {
System.out.println("鼠标打开");
}
}
return new Mouse();
}
}
(3)匿名内部类
格式:new 接口/类(){
重写的方法()
}.方法();
//匿名内部类
USB usb2 = new USB() {
@Override
public void open() {
System.out.println("匿名内部类方法");
}
};
usb2.open();
}