黑马程序员---Java高新技术学习笔记-2

------- android培训java培训、期待与您交流! ---------- 

1.内省

内省(IntroSpector)是Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。从而不用通过被private修饰而无法访问的参数变量通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter/setter方法。

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段, 且方法名符合某种规则。如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object->VO),这些信息在类中用私有字段来存储,如果读取或者设置这些字段的值,则需要通过一些相应的方法来访问。JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。
JavaBean示例
[java]  view plain copy print ?
  1. class Person 此JavaBean的属性为age  
  2. {  
  3. private int x;  
  4. public int getAge()  
  5. {  
  6. return x;  
  7. }  
  8. public void setAge(int age)  
  9. {  
  10. this.x = age;  
  11. }  
  12. }  


以下代码是反射的具体应用:
[java]  view plain copy print ?
  1. import java.beans.BeanInfo;  
  2. import java.beans.IntrospectionException;  
  3. import java.beans.Introspector;  
  4. import java.beans.PropertyDescriptor;  
  5. import java.lang.reflect.InvocationTargetException;  
  6. import java.lang.reflect.Method;  
  7. import java.util.Map;  
  8.   
  9. import org.apache.commons.beanutils.BeanUtils;  
  10. import org.apache.commons.beanutils.PropertyUtils;  
  11.   
  12. import com.intel.day02.AnnotationTest;  
  13.   
  14.   
  15. //用内省的方法来读取x的值  
  16. public class IntroSpector   
  17. {  
  18.     public static void main(String[] args) throws Exception  
  19.     {  
  20.           
  21.         AnnotationTest.sayHola();  
  22.           
  23.           
  24.         ReflectPoint pt1 = new ReflectPoint(3 , 5);  
  25.         String propertyName = "x";  
  26.         Object retVal = getProperty(pt1, propertyName);  
  27.         System.out.println("x="+retVal);  
  28.           
  29.         Object value = 7;  
  30.         setProperties(pt1, propertyName, value);  
  31.         System.out.println("Set:x="+pt1.getX());  
  32.           
  33.         //利用BeanUtils的set和get方法来修改参数  
  34.         System.out.println("BeanUtils:x="+BeanUtils.getProperty(pt1, "x"));  
  35.         BeanUtils.setProperty(pt1, "x""8");  
  36.         System.out.println("BeanUtilsSet:x="+pt1.getX());  
  37.           
  38.         BeanUtils.setProperty(pt1, "birthday.time""1987");  
  39.         System.out.println("BeanUtils:birthday="+BeanUtils.getProperty(pt1, "birthday.time"));  
  40.           
  41.         //java 1.7新特性  
  42.         //Map map = {name:"ajiax",WWID:11454556};  
  43.         //BeanUtils.setProperty(map, name, "albert");  
  44.           
  45.         PropertyUtils.setProperty(pt1, "x"9);  
  46.         System.out.println("PropertyUtils:x="+PropertyUtils.getProperty(pt1, "x"));  
  47.     }  
  48.   
  49.     private static void setProperties(Object pt1, String propertyName,Object value)  
  50.             throws IntrospectionException,IllegalAccessException, InvocationTargetException   
  51.     {  
  52.         PropertyDescriptor pd1 = new PropertyDescriptor(propertyName,pt1.getClass());  
  53.         Method methodSetX = pd1.getWriteMethod();  
  54.         methodSetX.invoke(pt1,value);  
  55.     }  
  56.   
  57.     private static Object getProperty(ReflectPoint pt1, String propertyName)  
  58.             throws IntrospectionException, IllegalAccessException,InvocationTargetException   
  59.     {  
  60.         /*PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass()); 
  61.         Method methodGetX = pd.getReadMethod(); 
  62.         Object retVal = methodGetX.invoke(pt1);*/  
  63.           
  64.         /* 
  65.          * 采用遍历BeanInfo的所有属性的方式来查找和设置某个ReflectPoint对象的x属性。 
  66.          * 在程序中把一个类当做JavaBean来看,就是调用IntroSpector.getBeanInfo方法, 
  67.          * 得到的BeanInfo对象封装了这个类当做JavaBean看的结果信息。 
  68.          *  
  69.          * 相比较而言推荐使用上边注释的程序,简介高效 
  70.          */  
  71.         BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());  
  72.         PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();  
  73.         Object retVal = null;  
  74.         for(PropertyDescriptor pd : pds)  
  75.         {  
  76.             if(pd.getName().equals(propertyName))  
  77.             {  
  78.                 Method methodGetX = pd.getReadMethod();  
  79.                 retVal = methodGetX.invoke(pt1);  
  80.                 break;  
  81.             }  
  82.         }  
  83.         return retVal;  
  84.     }  
  85.   
  86. }  

2.静态导入

mport static静态导入是JDK1.5中的新特性。
一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。 
这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。 

[java]  view plain copy print ?
  1. <span style="font-size:14px">import static java.lang.Math.*;  
  2.   
  3. import java.lang.annotation.Annotation;  
  4. import java.lang.reflect.AnnotatedElement;  
  5.   
  6. import com.intel.day02.AnnotationTest;  
  7.   
  8. public class StaticImport   
  9. {  
  10.     public static void main(String args[])  
  11.     {  
  12.         System.out.println("Hello Java");  
  13.         int x = 1;  
  14.         x++;  
  15.         System.out.println(x);  
  16.         System.out.println(max(3 , 6));  
  17.         System.out.println(abs(3 - 6));  
  18.           
  19.     }  
  20. }</span>  
3.可变参数

特点:
1.只能出现在参数列表的最后
2.位于变量类型和变量名之间,前后有无空格都可以
3.调用可变参数的方法时,编译器为该可变参数隐含
创建一个数组,在方法体中以数组的形式访问可变参数
自动装箱与拆箱
享元模式(英语:Flyweight Pattern)是一种软件设计模式。
它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;
它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。
通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,
当需要使用时再将它们传递给享元。 

通俗解释:有很多个小的对象有很多相同的属性,几把它们封装为一个对象,那些不同的
属性变成方法的参数,称之为外部状态。那些相同的属性抽取出来,称为内部状态。

[java]  view plain copy print ?
  1. public class VariablePatameter   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         System.out.println(add(1,2));  
  6.         System.out.println(add(1,2,3));  
  7.         System.out.println(add(1,2,3,4));  
  8.           
  9.         AutoBoxingandUnboxing();  
  10.     }  
  11.       
  12.     public static int add(int x , int... args)  
  13.     {  
  14.         int sum = x;  
  15.           
  16.         for(int i = 0 ; i < args.length ; i++)  
  17.         {  
  18.             sum += args[i];  
  19.         }  
  20.         System.out.println(sum);  
  21.         //增强for循环  
  22.         //for(type变量名:变量集合名)  
  23.         for(int arg : args)  
  24.         {  
  25.             sum += arg;  
  26.         }  
  27.         return sum;  
  28.     }  
  29.     //自动装箱与拆箱  
  30.     public static void AutoBoxingandUnboxing()  
  31.     {  
  32.         Integer iObj = 3;  
  33.         System.out.println(iObj+12);  
  34.           
  35.         Integer i1 = 13;  
  36.         Integer i2 = 13;  
  37.         System.out.println(i1==i2);//true  
  38.         /* 
  39.          * i1和i2是同一个对象值为(-128~+127之间时)一旦封装成integer对象后 
  40.          * 就会将其缓存起来,放在一个数据池中,当下一次要把另一个变量封装为 
  41.          * integer对象时,先去池子中看看有没有相同的对象,有的话直接引用,所以 
  42.          * 两个对象指向的是同一个值,节省了内存空间。 
  43.          */  
  44.         Integer i3 = 137;  
  45.         Integer i4 = 137;  
  46.         System.out.println(i3==i4);//false  
  47.         /* 
  48.          * i3和i4不是同一个对象(不在-128~+127之间) 
  49.          */  
  50.           
  51.         Integer i5 = Integer.valueOf(3);  
  52.         Integer i6 = Integer.valueOf(3);  
  53.         System.out.println(i5==i6);//true  
  54.           
  55.         Integer i7 = Integer.valueOf(213);  
  56.         Integer i8 = Integer.valueOf(213);  
  57.         System.out.println(i5==i6);//false  
  58.           
  59.         String s1 = new String("abc");  
  60.         String s2 = new String("abc");  
  61.         System.out.println(s1==s2);//false  
  62.     }  
  63. }  
-------  android培训 java培训 、期待与您交流! ---------- 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值