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

    技术2026-09-28  8

    文章目录

    1、类的三大特性2、代码块2.1、构造代码块2.2、构造函数代码块2.3、静态代码块2.4、比较 3、c3p0连接池4、javabean5、jndi5.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(); } }

    输出: 可以看到显示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("静态代码块"); } }

    初始化的整体顺序可以渐进的表示为

    3、c3p0连接池

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

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

    解压找到lib目录下的文件 复制到项目下 在项目文件src下新建配置文件c3p0-config.xml

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

    java代码 测试连接数据库 运行debug模式,使代码运行停在数据库关闭之前 登录数据库,查看连接池数量

    4、javabean

    例

    5、jndi

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

    步骤: 1、造一个javabean 新建usr.java 2、在tomcat_home/conf/server.xml中,进行配置 也可以像下图操作 把项目从左边添加到右边后,server.xml就自动修改了 3、在tomcat_home/conf/server.xml中,最后几排的Context标签中配置 新建一个servlet 通过jndi获取资源 注意:更改代码并重启tomcat时,tomcat_home/conf/server.xml会自动更新,刚刚写的东西就没在里面了,需要重写

    重启tomcat,访问,输出了对应的值

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

    第一步配置 写servlet 重启tamcat(重启tamcat后配置文件新添加的内容可能消失,记得重新复制进去) 重启成功访问

    6、finally覆盖

    例1: 如上例子中,finally的return会覆盖try或catch的返回值。还有一种情况,在finally里面有throw时,try或catch也会没有执行return。

    例2: 如上例子,会先输出"hahaha",再返回1

    例3: 这个最后返回的是1,原理:执行finally之前,try里的return后面已经确定值为1了,后面finally只是把a的值变成了3。

    Processed: 0.009, SQL: 9