阿里云做视频网站,今天中国新闻,wordpress异步加载文章,三种常见的网络营销方式内部类
内部类是五大成员之一#xff08;成员变量、方法、构造方法、代码块、内部类#xff09;#xff1b;
一个类定义在另一个类的内部#xff0c;就叫做内部类#xff1b;
当一个类的内部#xff0c;包含一个完整的事物#xff0c;且这个事务不必单独设计#xf…内部类
内部类是五大成员之一成员变量、方法、构造方法、代码块、内部类
一个类定义在另一个类的内部就叫做内部类
当一个类的内部包含一个完整的事物且这个事务不必单独设计就可以把这个事务设计为内部类
Public class Car{//内部类Public class Engine{}}
内部类的四种形式
成员内部类 静态内部类 局部内部类匿名内部类
成员内部类
定义在成员位置的类叫做成员内部类
public class Outner {private String name 科比;private int age 43;//访问内部类的成员变量及方法public static void main(String[] args) {//创建内部类的对象Inner inner new Outner().new Inner();inner.test();}//成员内部类public class Inner{private String name 詹姆斯;private int age 38;public void test(){//访问内部类的成员变量System.out.println(name);System.out.println(age);//访问内部类的成员变量System.out.println(Outner.this.name);System.out.println(Outner.this.age);}}
}
创建内部类的对象new 外部类.new 内部类
在内部类中调用外部类的成员变量 外部类.this.外部类的成员变量 静态内部类
在内部类中用static修饰的内部类叫做静态内部类
public class Outner {static String name 科比;private int age 43;public static void main(String[] args) {//创建内部类的对象new Outner.Inner().test();}static class Inner{public void test(){//访问外部类的静态方法非静态方法访问不到System.out.println(Outner.name);// System.out.println(Outner.this.age); 报错}}
}
静态内部类只能调用外部类的静态变量
创建内部类对象new 外部类.内部类 局部内部类
局部内部类是定义在方法中的类和局部变量一样只能在方法中有效。所以局部内部类的局限性很强一般在开发中是不会使用的。
public class Outer{public void test(){//局部内部类class Inner{public void show(){System.out.println(Inner...show);}}//局部内部类只能在方法中创建对象并使用Inner in new Inner();in.show();}
}
局部内部类只能在方法中创建对象局限性比较强所以开发中一般不会使用 匿名内部类
匿名内部类是一种特殊的局部内部类因为不需要声明名字所以叫做匿名内部类
new 父类/接口参数值{override重写父类或者接口的方法}
匿名内部类时间上是一个没有名字的子类对象或者接口实现类的无名对象
public class Dome01 {public static void main(String[] args) {//匿名内部类的实现new Animal(){//符合多态思想的编译看左运行看右思想Overridepublic void cry() {System.out.println(狗叫旺旺旺);}}.cry();//匿名对象直接调用Animal的cry方法}
}//创建一个动物的抽象类
abstract class Animal{public abstract void cry();
}
需要注意的是匿名内部类在编写代码时没有名字编译后系统会为自动为匿名内部类生产字节码字节码的名称会以外部类$1.class的方法命名 匿名内部类的作用简化了创建子类对象、实现类对象的书写格式。 匿名内部类的应用场景
只有在调用方法时当方法的参数是一个接口或抽象类时为了简化书写代码而直接传递匿名内部类给方法。
public class Dome01 {public static void main(String[] args) {//匿名内部类对象1new Swimming(){Overridepublic void swim() {System.out.println(狗游泳飞快);}}.swim();//匿名内部类对象2new Swimming(){Overridepublic void swim() {System.out.println(猫不会游泳);}}.swim();}public void go(Swimming s){//将接口Swimming作为形参System.out.println(开始比赛);s.swim();System.out.println(结束比赛);}}
interface Swimming{//接口public void swim();
} 枚举
枚举是一种特殊的类它的格式
Public enum A{X,Y,Z}
其中XYZ叫做枚举项它属于枚举的一个对象。想要获得枚举对象只需要用枚举名调用
枚举类的第一行只能罗列一些名称这些名称都是常量并且每个常量记住的都是枚举类的一个对象。枚举类的构造器都是私有的写不写都只能是私有的因此枚举类对外不能创建对象。枚举都是最终类不可以被继承。 枚举类中从第二行开始可以定义类的其他各种成员。 编译器为枚举类新增了几个方法并且枚举类都是继承java.lang.Enum类的从enum类也会继承到一些方法。
public class Test{public static void main(String[] args){//获取枚举A类的枚举项A a1 A.X;A a2 A.Y;A a3 A.Z;}
}
通过反编译的形式来验证需要用到反编译的命令这里不能直接将字节码拖进idea反编译 枚举类A是用class定义的说明枚举确实是一个类而且XYZ都是A类的对象而且每一个枚举项都是被public static final修饰所以可以类名调用而且不能更改。
枚举类的应用场景
枚举一般表示一组信息然后作为参数进行传输。
我们来看一个案例。比如我们现在有这么一个应用用户进入应用时需要让用户选择是女生、还是男生然后系统会根据用户选择的是男生还是女生推荐不同的信息给用户观看。 public class Dome01 {public static void main(String[] args) {get(GENDER.BOY);get(GENDER.GIRL);}public static void get(GENDER gender){if (gender GENDER.BOY){System.out.println(男生观看);}else {System.out.println(女生观看);}}}
enum GENDER{BOY,GIRL
}
最终再总结一下枚举的应用场景枚举一般表示几个固定的值然后作为参数进行传输
枚举设计单例设计模式
单例设计模型也可以使用枚举进行设计
public class dome01 {public static void main(String[] args) {Singleton instance1 Singleton.INSTANCE;Singleton instance2 Singleton.INSTANCE;System.out.println(instance2 instance1);//判断两个对象的地址值确定只能创建一个对象}
}
enum Singleton{INSTANCE;public void method(){System.out.println(我是一个单例);}}
泛型
认识泛型
所谓泛型就是在定义类、接口、方法的时候同时声明一个或者多个类型变量E称为泛型类泛型接口泛型方法。 泛型的好处在编译阶段可以避免出现一些非法的数据。 泛型的本质把具体的数据类型传递给类型变量。
自定义泛型
//这里的T,W其实指的就是类型变量可以是一个也可以是多个。
public class 类名T,W{} ArrayList的底层实现
//定义一个泛型类用来表示一个容器
//容器中存储的数据它的类型用E先代替用着等调用者来确认E的具体类型。
public class MyArrayListE{private Object[] array new Object[10];//定一个索引方便对数组进行操作private int index;//添加元素public void add(E e){array[index]e;index;}//获取元素public E get(int index){return (E)array[index];}
}
测试类来测试自定义的泛型类MyArrayList是否能够正常使用
public class Test{public static void main(String[] args){//1.确定MyArrayList集合中元素类型为String类型MyArrayListString list new MyArrayList();//此时添加元素时只能添加String类型list.add(张三);list.add(李四);//2.确定MyArrayList集合中元素类型为Integer类型MyArrayListInteger list1 new MyArrayList();//此时添加元素时只能添加String类型list.add(100);list.add(200);}
}