java 基础知识3

来源:互联网 发布:服装进货软件 编辑:程序博客网 时间:2024/06/06 09:10



forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标

地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,

浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来

的地址。


 redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请

求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以

session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的

链接地址。前者更加高效,在前者可以满足需要时,尽量使用 forward()方 法 ,

并且,这样也有助于隐藏实际的链接;


在有些情况下,比如,需要跳转到一个其

它服务器上的资源,则必须使用 sendRedirect()方法。




 

java集合框架小结



总结如下:

1.如果要求线程安全的,使用Vector、Hashtable

2.如果不要求线程安全,应该使用ArrayList、LinkedList、HashMap

3.如果要求有映射关系,键值对的,则使用HashMap、Hashtable

4.如果数据量大,又要使用线程安全时候,考虑Vector


java 泛型的概念


1.泛型的基本概念
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类,接口和方法的创建中,分别被称为泛型类,泛型接口,泛型方法。
Java语言引入泛型的好处就是安全简单。
在java SE 1.5之前,在没有泛型的情况下,通过对类型Object的引用来时实现参数的”任意化“,这种”任意化“带来的缺点是要做显示的强制类型转换,而这种转换要求开发者对实际的参数类型可以预知的情况下进行的,对于强制类型转换错误的情况下,编译器压根就不提示错误,在运行的时候才会出现异常,这是一个安全隐患。
泛型的好处就是:在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
下面进行举例说明:
ArrayList al=new ArrayList();


      //创建一只狗

      Dog dog1=new Dog();

      //放入到集合中

      al.add(dog1);

      //取出,这个时候需要强制类型转换

      Dog temp=(Dog) al.get(0);

      //下面这种情况就是,在某些不知情的程序猿,以为al中放的是猫,这时候编译不报错


      Cat temp_cat=(Cat)al.get(0);
这个时候如果运行程序会报类型转换异常,如下:
Exception in thread "main" java.lang.ClassCastException: com.test.Dog cannot be cast to com.test.Cat
at com.test.test.main(test.java:16)
Java Result: 1
就是说狗类对象不能转化为猫类对象。这个是在运行的时候才能知道的,在编译阶段,程序并不知道,你al里面放的是猫还是狗,所以,这就是我们前面所说的安全隐患。那怎么办呐?这时候我们就引入了泛型。
将上面的代码改变如下:
[java] view plain copy
    ArrayList<Dog> al=new ArrayList<Dog>();  
      //创建一只狗  
      Dog dog1=new Dog();  
      //放入到集合中  
      al.add(dog1);  
      //取出,这个时候不需要强制类型转换,泛型就自动转换了,将object类型的转换为Dog类型的  
      Dog temp=al.get(0);  
      //现在下面这种情况就是,在某些不知情的程序猿,以为al中放的是猫,这时候编译报错  
      Cat temp_cat=(Cat)al.get(0);//错误</span>  
这时候,编译器在编译的时候,语句
[java] view plain copy
<span style="font-size:18px;"> Cat temp_cat=(Cat)al.get(0);</span>  
会被报错,编译器提示:不兼容的类型: Dog无法转换为Cat


2.什么时候用泛型呢?
如果你用的一个类,但是不知道这个类的类型究竟是什么,用的这个类型经常变化,可能是string interger 等等,那你总不能写很多个类吧,这样子代码的重用率很低,所以泛型主要有两个好处,一个是安全,一个是代码的从用率。只有用了泛型才知道它的好处。
当然还有其他的一些好处;
1>类型安全
2>向后兼容
3>层次清晰
4>性能较高,用泛型的java代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。



Java反射机制主要用途:可以获到一个类的很多信息,甚至返回值,修饰符等。。

[java] view plain copy
  1. package com.test;  
  2.   
  3. import java.lang.reflect.Method;  
  4.   
  5. public class test2 {  
  6.     public static void main(String[] args) {  
  7.         Gen<Bird> gen1=new Gen<Bird>(new Bird());  
  8.         gen1.showTypeName();  
  9.     }  
  10. }  
  11. //定义一个鸟类  
  12. class Bird{  
  13.     public void test(){  
  14.         System.out.println("I am a bird");  
  15.     }  
  16.     public void count(int a,int b){  
  17.         System.out.println("和为:"+a+b);  
  18.     }  
  19. }  
  20. //创建一个类,这个T是我认为的一种类型,但是不知道是什么类型,这就是泛型  
  21. class Gen<T>{  
  22.     private T o;  
  23.     public Gen(T a){  
  24.         o=a;  
  25.     }  
  26.     //得到T的类型名称  
  27.     public void showTypeName(){  
  28.         System.out.println("T类型是:"+o.getClass().getName());  
  29.         //通过反射机制,我们可以得到T这个类型的很多信息  
  30.         //比如说:成员函数名称,返回类型,成员变量等  
  31.         Method[] m=o.getClass().getDeclaredMethods();  
  32.         //打印method的名字,但是还可以打印很多,修饰符,参数个数,等等。。这个只打印名字  
  33.         for(int i=0;i<m.length;i++){  
  34.             System.out.println("第"+(i+1)+"个成员方法的名字:"+m[i].getName());  
  35.      }  
  36.     }  
  37. }  
输出结果:

T类型是:com.test.Bird
第1个成员方法的名字:count
第2个成员方法的名字:test