值的注意的

来源:互联网 发布:js中date对象的方法 编辑:程序博客网 时间:2024/05/16 18:11

 Hibernate是什么?从不同的角度有不同的解释:
1.它是连接java应用程序和关系数据库的中间件。
2.它对jdbc API进行了封装,负责java对象的持久化。
3.在分层的软件架构中它位于持久层,封装了所有数据访问细节,是业务逻辑层可以专注实现业务逻辑。
4.它是一种orm映射工具,能够建立面向对象的域模型和关系数据模型之间的映射。

所有Hibernate应用中都会访问Hibernate的5个核心接口:
1.Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。
2.SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。
3.Session接口:负责保存、更新、删除、加载、和查询对象。
4.Transaction:管理事务。
5.Query和Criteria接口:执行数据库查询。

SessionFactory有以下特点:
1.它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。
2.它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

 

14. servlet 和 jsp 的区别
都是用来处理动态网页的技术,jsp被编译后转化为servlet, 一个jsp页面本质上也是一个servlet;jsp在第一次被请求后,先转化为servlet,再编译,所以第一次要比servlet慢
Servlet是在java代码中嵌入HTML, 擅长逻辑控制
Jsp是在HTML中嵌入java代码, 擅长页面处理

15. forward(请求转发)与redirect(重定向)的区别
( Forward是服务器端请求,是servlet提供的一种技术,服务器根据请求的url找到请求的页面,对浏览器而言,这一过程是不透明的,好像什么也没发生一样,浏览器的地址栏不会显示被请求的url页面地址(显示的仍是上次请求的服务器端的url地址),从HTTP协议的角度,只发生一次的请求响应过程
Redirect是客户端的请求,客户端根据服务器传回的地址,重新向服务器发出请求,浏览器的地址栏显示的是新请求的url地址, 从http协议的角度,发生了两次请求响应的过程 )
-------------------
1. 重定向是HTTP协议定义的功能,要经过两次HTTP通信过程,第一次用于获取资源的实际地址,第二次用之前得到的地址发出请求, 这个过程对浏览器是可见的;
    请求转发是servlet技术本身的特点,转发的过程是在服务器内部进行,对浏览器是不透明的,它认为它所发送的地址实际上得到的就是这些内容; 从HTTP角度看,只有一次通讯过程

2. 重定向只能转向新的资源,功能较单一;  请求转发不但可以转向新的资源,也可将其它资源和本身的生成的内容结合起来,功能很丰富

3. 重定向适用范围广,因为它是HTTP协议定义的,不但可以重定向统一web程序的其它资源,也可以重定向到其它web程序甚至其它网站;  而请求转发是servlet本身的一种机制,通常只在同一web程序内部转发,从而使它的可用范围受到限制。


                                         容易迷惑的java知识点的归纳总结

一.  Switch
      1.其能接受的数据类型有四个,char , byte, short, int
      2.Default 可放在switch中的任何一个地方,但只有给定的条件匹配不到时,才会执行
        3.Case,default语句如果执行完要跳出,必须用break,  没的话会向下继续执行(如果碰到case语句则直接进入执行)

 


二.  String 和 StringBuffer
    String 定义的是字符串常量,其値一旦定义就不再改变,如下:
        String s  =  “ABC”;
        S  =  s.subString(2); //会重新生成一个字符串对象
        以上两句执行后在内存中会产生“两”个字符串对象 一个”ABC”,另一个是s指向的”AB”(注意s已不再指向”ABC”)
    StringBuffer 定义的是字符串变量,其値可以改变,如下:
        StringBuffer s1  =  new StringBuffer(“ABC”);
        S1 =  s1.subString(2);
        以上两句执行后在内存中只产生“一个”字符串对象: s指向的”AB”; 

 

三.  String s = new String(“XYZ”);
    该语句会产生2个字符串对象:
    一个是通过 ” ” 方式在 编译期 产生,存放在常量池中
    一个是通过new方式在 运行期 产生,存放在堆内存中
    但在运行时只会通过new方式产生一个对象

四.  java中的参数只能“按値”传递,且传递的是値的 copy
  如是基本类型,则传递的是基本类型的副本
    如是引用类型,则传递的是引用本身的副本

 

五.  方法重载和覆盖的条件
符合重载的条件: 1.在同一个类中
                2.有多个同名的方法,
                3.方法参数不同(参数的个数不同 或则 参数的类型不同)

 

符合覆盖的条件:  1.在继承中
                  2.子类中的方法名和父类相同
                  3.子类中的方法参数和父类相同
                  4.子类中的方法返回类型和父类一样
                  5.子类的方法不能比父类抛出更多的异常
                  6.子类的方法访问范围大于或等于父类
  覆盖值得注意的是如果子类中有一个方法名称和父类一样,但参数不同,那不叫覆盖,所以也就不受覆盖的条件限制(注意该方法可以存在)

 

六. java类中的变量初始化相关的知识:6-1.初始化顺序分三步:
1. 类加载时,初始化静态变量和静态区块,先父类后子类
2. 运行中当new出一个对象时,开始为对象分配空间并初始化实例变量,先父类后子类
3. 调用构造函数时,先执行父类的构造函数,再执行子类的构造函数,具体过程是调用子类的构造函数时,在第一行处会调用父类的构造函数(显式或隐式)
6-2. 初始化时各类型的变量初始化的値:
应用类型: null
基本类型: boolean : false
          Char:/u0000
          Byte: 0
          Short: 0
          Int: 0
          Long: 0
          Float: 0.0
          Double: 0.0

    6-3. 数组的初始化
          当我们产生某个存储对象的数组时,真正产生的其实是个存储references的数组。此数组建立之后,其中的每一个reference皆会被自动设为某个特殊值。该值以关键字null表示。当Java看到null值,便将这个reference视为“不指向任何对象”。使用任何reference之前,你必须先将某个对象指派给它。如果你使用某个reference而其值为null,便会在执行期发生错误
        数组在分配空间时就开始了初始化,初始化规则,基本类型按照6-2的规则进行初始化,应用类型类型全部初始化为null
 
   6-4. java中的所有的实例变量都有系统默认初始化,所有的方法变量由方法本身进行初始化,且方法中的变量一定要初始化后才能应用

 

七. java中的构造函数
1. 构造函数不能被继承
2. 每一个类都至少有一个构造函数,自己不定义,编译器也会给分配一个默认的不带参数的构造函数
3. 子类的构造函数一定会调用父类的构造函数,通过super()调用,或显式或隐式,显式调用的父类构造函数必须存在; 如果没有显式调用则编译器会自动在子类的构造函数第一行处加上super()这个隐式调用,这时要求父类一定要有不带参数的构造函数存在(如果父类自己定义了构造函数,但带有参数,编译时会报错)

 

八. java中的异常处理
1. java中的异常分运行时异常 和 非运行时异常, 运行时异常由运行时系统捕获并处理(编译正常),非运行时异常必须由处理(抛出或捕获)

2. 异常机制中try{}后一定要跟catch吗?
* 不一定,,但必须跟finally.也就是catch和finally必须跟其中一个
* 异常机制中try{}后一定要跟catch吗?
* 不一定,,但必须跟finally.也就是catch和finally必须跟其中一个
*  try {     
*  }finally {}
* 这样没问题,而且,可不是没有意义哦,因为这样可以保证即使发生了异常,finally里面的代码一定会被执行。
* 有时候,这个还是非常有用的。
* 比如可以用来释放一些自己占用的资源,然后让调用者处理异常。
  3.  异常中的finally一定会执行,哪怕一个方法中有return语句,也是在异常处理后才返回
  4.  异常的抛出可以先子类再父类,如果子类捕获了,则父类就不再捕获;
但是不能先父类再子类,那样会导致编译出错
  5.  异常处理后,程序继续执行


九. 按位运算和逻辑运算
    按位运算操作符(& ,| )两边的都要计算
    逻辑运算如果操作符(&&, || )左边成立则就不在计算右边了

 


十. for(;;)意义
相当于while(true), 不知道java为什么要搞出这个古怪让人费解的东西?

十一. equals, = =
  equals比较两个对象的内容是否相等
    = = 比较的是两个引用是否指向同一对象    String的存储特性会对以上的判定规则产生影响:
  String 通过“”生成的对象会保存在常量池中,常量池有一个很重要的特点就是能共享,比如String s = “X”; 在把”X”放常量池之前jvm会检测常量池中是否存在相同的对象,如果已经存在则直接把引用指向已存在的对象,不再为”X”分配空间,好处是节约了空间

 

十二. 基本类型的变量赋初始値
  Byte的范围为-128~127
  当我们给出一个整数,且该整数后不带l标示,则编译器自动把它视为int类型,如
      Int i = 1 ; 是成立的
  当我们给出一个小数,且该小数后不带f标示,则编译器自动把它视为double类型,如
      Double d = 1.0; 是成立的

十三. 基本类型的转化
  规则: 小的可以自动转化为大的, 大的要强制性才能转为小的,比如以下
      Double d = 1.0f;  //正确, 小转大,自动
      Float f  = 1.0d(或1.0);  //错误,大转小,需强制 float f = (float)1.0d;