代码块

来源:互联网 发布:全民枪战挂机软件 编辑:程序博客网 时间:2024/04/29 18:06

1      代码块

1.1  代码块概述

         *在Java中,使用{}括起来的代码被称为代码块。

1.2  代码块分类

         *根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。

1.3  常见代码块的应用

1.3.1  局部代码块—没用

         在方法中出现;限定变量生命周期,及早释放,提高内存利用率

1.3.2  构造代码块 (初始化块)—没用

         在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

1.3.3  静态代码块

         在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。

         一般用于加载驱动

class Demo1_Code {   public static void main(String[] args) {      {         int x = 10;                 //限定变量的声明周期         System.out.println(x);      }           Students1 = newStudent();      System.out.println("---------------");      Students2 = newStudent("张三",23);   }    static {      System.out.println("我是在主方法类中的静态代码块");   }} class Student {   private String name;   private int age;    public Student(){      //study();      System.out.println("空参构造");   }               //空参构造    public Student(String name,int age) {//有参构造      //study();      this.name = name;      this.age = age;      System.out.println("有参构造");   }    public void setName(String name) {      this.name = name;   }    public String getName() {      return name;   }    public void setAge(int age) {      this.age = age;   }    public int getAge() {      return age;   }    {                                 //构造代码块:每创建一次对象就会执行一次,优先于构造函数执行      //System.out.println("构造代码块");      study();   }    public void study() {      System.out.println("学生学习");   }    static {                          //随着类加载而加载,且只执行一次      System.out.println("我是静态代码块");  //作用:用来给类进行初始化,一般用来加载驱动   }                                 //静态代码块是优先于主方法执行
 

2      代码块面试题

class Student {   static {      System.out.println("Student 静态代码块");   }     {      System.out.println("Student 构造代码块");   }     public Student() {      System.out.println("Student 构造方法");   }} class Demo2_Student {   static {      System.out.println("Demo2_Student静态代码块");   }     public static void main(String[] args) {      System.out.println("我是main方法");           Students1 = newStudent();      Students2 = newStudent();   }}

 

3      以hibernate为例

3.1  原始代码

 

@Test   public void testAdd() {      //第一步加载hibernate核心配置文件      /**       * 在hibernate里面封装类,到src下面找到名称是hibernate.cfg.xml       */      Configurationcfg = newConfiguration().configure();           //第二步创建SessionFactory对象      /**       * 读取hibernate核心配置文件内容,创建sessionFactory在过程中,       * 根据映射关系,在配置数据库里面把表创建       */      SessionFactorysessionFactory = cfg.buildSessionFactory();           //第三步使用SessionFactory创建session对象      /**       *  类似于连接       */      Sessionsession = sessionFactory.openSession();       //第四步开启事务      Transactiontx = session.beginTransaction();           //第五步写具体逻辑 crud操作      /**       * 添加功能       */      Useruser = newUser();      user.setUsername("老兰");      user.setPassword("123");      user.setAddress("北京");      session.save(user);           //第六步提交事务      tx.commit();       //七步关闭资源      session.close();      sessionFactory.close();   }

 

3.2  改进-- SessionFactory

 

3.2.1  HibernateUtils:

 

public classHibernateUtils {    static Configuration cfg = null;   static SessionFactory sessionFactory= null;   //静态代码块实现   static {      //加载核心配置文件      cfg = new Configuration();      cfg.configure();      sessionFactory= cfg.buildSessionFactory();   }    //提供方法返回sessionFactory   public static SessionFactorygetSessionFactory() {      return sessionFactory;   }    public static void main(String[] args) {    }}

 

3.2.2  测试类

 

@Test   public void testAdd() {       SessionFactorysessionFactory = HibernateUtils.getSessionFactory();       //第三步使用SessionFactory创建session对象      /**       *  类似于连接       */      Sessionsession = sessionFactory.openSession();       //第四步开启事务      Transactiontx = session.beginTransaction();       //第五步写具体逻辑 crud操作      /**       * 添加功能       */      Useruser = newUser();      user.setUsername("老百");      user.setPassword("789");      user.setAddress("上海");      session.save(user);       //第六步提交事务      tx.commit();       //七步关闭资源      session.close();      sessionFactory.close();   } 

3.3  再次改进—Session

3.3.1  配置hibernate.cfg.xml

先在hibernate.cfg.xml配置hibernate.current_session_context_class

 

 

3.3.2  hibernateUtils

 

3.3.3  测试里

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击