江苏国龙翔建设公司网站,网站界面设计的主要内容,网站升级建设费用吗,动易网站后台编辑器无效问题面向对象9
一.内部类
1、什么是内部类#xff1f;
将一个类A定义在另一个类B里面#xff0c;里面的那个类A就称为内部类#xff08;InnerClass#xff09;#xff0c;类B则称为外部类#xff08;OuterClass#xff09;。
2、为什么需要内部类#xff1f;
具体来说…面向对象9
一.内部类
1、什么是内部类
将一个类A定义在另一个类B里面里面的那个类A就称为内部类InnerClass类B则称为外部类OuterClass。
2、为什么需要内部类
具体来说当一个事物A的内部还有一个部分需要一个完整的结构B进行描述而这个内部的完整的结构B又只为外部事物A提供服务不在其他地方单独使用那么整个内部的完整结构B最好使用内部类。
总的来说遵循高内聚、低耦合的面向对象开发原则。
3、内部类使用举例
Thread类内部声明了State类表示线程的生命周期 HashMap类中声明了Node类表示封装的key和value
4、内部类的分类参考变量的分类
成员内部类直接声明在外部类的里面。 使用static修饰的静态的成员内部类 不使用static修饰的非静态的成员内部类
局部内部类声明在方法内、构造器内、代码块内的内部类 匿名的局部内部类 非匿名的局部内部类
5、内部类主要知识
成员内部类的理解 如何创建成员内部类的实例 如何在成员内部类中调用外部类的结构 局部内部类的基本使用
6、关于成员内部类的理解
从类的角度看
内部可以声明属性、方法、构造器、代码块、内部类等结构 此内部类可以声明父类可以实现接口 可以使用final修饰 可以使用abstract修饰
从外部类的成员的角度看
在内部可以调用外部类的结构。比如属性、方法等 除了使用public、缺省权限修饰之外还可以使用private、protected修饰
可以使用static修饰
二、枚举类的使用
1、枚举类的理解
枚举类型本质上也是一种类只不过是这个类的对象是有限的、固定的几个不能让用户随意创建。
2、举例 星期Monday(星期一)......Sunday(星期天) 性别Man(男)、Woman(女) 月份January(1月)......December(12月) 季节Spring(春节)......Winter(冬天) 三原色red(红色)、green(绿色)、blue(蓝色) 支付方式Cash现金、WeChatPay微信、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡) 就职状态Busy(忙碌)、Free(空闲)、Vocation(休假)、Dimission(离职) 订单状态Nonpayment未付款、Paid已付款、Fulfilled已配货、Delivered已发货、Checked已确认收货、Return退货、Exchange换货、Cancel取消 线程状态创建、就绪、运行、阻塞、死亡
3、开发中的建议
开发中如果针对于某个类其实例是确定个数的。则推荐将此类声明为枚举类。 如果枚举类的实例只有一个则可以看做是单例的实现方式。
4、JDK5.0 之前如何自定义枚举类 了解
class Season{//2. 声明当前类的对象的实例变量,使用private final修饰private final String seasonName;//季节的名称private final String seasonDesc;//季节的描述
//1. 私有化类的构造器private Season(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}
//3. 提供实例变量的get方法public String getSeasonName() {return seasonName;}
public String getSeasonDesc() {return seasonDesc;}//4. 创建当前类的实例需要使用public static final修饰public static final Season SPRING new Season(春天,春暖花开);public static final Season SUMMER new Season(夏天,夏日炎炎);public static final Season AUTUMN new Season(秋天,秋高气爽);public static final Season WINTER new Season(冬天,白雪皑皑);
Overridepublic String toString() {return Season{ seasonName seasonName \ , seasonDesc seasonDesc \ };}
}
5、JDK5.0中使用enum定义枚举类
enum Season1 implements Info{//1. 必须在枚举类的开头声明多个对象。对象之间使用,隔开SPRING(春天,春暖花开),SUMMER(夏天,夏日炎炎),AUTUMN(秋天,秋高气爽),WINTER(冬天,白雪皑皑);
//2. 声明当前类的对象的实例变量,使用private final修饰private final String seasonName;//季节的名称private final String seasonDesc;//季节的描述
//3. 私有化类的构造器private Season1(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}
//4. 提供实例变量的get方法public String getSeasonName() {return seasonName;}
public String getSeasonDesc() {return seasonDesc;}
Overridepublic String toString() {return Season1{ seasonName seasonName \ , seasonDesc seasonDesc \ };}
Overridepublic void show() {System.out.println(这是一个季节);}
}
6、Enum中的常用方法:
6.1 使用enum关键字定义的枚举类默认其父类是java.lang.Enum类 使用enum关键字定义的枚举类不要再显示的定义其父类。否则报错。 6.2 熟悉Enum类中常用的方法 String toString(): 默认返回的是常量名对象名可以继续手动重写该方法 (关注)static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值是一个静态方法 (关注)static 枚举类型 valueOf(String name)可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是会有运行时异常IllegalArgumentException。 String name():得到当前枚举常量的名称。建议优先使用toString()。 int ordinal():返回当前枚举常量的次序号默认从0开始
7、枚举类实现接口的操作
情况1枚举类实现接口在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时执行的是同一个方法。 情况2让枚举类的每一个对象重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时执行的是不同的实现的方法。
三、注解的使用
1、Annotation的理解
注解Annotation是从JDK5.0开始引入以“注解名”在代码中存在。 Annotation 可以像修饰符一样被使用可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。 还可以添加一些参数值这些信息被保存在 Annotation 的 “namevalue” 对中。 注解可以在类编译、运行时进行加载体现不同的功能。
2、注解的应用场景
示例1生成文档相关的注解 示例2在编译时进行格式检查(JDK内置的三个基本注解) 示例3跟踪代码依赖性实现替代配置文件功能
3、Java基础涉及到的三个常用注解
Override: 限定重写父类方法该注解只能用于方法
Deprecated: 用于表示所修饰的元素(类方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
SuppressWarnings: 抑制编译器警告
4、自定义注解
以SuppressWarnings为参照进行定义即可。
5、元注解的理解
元注解对现有的注解进行解释说明的注解。
1Target用于描述注解的使用范围 可以通过枚举类型ElementType的10个常量对象来指定 TYPEMETHODCONSTRUCTORPACKAGE.....
2Retention用于描述注解的生命周期 可以通过枚举类型RetentionPolicy的3个常量对象来指定 SOURCE源代码、CLASS字节码、RUNTIME运行时 唯有RUNTIME阶段才能被反射读取到。
3Documented表明这个注解应该被 javadoc工具记录。
4Inherited允许子类继承父类中的注解 框架 注解 反射 设计模式
四、包装类的使用
1、为什么要使用包装类
为了使得基本数据类型的变量具备引用数据类型变量的相关特征比如封装性、继承性、多态性我们给各个基本数据类型的变量都提供了对应的包装类。
2、(掌握)基本数据类型对应的包装类类型
byte - Byte short - Short int - Integer long - Long float - Float double -Double
char - Character boolean - Boolean
3、掌握基本数据类型 与 包装类之间的转换。
3.1 为什么需要转换
一方面在有些场景下需要使用基本数据类型对应的包装类的对象。此时就需要将基本数据类型的变量转换为包装类的对象。比如ArrayList的add(Object obj);Object类的equals(Object obj) 对于包装类来讲既然我们使用的是对象那么对象是不能进行 - * /等运算的。为了能够进行这些运算就需要将包装类的对象转换为基本数据类型的变量。
3.2 如何转换
装箱基本数据类型 --- 包装类① 使用包装类的构造器 ② 建议调用包装类的valueOf(xxx xx) 拆箱包装类 --- 基本数据类型调用包装类的xxxValue()
注意原来使用基本数据类型变量的位置改成包装类以后对于成员变量来说其默认值变化了
jdk5.0新特性自动装箱、自动拆箱。 //自动装箱: 基本数据类型 --- 包装类int i1 10;Integer ii1 i1; //自动装箱System.out.println(ii1.toString());
Integer ii2 i1 1; //自动装箱
Boolean bb1 true;//自动装箱
Float f1 12.3F; //自动装箱
//自动拆箱:包装类 --- 基本数据类型
int i2 ii1; //自动拆箱
boolean b1 bb1;//自动拆箱
4、String 与 基本数据类型、包装类之间的转换。
基本数据类型、包装类 --- String类型① 调用String的重载的静态方法valueOf(xxx xx) ; ② 基本数据类型的变量
String类型 --- 基本数据类型、包装类: 调用包装类的静态方法parseXxx() String s1 123;int i1 Integer.parseInt(s1);System.out.println(i1 10);String s2 true;boolean b1 Boolean.parseBoolean(s2);//方式1调用String的重载的静态方法valueOf(xxx xx)int i1 10;String str1 String.valueOf(i1);System.out.println(str1);//10
boolean b1 true;Boolean b2 b1;String str2 String.valueOf(b1);String str3 String.valueOf(b2);
//方式2基本数据类型的变量 String str4 i1 ;String str5 b1 ;