黑马程序员_java基础笔记(10)...JDK1.5的新特性
—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ——————————
1:静态导入。2:for—each循环。3:自动装箱/拆箱。4:可变参数。5:枚举。6:注解。7:泛型
1,静态导入
2,for—each循环
public static int add(int x,int ...args) {
int sum = x;
for(int arg:args) {
sum += arg;
}
return sum;
}
3,自动装箱/拆箱
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1 == num2); //true
Integer num3 = 129;
Integer num4 = 129;
System.out.println(num3 == num4); //false
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);
System.out.println(num5 == num6); //true
Flyweight(享元)模式是构造型模式之一,他通过与其他类似对象共享数据来减少内存占用。也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象储存池(Flyweight Pool)来内存内部状态的对象。为了调用方便,FlyweightFactory类一般使用Singleton模式实现。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。
Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。当一下情况成立时使用Flyweight模式:1,一个应用程序使用了大量的对象。2.完全由于使用大量的对象,造成很大的储存开销。3,对象的大多数状态都可以变为外部状态。4,如果删除对象以外的状态那么可以用相对减少的共享对象取代很多组对象。5,应用程序不依赖于对象标识。
4,可变参数
Overlead重载 Override重写
特点:
只能出现在参数列表的最后
...位于参数类型和参数名之间,前后有无空格都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
举例代码:
public static void main(String[] args) {
System.out.println(add(1,2,3,5));
System.out.println(add(2,3,5));
}
public static int add(int x,int ...args) {
int sum = x;
for(int i=0;i<args.length;i++) {
sum += args[i];
}
return sum;
}
5,枚举
/*
编写一个关于星期几的枚举,要求:
1.枚举值:MON,TUE,WED,THU,FRI,SAT,SUN
2.该枚举要有一个方法,调用该方法返回中文格式的星期。
*/
public enum WeekDay {
SUN(0,"星期天"){
public WeekDay getNextDay(){
return MON;
}
},
MON(1,"星期一"){
public WeekDay getNextDay(){
return TUE;
}
},
TUE(2,"星期二"){
public WeekDay getNextDay(){
return WED;
}
},
WED(3,"星期三"){
public WeekDay getNextDay(){
return THU;
}
},
THU(4,"星期四"){
public WeekDay getNextDay(){
return FRI;
}
},
FRI(5,"星期五"){
public WeekDay getNextDay(){
return SAT;
}
},
SAT(6,"星期六"){
public WeekDay getNextDay(){
return SUN;
}
};
private String chineseFormat;//封装每个对象对应的中文格式
private Integer digitalFormat;//封装每个对象对应的数字格式
private WeekDay(Integer digitalFormat,String chineseFormat){
this.digitalFormat = digitalFormat;
this.chineseFormat = chineseFormat;
}
public String getChineseFormat(){
return this.chineseFormat;
}
public Integer getDigitalFormat(){
return this.digitalFormat;
}
public abstract WeekDay getNextDay();
}
6,注解
枚举和注解都是特殊的类,不能用new 创建它们的实例对象,创建枚举的实例对象就是在其中增加元素。
在程序中创建出一个注解的实例对象,直接用@放上一个标记即可

MetaAnnotation ma = myAnnotation.annotationAttr();
System.out.println(ma.value());
7,泛型
Vector<? extends Number> y = new Vector<Integer>();
Vector<Number> x = y;
上面的代码错误,原理与Vector<Object > x11 = new Vector<String>();相似,只能通过强制类型转换方式来赋值。
HashMap<String,Integer> hm = new HashMap<String,Integer>();
hm.put("zxx",19);
hm.put("lis",18);
Set<Map.Entry<String,Integer>> mes= hm.entrySet();
for(Map.Entry<String,Integer> me : mes) {
System.out.println(me.getKey() + ":" + me.getValue());
}
C++用模板函数引用自定义泛型
return x+y;
}
return x+y;
}
return x+y;
}
template<class T>
T add(T x,T y) {
return (T) (x+y);
}
定义泛型方法:
<T> T add(T x,T y) {
return (T) (x+y);
//return null;
}
static <E> void swap(E[] a, int i, int j) {
E t = a[i];
a[i] = a[j];
a[j] = t;
}//或用一个面试题讲:把一个数组中的元素的顺序颠倒一下
public static <K,V> V getValue(K key) { return map.get(key);}
1.Java中的泛型类型(或者泛型)类似于 C++ 中的模板。但是这种相似性仅限于表面,Java 语言中的泛型基本上完全是在编译器中实现,用于编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码,这种实现技术称为擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)。这是因为扩展虚拟机指令集来支持泛型被认为是无法接受的,这会为 Java 厂商升级其 JVM 造成难以逾越的障碍。所以,java的泛型采用了可以完全在编译器中实现的擦除方法。
例如,下面这两个方法,编译器会报告错误,它不认为是两个不同的参数类型,而认为是同一种参数类型。
private static void applyGeneric(Vector<String> v){
}
private static void applyGeneric(Vector<Date> v){
}
2.测试代码:
String[] strs = new String[]{"a","b","c"};
swap(strs,1,2);
System.out.println(Arrays.asList(strs));
4. 只有引用类型才能作为泛型方法的实际参数,对于add方法,使用基本类型的数据进行测试没有问题,这是因为自动装箱和拆箱了。 swap(new int[3],3.5);语句会报告编译错误,这是因为编译器不会对new int[3]中的int自动拆箱和装箱了,因为new int[3]本身已经是对象了,你想要的有可能就是int数组呢?它装箱岂不弄巧成拙了。
5.用下面的代码说明对异常如何采用泛型:
private static <T extends Exception> sayHello() throws T
{
try{
}catch(Exception e){
throw (T)e;
}}
类型参数的类型推断
fill(new Integer[3],3.5f) → static <T> void fill(T[] a, T v)
int x =(3,3.5f) → static <T> T add(T a, T b)
copy(new Integer[5],new String[5]) à static <T> void copy(T[] a,T[] b);
copy(new Vector<String>(), new Integer[5]) → static <T> void copy(Collection<T> a , T[] b);
定义泛型类型:主要分两大类:1,自定义泛型方法。2,自定义泛型类和反射泛型。
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getById(int id){}
}
—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ——————————
黑马程序员_java基础笔记(10)...JDK1.5的新特性的更多相关文章
- 黑马程序员_java基础笔记(06)...集合
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...
- 黑马程序员_java基础笔记(05)...String类
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— java.lang包 基本信息中 String就是C++.java等编程语言中的字符 ...
- 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 基本标签(a.p.img.li.table.div.span).表单标签.ifra ...
- 黑马程序员_java基础笔记(07)...IO流
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...
- 黑马程序员_java基础笔记(04)...多线程
——————————ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 多线程.第一重点:创建线程的两种方式.第二重点:同步的所有特性 进程:正在执 ...
- 黑马程序员_java基础笔记(03)...面向对象
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : ...
- 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...
- 黑马程序员_java基础笔记(14)...交通灯管理系统_编码思路及代码
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,面试题——交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ...
- 黑马程序员_java基础笔记(11)...反射
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,字节码.2,Constructor类.3,Field类.4,Method类.5 ...
随机推荐
- python学习笔记2-文件操作
一.文件操作 #文件操作一定要注意文件指针 f=open('','a+,encoding=utf-8) f.seek(0) #文件指针移到行首 f.tell()#查看文件指针的位置 f.read()# ...
- JS对象中的原型
对象的原型:每个对象都连接一个原型对象,并且它可以从中继承属性.所有通过对象字面量创建的对象都连接到object.prototype.当你创建一个新对象时,你可以选择某个对象作为它的原型.原型连接在更 ...
- 【专题】计数问题(排列组合,容斥原理,Prufer序列)
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...
- 【转】 jquery easyui Tab 引入页面的问题
原地址:http://blog.csdn.net/superdog007/article/details/8225518 jQuery Easyui 的tabs插件有两种方式加载某个tab(标签页)上 ...
- 微服务深入浅出(5)-- 声明式调用Feign
Feign的使用 Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单. 配置文件: spring: application: name: eure ...
- 微服务深入浅出(4)-- 负载均衡Ribbon
Spring Cloud中可以使用RestTemplate+Ribbon的解决方案来将负载均衡以代码的形式封装到客户端中. 通过查阅官方文档可以知道,只需要在程序的IoC容器中注入一个restTemp ...
- linux学习记录.4.常用命令
帮助command --help 获取‘command‘命令的帮助 目录与文件 cd /home 进入‘home’目录 cd .. 返回上一级目录 cd 进入个人目录 c ...
- [转]程序进行性能分析工具gprof使用入门
性能分析工具 软件的性能是软件质量的重要考察点,不论是在线服务程序还是离线程序,甚至是终端应用,性能都是用户体验的关键.这里说的性能重大的范畴来讲包括了性能和稳定性两个方面,我们在做软件测试的时候也是 ...
- SpringMVC控制器 跳转到jsp页面 css img js等文件不起作用 不显示
今天在SpringMVC转发页面的时候发现跳转页面确实成功,但是JS,CSS等静态资源不起作用: 控制层代码: /** * 转发到查看培养方案详情的页面 * @return */ @RequestMa ...
- 60、二叉搜索树的第k个结点
一.题目 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 二.解法 package algorithm ...