---------------------- android培训
、java培训
、期待与您交流! ----------------------
JDK1.5
新特性
:
静态导入
.
普通的
import
语句可以导入一个类或者某个包中所有的类
.
import static
语句导入
静态导入方法
import static java.lang.Math.*;
可变参数
:
一个方法接受的参数个数不固定
.
可变的特点
:
1.
只能出现在参数列表的最后
2.
位于变量类型和变量名之间
,
前后有无空格都可以
3.
调用可变参数和方法时
,
编译器为该可变参数隐含创建一个数组
,
在方法体中以数组的形式访问可变参数
.
增强
for
循环
语法
:for(type
变量名
:
集合变量名
){…}
注意
:
迭代变量必须在
()
中定义
集合变量可以是数组或实现了
iterable
接口的集合类
自动装箱拆箱
Integer iObj=3;
自动把基本数据类型装成一个
Integer
对象在赋给引用变量
syso(iObj+12);
自动拆箱
引入享元数据模式
:flyweight
当对象很小
,
很多个地方要用到这些小的对象
,
可以把这些对象的共性抽取出来封装成一个对象
,
把不同的地方当成方法的参数传递给该对象
.
不同的部分叫做外部状态
,
相同的部分叫做内部状态
.
枚举
:
定义的构造方法和其他信息都必须位于元素列表之后
.
枚举中的元素等效于静态的成员变量
.
在调用执行的时候会调用相应的构造方法
.
枚举元素必须位于开始部分
,
元素列表后面用
;
号与其他元素分隔
,
枚举相当于一个类
,
其中可以定义构造方法
,
成员变量
,
普通方法和抽象方法
.
带构造方法的枚举
:
1.
构造方法必须私有
,
2.
如果有多个构造方法
,
看元素类型的参数来选择构造方法
,MON
和
MON())
效果一样
,
都是调用默认的构造方法
.
带抽象方法的枚举
,
交通灯例子
.
枚举只有一个成员时
,
可以作为一种单例设计模式
.
因为构造方法已经私有化了
,
元素是自然的
new
出来
.
不用
getInstance.
public class TestEnum {
/*最普通的枚举*/
public enum ColorSelect {
red, green, yellow, blue;
}
/* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样. */
public enum Season {
// 枚举列表必须写在最前面,否则编译出错
winter, spring, summer, fall;
private final static String location = "Phoenix";
public static Season getBest() {
if (location.equals("Phoenix"))
return winter;
else
return summer;
}
}
/*还可以有构造方法*/
public enum Temp {
/*通过括号赋值,而且必须有带参构造器和一属性跟方法,否则编译出错
* 赋值必须是都赋值或都不赋值,不能一部分赋值一部分不赋值
* 如果不赋值则不能写构造器,赋值编译也出错*/
absoluteZero(-459), freezing(32),boiling(212), paperBurns(451);
private final int value;
public int getValue() {
return value;
}
//构造器默认也只能是private, 从而保证构造函数只能在内部使用
Temp(int value) {
this.value = value;
}
}
public static void main(String[] args) {
/*
* 枚举类型是一种类型,用于定义变量,以限制变量的赋值 赋值时通过"枚举名.值"来取得相关枚举中的值
*/
ColorSelect m = ColorSelect.blue;
switch (m) {
/*注意:枚举重写了ToString(),说以枚举变量的值是不带前缀的
*所以为blue而非ColorSelect.blue
*/
case red:
System.out.println("color is red");
break;
case green:
System.out.println("color is green");
break;
case yellow:
System.out.println("color is yellow");
break;
case blue:
System.out.println("color is blue");
break;
}
System.out.println("遍历ColorSelect中的值");
/*通过values()获得枚举值的数组*/
for (ColorSelect c : ColorSelect.values()) {
System.out.println(c);
}
System.out.println("枚举ColorSelect中的值有:"+ColorSelect.values().length+"个");
/*ordinal()返回枚举值在枚举中的索引位置,从0开始*/
System.out.println(ColorSelect.red.ordinal());//0
System.out.println(ColorSelect.green.ordinal());//1
System.out.println(ColorSelect.yellow.ordinal());//2
System.out.println(ColorSelect.blue.ordinal());//3
/*枚举默认实现了java.lang.Comparable接口*/
System.out.println(ColorSelect.red.compareTo(ColorSelect.green));
System.out.println(Season.getBest());
for(Temp t:Temp.values()){
/*通过getValue()取得相关枚举的值*/
System.out.println(t+"的值是"+t.getValue());
}
}
}
反射的基石
Class
类
.
Java
类是用于描述一类事物的共性
,
该类事物有什么属性
,
没有什么属性
,
至于这属性的值是什么
,
则是这个类的实例对象来确定的
.Java
程序中的各个
Java
类是同一类事物
,
用
Class
来描述
.
如何得到各个字节码对应的实例对象
(Class
类型
)
1.
类名
.class
2.
对象
.getClass()
3.
Class.rotName(“
类名
”)
Class.isPrimitive()
是否是原始类型的字节码
.
int.class==Integer.TYPE
//true
TYPE
代表这个类型的基本类型的字节码
.
在源程序中出现的类型
,
都有各自的
Class
实例对象
.
例如
int[],void…
反射
:
就是把
Java
类中的各种成分映射成相应的
java
类
.
为什么要用反射
?
可以保持最大的灵活度,比如只要根据类名就可以实例化对象,就可以写到配置文件里面,获取这个字符串来实例化对象,如果需要换成别的类,只需要修改配置文件就行了,不然还需要修改源代码再重新编译等等
.
构造方法的反射
:
Constructor
类代表某个类的一个构造方法
.
得到某个类所有的构造方法
Constructor [] constructors=
Class.forName("java.lang.String").getConstructors();
得到某一个构造方法
Constructor constructor = Class.forName(
“
java.lang.String
”
).getConstructor(StringBuffer.class);
调用获得的方法时要用到和获得方法相同类型的实例对象
.
创建实例对象
:
通常方式
: String
str = new String(new StringBuffer("abc"));
反射方式
: String
str = (String)constructor.newInstance(new StringBuffer("abc"));
Class.newInstance()
方法直接用来创建无参的构造方法的实例对象
.
String obj =
(String)Class.forName("java.lang.String").newInstance();
成员变量的反射
:
Reflectpoint pt1= new ReflectPoint(3,5);
Field fieldY=new ReflectPoint(2,4).getClass.getField(“y”);//fieldY
不是对象身上的变量
,
而是类上的
,
要用它去取某个对象的值要明确他到哪个对象身上去取
.
fieldY.get(pt1);
对于不可见的私有的方法获取
private x;
fieldX.setAccessible(true);
pt1.getClass().getDeclaredField(“x”)
成员方法的反射
.
得到类中的某一个方法
:
Method charAt =
Class.forName("java.lang.String").getMethod("charAt",
int.class);
调用方法
:
反射方式
: System.out.println(charAt.invoke(str,
1));
用反射得到字节码中的某个方法
,
在用这个方法去作用于某个对象
.
如果调用的第一个参数对象为
null,
代表该
method
对象对应的是一个静态方法
!
jdk1.4
和
jdk1.5
的
invoke
方法的区别:
Jdk1.5
:
public Object invoke(Object
obj,Object... args)
Jdk1.4
:
public Object invoke(Object
obj,Object[] args)
,即按
jdk1.4
的语法,需要将一个数组作为参数传递给
invoke
方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用
charAt
方法的代码也可以用
Jdk1.4
改写为
charAt.invoke(
“
str
”
, new Object[]{1})
形式。
有相同和元素类型的数组属于同一个类型
,
有相同的
Class.
基本类型的一维数组可以当作
Object
类型使用
,
不能当作
Object[]
类型使用
;
非基本类型的两种都可以用
.
Arrays.asList();
方法在处理
int[]
和
String[]
时的差异
.
String[]
按
1.4
的处理
.int[]
按
1.5
的把整个数组作为一个对象来处理
.
ArrayList_HashSet
的比较及
Hashcode
分析
.Hashcode
的作用
?
Hashcode
作用
:
每一个用到
Hashset
集合的对象
,
在读取和存储的时候都要计算该对象的
Hashcode
值
,
然后存储在
Hashcode
地址段中
.
在我们要操作一个新的对象时
.
我们要判断这个对象是否存在
,
这时计算该对象的
Hashcode
值
,
然后到相应的地址段中去查找该对象是否存在
.
不用从头到尾每个对象查找对比
,
大大的提高了效率
,
两个对象的
equals
方法相等的话他们的
Hashcode
值肯定相同
,
反过来不一定成立了
.
而且当
Hashcode
的值确定以后
,
不要修改参与哈希值计算的数据的值
,
修改后会造成对这个集合操作时找不到原来相对应对象了
.
修改值会导致内存泄露
.
反射的作用
.
实现框架功能
.
框架与工具的区别
:
工具类是被用户类调用
,
而框架则是调用用户提供的类
.
框架要解决的核心问题
:
因为在写程序时无法知道要被调用的类名
,
所以在程序中无法直接
new
某个类的实例对象了
,
这就要用到反射的方式来做
.
程序中不要用具体的类的名字
,
而是从一个配置文件中读取
.
配置文件要用一个完整的路径
,
但完整的路径不是硬编码
,
而是通过某种方式运算出来的
.
用类加载器加载
:
ReflectTest.class
getClassLoader().getResourceAsStream(“config.properties”);
类加载器加载的是只读的
,
不能保存
.
---------------------- android培训
、java培训
、期待与您交流! ----------------------
分享到:
相关推荐
IBM JDK 1.5,全称为IBM Java Development Kit 1.5,是IBM公司为AIX操作...通过深入阅读IBM_jdk1.5_Guide.pdf,开发者可以掌握如何在AIX系统上部署和运行Java应用,同时利用IBM JDK 1.5的优势来提升应用性能和稳定性。
### JAVA帮助文档全系列_JDK1.5_、JDK1.6、_JDK1.7_官方中英完整版下载 #### 概述 本文档提供了JDK(Java Development Kit)不同版本的下载链接及其相关介绍。JDK作为Java开发的核心组件,对于Java程序员来说至关...
JDK1.5新特性
### JDK 1.5 新特性详解 #### 泛型编程 **定义与作用:** 泛型编程是 Java 1.5 引入的一项重要特性,它允许开发者在编译时进行类型安全检查,从而避免了运行时可能出现的类型转换异常。通过在编译阶段检查类型安全...
以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...
在JDK 1.5中,要使用`Unsafe`类,开发者通常需要通过反射获取该类的实例。 导入`Unsafe`类的方法通常是这样的: ```java Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible...
JDK_API_1_5_zh_CN(JDK1.5中文帮助文档) JDK_API_1_5_zh_CN(JDK1.5中文帮助文档) JDK_API_1_5_zh_CN(JDK1.5中文帮助文档) JDK_API_1_5_zh_CN(JDK1.5中文帮助文档) JDK_API_1_5_zh_CN(JDK1.5中文帮助文档) JDK_API_1_...
《JAVA_jdk1.5笔记》是一份专为初学者设计的详尽教程,涵盖了JAVA编程的基础知识,ANT构建工具的使用,以及单元测试的重要概念。这个资源集合旨在帮助新手快速掌握JAVA编程语言的核心概念,并熟悉开发过程中的自动化...
它于2004年9月30日正式发布,引入了许多新的特性,如自动内存管理的增强(例如泛型、枚举、变量类型推断、增强的for循环),对XML支持的加强,新的日期/时间API,以及改进的反射机制。这些特性显著提升了Java编程的...
本文将详细介绍如何在Ubuntu 9.10操作系统上安装JDK 1.5,这一过程对于那些需要在较低版本的Java环境中进行开发的用户尤其重要,例如在进行某些Android应用开发时,可能因为兼容性问题而需要回退到JDK 5。...
标签中包含的"jdk1.5.0.1"指的是Java的特定版本,即Java 5.0 Update 1。这是Oracle公司发布的Java平台标准版(Java SE)的一个版本,提供了许多改进和新特性,如泛型、枚举、注解和增强的for循环等。"appengine-java...
综上所述,JDK1.5是Java发展历程中的一个重要里程碑,它的特性改进了编程体验,提升了代码质量和运行效率。而64位Windows版的JDK1.5,则是针对Windows用户的一种优化选择,满足了开发者在64位环境下的需求。文件"jdk...
Linux系统中的JDK1.5是Java开发工具包的一个早期版本,主要针对Java语言的编译、运行和调试提供支持。这个版本在今天已经相对较为罕见,因为Java已经有了多个后续版本,包括JDK7、JDK8、JDK9直至最新的JDK17等。然而...
博文链接:https://weibaojun.iteye.com/blog/70284
Java 5.0(也称为 JDK 1.5)引入了一系列重要的新特性,这些特性极大地提高了开发者的编程效率和代码质量。其中最显著的特性之一便是泛型(Generics)。本文将详细介绍泛型的概念、使用方式以及它如何帮助开发者编写...
JDK1.5引入了一些重要的新特性,如: 1. **Generics(泛型)**:允许在类、接口和方法中使用类型参数,增强了类型安全性和代码重用性。 2. **Autoboxing and Unboxing(自动装箱与拆箱)**:自动将基本类型与对应的...
总结来说,JDK1.5是Java发展历程中的一个重要节点,它的泛型、自动装箱/拆箱、枚举、变长参数和增强for循环等特性极大地提升了开发效率和代码质量。同时,了解不同操作系统对应的JDK版本是进行Java开发的基础知识。...
JDK1.5,也称为Java 5.0,是一个重要的版本,它引入了许多新的特性和改进,对Java语言的发展产生了深远影响。 一、泛型(Generics) 在Java 5.0中,最重要的特性之一就是泛型的引入。泛型允许开发者在定义类、接口...
JDK 1.5 是Java发展历程中的一个重要里程碑,它引入了一系列新特性,极大地提升了编程的效率和代码的可读性。以下将详细讲解其中的一些关键特性及其应用。 1. 类型安全的枚举(Type-Safe Enumerations) 在JDK 1.5...