java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)

文章目录

      • 1、类的三大特性
      • 2、代码块
        • 2.1、构造代码块
        • 2.2、构造函数代码块
        • 2.3、静态代码块
        • 2.4、比较
      • 3、c3p0连接池
      • 4、javabean
      • 5、jndi
        • 5.1、jndi挂数据库连接池(dbcp)
      • 6、finally覆盖

1、类的三大特性

封装:隐藏对象的内部特性和行为

封装的作用:
1、隐藏代码细节
2、提高代码重用
3、隔离变化
4、保护数据

继承(extends):从基类(父类)获取字段和方法的能力
在这里插入图片描述
多态:对象的多种形态,继承是多态的实现基础

多态的三要素:
A.必须有子类和父类,具有继承或实现(继承)

B.子类必须重写父类的方法(重写)

C.父类的引用变量指向子类的对象(向上转型)

2、代码块

2.1、构造代码块

使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域

public class HelloA {
    {
        System.out.println("这是一个构造代码块");
    }

}

2.2、构造函数代码块

构造函数代码块指的是构造函数中所包含的代码,类似className(){}中的代码块

public class HelloA {
    public HelloA(){
        System.out.println("构造函数代码块");
    }
}

2.3、静态代码块

static代码块指的是static{}包裹的代码块,且静态代码只执行一次,可以通过Class.forName(“classPath”)的方式唤醒代码的static代码块,但是也执行一次。

public class HelloA {
    static{
        System.out.println("静态代码块");
    }
}

2.4、比较

谁先执行

public class HelloA {
    public HelloA(){
        System.out.println("构造函数代码块");
    }
    {
        System.out.println("构造代码块");
    }
    static {
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {
        new HelloA();
        new HelloA();
    }
}

输出:
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第1张图片
可以看到显示static代码初始化,然后是构造方法初始化,然后是构造函数初始化,并且静态代码只会初始化一次。

上面的代码编译后是这样的:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

public class HelloA {
   /*构造代码块直接被内联到了构造函数代码块中*/
    public HelloA() {
        System.out.println("构造代码块");
        System.out.println("构造函数代码块");
    }

    public static void main(String[] args) {
        new HelloA();
        new HelloA();
    }

    static {
        System.out.println("静态代码块");
    }
}

初始化的整体顺序可以渐进的表示为
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第2张图片

3、c3p0连接池

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。

c3p0工具包下载地址:https://sourceforge.net/projects/c3p0/files/latest/download?source=files

解压找到lib目录下的文件
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第3张图片
复制到项目下
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第4张图片
在项目文件src下新建配置文件c3p0-config.xml

java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第5张图片

配置文件详解:https://www.cnblogs.com/tanhao/p/7053102.html

java代码
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第6张图片
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第7张图片
测试连接数据库
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第8张图片
运行debug模式,使代码运行停在数据库关闭之前
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第9张图片
登录数据库,查看连接池数量
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第10张图片

4、javabean

java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第11张图片

java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第12张图片

5、jndi

JNDI是 Java 命名与目录接口(根据名字找资源)

步骤:
1、造一个javabean
新建usr.java
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第13张图片
2、在tomcat_home/conf/server.xml中,进行配置
也可以像下图操作
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第14张图片
把项目从左边添加到右边后,server.xml就自动修改了
3、在tomcat_home/conf/server.xml中,最后几排的Context标签中配置
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第15张图片
新建一个servlet
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第16张图片
通过jndi获取资源
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第17张图片
注意:更改代码并重启tomcat时,tomcat_home/conf/server.xml会自动更新,刚刚写的东西就没在里面了,需要重写

重启tomcat,访问,输出了对应的值
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第18张图片
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第19张图片

5.1、jndi挂数据库连接池(dbcp)

第一步配置
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第20张图片
写servlet
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第21张图片
重启tamcat(重启tamcat后配置文件新添加的内容可能消失,记得重新复制进去)
重启成功访问
在这里插入图片描述
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第22张图片

6、finally覆盖

例1:
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第23张图片
如上例子中,finally的return会覆盖try或catch的返回值。还有一种情况,在finally里面有throw时,try或catch也会没有执行return。

例2:
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第24张图片
如上例子,会先输出"hahaha",再返回1

例3:
java 知识点 7(类的三大特性、代码块、c3p0连接池、jndi)_第25张图片
这个最后返回的是1,原理:执行finally之前,try里的return后面已经确定值为1了,后面finally只是把a的值变成了3。

你可能感兴趣的:(java)