- 浏览: 11453 次
- 性别:
- 来自: 江苏
文章分类
最新评论
@version 1.0 2011.01.10
1,引言
→基础+学习能力
→ide工具开发配置(Eclipse)
java、javac的jdk版本
→知识面(java ee IDE jms jmx jndi...)、jdk5/jdk6新特性
2,jdk5新特性要摘
import static 导入一个类中的某个或所有静态方法
(import 导入一个类或包中所有类)
→overload vs override
→可变参数 ...(隐藏数组)
→增加for循环 (实现Iterable接口的集合类)
for(VariableModifiers Type Identifier:Expression)statement
→自动拆装箱autoboxing/unboxing(将对象中的基本数据形态信息从对象中自动取出,隐藏细节)
说明:http://www.talentdigger.cn/home/space-6-do-blog-id-2368.html
→享元模式(flyweight)
3,枚举 enum
→说明和应用:http://tech.e800.com.cn/articles/2009/97/1252286198897_1.html
→eg
----------------------------------
import java.util.Date;
public class EnumTest {
public static void main(String[] args) {
WeekDay1 weekDay = WeekDay1.MON;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
}
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");} //带有构造函数
private WeekDay(int day){System.out.println("second");}
}
public enum TrafficLamp{
RED(30){ //带有抽象方法
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
→单成员枚举可以作为单例实现方式
5,反射★
→Class类 描述Java程序中的Java类,代表Java类在内存中的字节码
类.class\对象.getClass()\Class.forname("类名")
→数组类型实例对象 Class.isAarry
→反射 把Java中的各种成分映射成相应的Java类
Field、Method、Constructor、Package等
→构造方法反射Constructor
//new String(new StringBuffer("abc")); //需求:反射生成字符串abc
Constructor constructor = String.class.getConstructor(StringBuffer.class);
String str = (String)constructor.newInstance(/*"abc"*/new StringBuffer("abc"));
System.out.println(str.charAt(2));
→成员变量反射Field
//需求:反射获得成员变量的值
ReflectPoint pt1 = new ReflectPoint(3,5);
Field fieldY = pt1.getClass().getField("y");
//fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getDeclaredField("x"); //私有
fieldX.setAccessible(true); //暴力反射
System.out.println(fieldX.get(pt1));
→成员方法反射Method
//TestArguments.main(new String[]{"111","222","333"});//需求:反射调用循环显示数组内容成员方法
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
//mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
→面向对象的专家模式
→数组反射以及数组与Object的关系
----------------------------------
int [] a1 = new int[]{1,2,3};
int [] a2 = new int[4];
int[][] a3 = new int[2][3];
String [] a4 = new String[]{"a","b","c"};
System.out.println(a1.getClass() == a2.getClass());
System.out.println(a1.getClass() == a4.getClass()); //*
System.out.println(a1.getClass() == a3.getClass()); //*
System.out.println(a1.getClass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
System.out.println(a4.getClass().getSuperclass().getName());
Object aObj1 = a1;
Object aObj2 = a4;
//Object[] aObj3 = a1;
Object[] aObj4 = a3;
Object[] aObj5 = a4;
System.out.println(a1);
System.out.println(a4);
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a4));
//打印传入内容
printObject(a4);
printObject("xyz");
private static void printObject(Object obj) {
Class clazz = obj.getClass();
if(clazz.isArray()){
int len = Array.getLength(obj);
for(int i=0;i<len;i++){
System.out.println(Array.get(obj, i));
}
}else{
System.out.println(obj);
}
}
----------------------------------
→ArrayList vs HashSet、HashCode分析(哈希算法)
→eg HashSet机制和内存泄漏
Collection collections = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
pt1.y = 7;
collections.remove(pt1); //内存泄漏
→开发框架原理的理解(反射的应用)
发表评论
-
Java实例分析-银行业务调度系统
2011-01-13 08:49 2761@version 2010.01.13 →实 ... -
Java实例分析-交通灯管理系统
2011-01-12 15:50 1676@version 1.0 2011.01.12 @versi ... -
Java 类加载器、动态代理类等(系列下)
2011-01-12 02:10 934@version 1.0 2011.01.12 9 ... -
Java 内省、注解、泛型等(系列中)
2011-01-12 00:34 1183@version 1.0 2011.01.12 ... -
Java 输入输出(IO)与网络编程
2011-01-09 17:52 1373@version 1.0 2011.01.08 IO/输 ... -
Java基础知识点自检、线程等
2011-01-07 01:16 1255@version 1.0 2011.01.06 @versi ...
相关推荐
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...
总结来说,Java枚举类型提供了一种安全、类型安全的方式来定义和使用常量,它可以拥有构造器、方法和字段,并能与switch语句、序列化、反射等Java特性很好地结合。理解并熟练使用枚举,能够使代码更加清晰、易读,...
### JAVA基础-反射-枚举知识点详解 #### 一、反射概述 反射是Java语言提供的一种能在运行时分析类和对象的能力。通过反射,我们可以在程序运行时动态地获取类的信息(如类名、方法、构造函数等)并操作这些信息。 ...
Java编程语言中,枚举和反射机制是两个重要的特性,它们在不同的场景下有着独特的用途。下面我们将详细探讨这两个主题。 一、枚举 枚举(Enum)在Java中用于定义一组固定数量的值,这些值可以作为常量使用。枚举...
在Java编程语言中,枚举(Enum)和反射(Reflection)是两个非常重要的特性,它们在实际开发中有着广泛的应用。下面将详细讲解这两个概念及其使用技巧。 **枚举(Enum)** 枚举是一种特殊的类,它允许我们定义一组...
Java 7 引入了一些新特性,如带资源的try语句、多捕获等,增强了语言的功能性和易用性。 #### Java 7 新特性 - **带资源的try语句**:简化了资源管理,自动关闭try块内的资源。 - **多捕获**:在一个catch块中捕获...
在实际开发中,枚举反射的应用场景可能包括但不限于动态调用枚举方法、遍历枚举常量并执行某些操作、在不明确枚举具体类型的情况下进行通用处理等。了解和掌握枚举的反射机制对于提升Java程序的灵活性和可扩展性...
本资源"Java源码查看枚举类型定义.rar"包含了关于Java枚举类型的详细解释和实例,旨在帮助开发者深入理解这一特性。 首先,枚举类型在Java中通过关键字`enum`声明。例如: ```java public enum Color { RED, ...
《Effective Java》和《Java 与模式》等书籍推荐使用枚举实现单例,因为它们提供了一种天然的防篡改机制,保证了在任何情况下都只有一个实例。 5. **枚举的优势**: - **安全性**:枚举对象是不可变的,防止了意外...
Java反射和泛型是两种强大的编程特性,它们在开发中有着广泛的应用,特别是在数据库操作的动态化场景下。本文将详细介绍如何结合这两种技术实现在Java中对MySQL、SQL Server或Oracle数据库进行动态的增删改查操作。 ...
然而,在实际开发中,我们经常需要将枚举值反向映射到实体类的属性上,以便在处理表单提交的数据时进行赋值。这可以有效地减少代码的冗余,提高可读性和维护性。本文将详细探讨如何创建一个工具类来实现这个功能。 ...
Java枚举类型自Java SE5引入以来,成为了保证线程安全的一种强大工具。在Java中,枚举是一种特殊的类,由编译器自动处理并确保其线程安全性。以下是关于Java枚举线程安全的详细解释。 首先,枚举类型在Java中实际上...
在实际开发中,Java反射机制广泛应用于框架设计、插件系统、动态代理、序列化、测试工具等多个领域。然而,反射使用不当也可能带来性能问题和安全风险,因此需谨慎使用。 通过阅读"1139760298222java.pdf"这份文档...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java 8中,虽然没有引入重大的反射新特性,但原有的反射API仍然提供了丰富的功能,使得开发者...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
Java反射的核心在于`java.lang.Class`类,以及`java.lang.reflect`包中的`Method`、`Field`和`Constructor`等类。`Class`类非常特殊,它代表了运行时的Java类和接口,包括枚举、数组、原始Java类型和void关键字。每...
7. **注解与反射**:通过`getAnnotations()`和`isAnnotationPresent()`等方法,可以获取类、方法、字段上的注解信息,这对于实现元数据驱动的设计非常有用。 8. **动态代理(Dynamic Proxy)**:Java反射还提供了`...
- `java.lang.reflect.Field`:表示类或接口的字段(包括枚举常量)。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Constructor`:表示类的构造器。 #### 二、动态加载实例类 在给定文件...
Java反射是Java编程语言的一个强大特性,允许程序在运行时检查和操作类、接口、字段和方法等。本文章旨在深入解析Java反射机制,包括其原理、应用以及常见用法。 #### 了解Class对象 在Java中,`Class`对象是一个...
总结起来,JDK 5.0引入的常量注解、枚举、for each循环和反射特性,极大地丰富了Java语言的特性和表达能力,提升了开发效率和代码质量。通过理解并熟练应用这些特性,开发者可以编写出更加高效、安全和易于维护的...