- 浏览: 87087 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
qintengfei:
不错,问题解决了。
ResultSet转换为List的方法 -
weichen:
看完之后挺管用,拿来试试人人网,大部分应用都能进,但是游戏中的 ...
HttpClient -
nggno1:
学习了~
Date类学习总结 -
chen88358323:
httpclient.getConnectionManager ...
HttpClient关于下载的资料收集 -
Eric_2007:
最后一条,有点过份!
一个女生看了会哭,男生会沉默的故事
一、Java5.0新特性
1、编译器的功能更加强大,JVM变化不大
2、Java在逐渐与C++融合
3、五小点,四大点
二、五小点
1、自动封箱AutoBoxing/自动解封
自动封箱和自动拆箱,它实现了简单类型和封装类型的相互转化时,实现了自动转化。
byte b -128~127
Byte b 在以上数量的基础上多一个null
简单类型和封装类型之间的差别
封装类可以等于null ,避免数字得0时的二义性。
Integer i=null;
int ii=i; //会抛出NullException 异常。相当于 int ii=i.intValue();
Integer i=1; //相当于Integer i=new Integer(1);
i++; // i = new Integer(i.intValue()+1);
在基本数据类型和封装类之间的自动转换
5.0之前
Integer i=new Integer(4);
int ii= i.intValue();
5.0之后
Integer i=4;
Long l=4.3;
public void m(int i){......}
public void m(Integer i){......}
以上两个函数也叫方法重载
自动封箱解箱只在必要的时候才进行。能不封箱找到匹配的就不封箱。
2、静态引入 StaticImport
使用类中静态方法时不用写类名
System.out.println(Math.round(PI));
可以用以下代码实现:
import static java.lang.System.*; //注意,要写" 类名.* "
import static java.lang.Math.*;
out.println(round(PI));
注意:静态引入的方法不能重名
3、for-each
统一了遍历数组和遍历集合的方式
for(Object o:list){ //Object o 表示每个元素的类型 ,list 表示要遍历的数组或集合的名字
System.out.println(o); //打印集合或数组中的每个元素
}
4、可变长参数
处理方法重载中,参数类型相同,个数不同的情况
public void m(int... is){.....}
int... is 相当于一个 int[] is
编译器会把给定的参数封装到一个数组中,再传给方法
在一个方法中只能有一个可变长参数,而且,必须放在最后一个参数的位置
5、格式化输入/输出
java.util.Formatter类 对格式的描述
System.out.printf("Hello %s",str); //打印字符串类型的变量,用一个占位符
格式化I/O(Formatted I/O)
java.util.Sacner类可以进行格式化的输入,可以使用控制台输入,结合了BufferedReader和StringTokener的功能。
三、四大点
1、枚举
枚举是一个类,并且这个类的对象是现成的,在定义类的时候,即定义好了对象
程序员要使用的时候,只能从中选择,无权创建
enum 枚举名{
枚举值1(..),枚举值2(..),.....;
}
(1) 在5.0之前使用模式做出一个面向对象的枚举
final class Season{
public static final Season SPRING=new Season();
public static final Season WINTER=new Season();
public static final Season SUMMER=new Season();
public static final Season AUTUMN=new Season();
private Season(){}
}
完全等价于
enum Season2{
SPRING(..),//枚举值
SUMMER(..),
AUTUMN(..),
WINTER(..)
}
枚举本质上也是一个类,Enum是枚举的父类。
这个类编译以后生成一个.class类
这个类有构造方法,但是是私有的
枚举中的values()方法会返回枚举中的所有枚举值
枚举中可以定义方法和属性,最后的一个枚举值要以分号和类定义分开,枚举中可以定义的构造方法。
枚举不能继承类(本身有父类),但可以实现接口,枚举不能有子类也就是final的,枚举的构造方法是private(私有的)。
枚举中可以定义抽象方法,可以在枚举值的值中实现抽象方法。
枚举值就是枚举的对象,枚举默认是final,枚举值可以隐含的匿名内部类来实现枚举中定义抽象方法。
(2)枚举类(Enumeration Classes)和类一样,具有类所有特性。Season2的父类是java.lang.Enum;
隐含方法: 每个枚举类型都有的方法。
Season2[] ss=Season2.values(); ----获得所有的枚举值
for(Season2 s:ss){
System.out.println(s.name()); ----- 打印枚举值
System.out.println(s.ordinal()); ----- 打印枚举值的编号
}
(3) enum可以switch中使用(不加类名)。
switch( s ){
case SPRING:
…………….
case SUMMER:
…………….
…………..
}
(4)枚举的有参构造
enum Season2{
SPRING(“春”),-------------------------------逗号
SUMMER(“夏”),-------------------------------逗号
AUTUMN(“秋”),-------------------------------逗号
WINTER(“冬”);-------------------------------分号
private String name;
Season2(String name){ //构造方法必须是私有的,可以不写private,默认就是私有的
this.name=name;
}
String getName(){
return name;
}
}
Season2.SPRING.getName() ---------------------春
(5)枚举中定义的抽象方法,由枚举值实现:
enum Operation{
ADD('+'){
public double calculate(double s1,double s2){
return s1+s2;
}
},
SUBSTRACT('-'){
public double calculate(double s1,double s2){
return s1-s2;
}
},
MULTIPLY('*'){
public double calculate(double s1,double s2){
return s1*s2;
}
},
DIVIDE('/'){
public double calculate(double s1,double s2){
return s1/s2;
}
};
char name;
public char getName(){
return this.name;
}
Operation(char name){
this.name=name;
}
public abstract double calculate(double s1 ,double s2);
}
有抽象方法枚举元素必须实现该方法。
Operator[] os = Operator.values();
for(Operator o:os){
System.out.println("8 "+o.name()+" 2="+o.calculate(8,2));
}
for(Operator o:os){
System.out.println("8 "+o.getName()+" 2="+o.calculate(8,2));
}
运行结果:
8 ADD 2=10.0
8 SUBSTRACT 2=6.0
8 MULTIPLY 2=16.0
8 DIVIDE 2=4.0
8 + 2=10.0
8 - 2=6.0
8 * 2=16.0
8 / 2=4.0
2、泛型
(1)增强了java的类型安全,可以在编译期间对容器内的对象进行类型检查,在运行期不必进行类型的转换。
而在java se5.0之前必须在运行期动态进行容器内对象的检查及转换,泛型是编译时概念,运行时没有泛型
减少含糊的容器,可以定义什么类型的数据放入容器
(2)List<Integer> aList = new ArrayList<Integer>();
aList.add(new Integer(1));
// ...
Integer myInteger = aList.get(0); //从集合中得到的元素不必强制类型转换
支持泛型的集合,只能存放制定的类型,或者是指定类型的子类型。
HashMap<String,Float> hm = new HashMap<String,Float>();
不能使用原始类型
GenList<int> nList = new GenList<int>(); //编译错误
编译类型的泛型和运行时类型的泛型一定要一致。没有多态。
List<Dog> as = new ArrayList<Dog>();
List<Animal> l = as; //error Animal与Dog的父子关系不能推导出List<Animal> 与 List<Dog> 之间的父子类关系
(3)泛型的通配符"?"
? 是可以用任意类型替代。
<?> 泛型通配符表示任意类型
<? extends 类型> 表示这个类型是某个类型或接口的子类型。
<? super 类型> 表示这个类型是某个类型的父类型。
import java.util.*;
import static java.lang.System.*;
public class TestTemplate {
public static void main(String[] args) {
List<Object> l1=new ArrayList<Object>();
List<String> l2=new ArrayList<String>();
List<Number> l3=new ArrayList<Number>(); //Number --- Object的子类,所有封装类的父类
List<Integer> l4=new ArrayList<Integer>();
List<Double> l5=new ArrayList<Double>();
print(l1);
print(l2);
print(l3);
print(l4);
print(l5);
}
static void print(List<? extends Number> l){ //所有Number及其子类 l3,l4,l5通过
for(Number o:l){
out.println(o);
}
}
static void print(List<? extends Comparable> l){……} //任何一个实现Comparable接口的类 l2,l4,l5通过
static void print(List<? super Number> l){……} //所有Number及其父类 l1,l3通过
// "?"可以用来代替任何类型, 例如使用通配符来实现print方法。
public static void print(GenList<?> list){……} //表示任何一种泛型
}
(4)泛型方法的定义 --- 相当于方法的模版
把数组拷贝到集合时,数组的类型一定要和集合的泛型相同。
<...>定义泛型,其中的"..."一般用大写字母来代替,也就是泛型的命名,其实,在运行时会根据实际类型替换掉那个泛型。
在方法的修饰符和返回值之间定义泛型
<E> void copyArrayToList(E[] os,List<E> lst){……}
static <E extends Number & Comparable> void copyArrayToList(E[] os,List<E> lst){……} //定义泛型的范围 类在前接口在后
static<E , V extends E> void copyArrayToList(E[] os,List<E> lst){……} //定义多个泛型
"super"只能用在泛型的通配符上,不能用在泛型的定义上
import java.util.*;
public class TestGenerics3 {
public static void main(String[] args) {
List<String> l1=new ArrayList<String>();
List<Number> l2=new ArrayList<Number>();
List<Integer> l3=new ArrayList<Integer>();
List<Double> l4=new ArrayList<Double>();
List<Object> l5=new ArrayList<Object>();
String[] s1=new String[10];
Number[] s2=new Number[10];
Integer[] s3=new Integer[10];
Double[] s4=new Double[10];
Object[] s5=new Object[10];
copyFromArray(l1,s1);
copyFromArray(l2,s2);
copyFromArray(l3,s3);
copyFromArray(l4,s4);
copyFromArray(l5,s5);
}
//把数组的数据导入到集合中
public static <T extends Number&Comparable> void copyFromArray(List<T> l,T[] os){
for(T o:os){
l.add(o);
}
}
}
受限泛型是指类型参数的取值范围是受到限制的. extends关键字不仅仅可以用来声明类的继承关系, 也可以用来声明类型参数(type parameter)的受限关系.
泛型定义的时候,只能使用extends不能使用 super,只能向下,不能向上。
调用时用<?>定义时用 <E>
(5)泛型类的定义
类的静态方法不能使用泛型,因为泛型类是在创建对象的时候产生的。
class MyClass<E>{
public void show(E a){
System.out.println(a);
}
public E get(){
return null;
}
}
受限泛型
class MyClass <E extends Number>{
public void show(E a){
}
}
3、注释
4、并发
四、反射 reflect
反射,在运行时,动态分析或使用一个类进行工作。
反射是一套API,是一种对底层的对象操作技术
1、类加载
类加载,生成.class文件,保存类的信息
类对象,是一个描述这个类信息的对象,对虚拟机加载类的时候,就会创建这个类的类对象并加载该对象。
Class,是类对象的类。称为类类。只有对象才会被加载到虚拟机中。一个类只会被加载一次。
2、获得类对象的三种方式:(类对象不用new的方法得到的)
1)也可以用 类名.Class,获得这个类的类对象。
2)用一类的对象掉用a.getClass(),得到这个对象的类型的类对象。
3)也可以使用Class.forName(类名)(Class类中的静态方法),也可以得到这个类的类对象,
(注意,这里写的类名必须是全限定名(全名),是包名加类名,XXX.XXX.XXXX)。强制类加载,这种方法是经常使用的。
一个类的类对象是唯一的。
在使用Class.forName(类名)时,如果使用时写的类名的类,还没有被加载,则会加载这个类。
Class c;
c.getName(); 返回类名
c.getSuperclass(); 这个方法是获得这个类的父类的类对象。
c.getInterfaces(); 会获得这个类所实现的接口,这个方法返回是一个类对象的数组。
方法对象是类中的方法的信息的描述。java.lang.reflect.Method,方法类的对象可以通过类对象的getMethods() 方法获得,
获得的是一个方法对象的数组,获得类中的定义的所有方法对象,除了构造方法。
构造方法对象,是用来描述构造方法的信息。java.lang.reflect.Constructor构造方法类的对象可以通过类对象的getConstructors()方法获得,
获得这个类的所有构造方法对象。
属性对象,使用来描述属性的信息。java.lang.reflect.Field属性类的对象对象可以通过类对象getFields() 这个方法是获得所有属性的属性对象。
作业:
1、通过运行时命令行参数输入一个类名,类出类中所有的方法
2、实现一个带泛型的堆栈,用来存放Number
3、实现一个栈,用来存放任意类型
方法:遍历,pop,push,从数组拷贝
4、定义一个枚举,枚举值是课程,每个枚举值有个教师姓名的属性
发表评论
-
java复习第十八天
2008-12-11 13:44 995一、反射 1、获取方法和属性 ... -
java复习第十六天
2008-12-11 13:43 868网络基础知识 网络编程的目的就是指直接或间接地通过网络协议 ... -
java复习第十五天
2008-12-11 13:42 1105一、 (一) DataInputStrea ... -
java复习第十四天
2008-12-11 13:40 952一、 多线程的通信 ■ 因为线程的死锁,从而引发要多线程的 ... -
java复习第十三天
2008-12-11 13:38 822一、 ■ 阻塞状态 ... -
java复习第十二天
2008-12-11 13:37 1088一、复习AWT事件模型(Observer模式) 1、事件 ... -
java复习第十一天
2008-12-11 13:36 803一、复习 集合:用一个对象储存管理多个对象 Collecti ... -
java复习第十天
2008-12-11 13:35 1083一、复习内部类 1、成员内部类 可以访问外部类的私有 ... -
java复习第九天
2008-12-11 13:34 847一、复习 1、Object 所有 ... -
java复习第八天
2008-12-11 13:33 912一、复习 接口 是个特殊的抽象类,属性:公开静态常量,方法:公 ... -
java复习第七天
2008-12-11 13:33 1088一、复习 static 属性 类变量 全类共有 类加载时 ... -
java复习第六天
2008-12-11 13:32 896修饰符 一、static 修 ... -
java复习第五天
2008-12-11 13:30 955一、复习 1、封装 该 ... -
java复习第四天
2008-12-11 13:14 10431、复习 面向对象思 ... -
java复习第三天
2008-12-11 12:35 10521、面向对象的思想 ... -
java复习第二天
2008-12-11 10:31 1016... -
java复习第一天
2008-12-11 10:12 16881、Jav ...
相关推荐
"JAVA书本复习题答案整合"是一个精心整理的资源包,它集合了多套Java书本复习题目及其对应的答案,旨在帮助学习者高效地备考期末考核。 1. **Java基础知识**:复习题可能涵盖了Java的基础语法,如变量、数据类型、...
在“Java语言程序与数据结构梁勇第十版第七章复习题答案”中,我们主要探讨的是Java编程语言的基础知识,特别是与数据结构相关的概念。Java作为一种面向对象的编程语言,对于初学者来说,理解其基本语法、类和对象、...
【Java 考试复习指南】 1. Java 编译过程:Java 源程序文件(扩展名为 .java)经过Java编译器编译后,会生成字节码文件(扩展名为 .class)。这是Java程序运行的基础,因为JVM(Java虚拟机)执行的是字节码。 2. ...
《Java语言程序设计第10版(基础篇)》是一本深入浅出的Java编程教材,旨在帮助初学者掌握这门强大的面向对象编程语言。复习题答案提供了对每一章节核心概念的检验和巩固,帮助读者确认对每个主题的理解是否到位。...
Java 语言程序设计基础课后复习题答案第十三章 本部分内容将详细讲解 Java 语言程序设计基础课后复习题答案第十三章中的知识点。 一、Java 基础知识 1.1 在 Java 中,什么是可变长参数?答:在 Java 中,使用可变...
【Java复习题库知识点详解】 Java是一种面向对象的高级编程语言,它的主要特点包括:面向对象、跨平台、高性能和丰富的类库。在Java中,程序的基本单位是类,而不是文件,因此选项B描述错误。Java语言区分大小写,...
JAVA理论知识基础复习 JAVA理论知识基础复习是指对JAVA语言的基础知识进行复习和总结,本文将涵盖构造方法、new关键字、方法的重载、特殊变量this、static定义常量、继承、方法的重写、特殊变量super、多态性等相关...
13. **Java复习第十三天**:最后可能会讲解一些高级话题,如集合框架的高级特性和并发库(如ConcurrentHashMap、ExecutorService)的使用,或者JVM内存模型和垃圾回收机制。 通过这些复习笔记,读者可以逐步建立起...
### Java基础复习知识点详解 #### 一、Java语言特点 - **高级编程语言**:Java是一种面向对象的高级编程语言,具有以下特点: - **简单性**:语法简洁,易于学习。 - **结构中立**:独立于硬件结构,能够在各种...
根据提供的文件信息,我们可以整理出以下关键的Java知识点: ### 1. 访问修饰符 public, private, protected, default - **public**: 公有访问级别,可以在任何地方被访问。 - **protected**: 受保护访问级别,...
17. **Chapter 17 - Applet与Swing**:简述Java小程序(Applet)的基本概念,以及Swing组件的使用,如按钮、文本框、标签等。 18. **Chapter 18 - Java EE基础**:初步介绍Java企业级应用开发,如Servlet、JSP和MVC...
这份"Java语言程序设计(梁勇)第21-30章全部完整习题答案"是学习Java编程时的宝贵资源,它涵盖了高级特性和面向对象编程的关键概念。 在第21章,主题可能涉及到多线程,这是Java的一个强大特性。通过创建线程,...
第十一部分:Java 语言的内存管理 1. Java 语言的内存管理是指 JVM 中的垃圾回收机制。 2. 内存管理可以避免内存泄露和溢出。 第十二部分:Java 语言的跨平台 1. Java 语言的跨平台是指 Java 语言可以在不同的...
- 截至目前,最新的Java API版本已经达到了第17版。 #### 34. byte类型的内存表示 - `byte`类型在Java中占用1个字节。 - 内存表示通常采用原码形式。 #### 35. main方法的作用 - `main`方法是Java程序的入口点。 -...
源文件名通常与主类名相同,但扩展名为.java,因此第十七题答案是A。 类是变量和方法的集合体,数组是有序数据的集合,抽象类不能被实例化,类成员数据可以有不同的访问修饰符,不一定是公有的。第十八题、第十九题...
这些题目覆盖了Java的基础语法、类和对象、数据类型、运算符、控制流、Applet、数组以及字符串操作等多个核心知识点,是学习和复习Java语言的重要资料。通过解决这些问题,开发者可以巩固对Java编程基础的理解,并...
12. 插入到第1行:在Java源代码中,第1行通常是包声明,所以A选项正确。 13. 修饰符混用:`abstract`不能与`final`一起修饰同一个类,因为`final`表示不可改变,而`abstract`表示抽象的,两者矛盾,A选项正确。 14...