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

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。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值