小知识点

一、JDBC

public class JDBC {
/*
 * JDBC四大参数:
 *      driverClassName:com.mysql.jdbc.Driver
 *      url:jdbc:mysql://localhost:3306/mydb3
 *      username:root
 *      password:123
 * 
 *      PreparedStatement ps = con.prepareStatement(sql);
 *      ps.addBatch();添加批
 *      ps.executeBatch();执行批
 */
    static Properties p = new Properties();
    static String driverClassName = null;
    static String url = null;
    static String username = null;
    static String password = null;
    static Connection con = null;
    static Statement statement = null;
    static PreparedStatement preparedStatement = null;
    static ResultSet rs = null;
    static {
        try {
            p.load(new FileInputStream("oracleJDBC.properties"));
            driverClassName = p.getProperty("driverClassName");
            url = p.getProperty("url");
            username = p.getProperty("username");
            password = p.getProperty("password");
            //1.注册驱动
            Class.forName(driverClassName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getCon() throws SQLException{
        return DriverManager.getConnection(url, username, password);
    }
    public static void closeAll(ResultSet rs, Statement stat, Connection con){
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (stat != null) {
            try {
                stat.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    @Test
    public void show1() {
        try{
            //2.获取连接
            con = JDBC.getCon();
            //3.获取sql语句的执行对象
            statement = con.createStatement();
            //4.执行sql语句
            rs = statement.executeQuery("select *from emp");
            //5.处理结果集
            //getMetaData获取此 ResultSet 对象的列的编号、类型和属性。
            //getColumnCount返回此 ResultSet 对象中的列数。
            int count = rs.getMetaData().getColumnCount();
            while (rs.next()) {
                for (int i = 1; i <= count; i++) {
                    System.out.print(rs.getString(i));
                    System.out.print(",");
                }
                System.out.println();
            }
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            //6.关掉资源
            JDBC.closeAll(rs, statement, con);
        }
    }
    //预处理
    @Test
    public void show2() {
        try{
            con = JDBC.getCon();
            preparedStatement = con.prepareStatement("select * from emp where ename = ?");
            preparedStatement.setString(1, "SCOTT");
            rs = preparedStatement.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("ename") + rs.getString("job") + rs.getString("sal"));
            }
        }catch(Exception e){
            throw new RuntimeException(e);
        }finally{
            JDBC.closeAll(rs, preparedStatement, con);
        }
    }
}

二、代码块执行先后

父类

class fu{
    static{
        System.out.println("父类静态代码块,只执行一次");
    }
    {
        System.out.println("父类构造代码块");
    }
    public fu(){
        System.out.println("父类构造方法");
    }
}

子类

class zi extends fu{
    static{
        System.out.println("子类静态代码块,只执行一次");
    }
    {
        System.out.println("子类构造代码块");
    }
    public zi(){
        System.out.println("子类构造方法");
    }
}

测试

    fu f = new zi();

测试结果

父类静态代码块,只执行一次
子类静态代码块,只执行一次
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法

三、XML

<?xml version="1.0" encoding="UTF-8"?>

DTD

<!DOCTYPE beans SYSTEM "bean.dtd">          <!-- 本地 -->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"    
    "http://www.springframework.org/dtd/spring-beans-2.0.dtd">      <!-- 公共 -->
<!-- 引入约束       一般都是直接复制即可
    <!ATTLIST bean 
        id ID(元素的唯一性) #REQUIRED(属性是必须的)             
        type CDATA(文本类型) #IMPLIED(属性是可选的)>          
-->

Schema

<beans xmlns="http://www.itcast.cn/bean"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd">
    <!--  
        1.引入约束 复制 粘贴 补结束标签
        2.xmlns="http://www.itcast.cn/bean" 自定义命名空间 引入哪个约束就写哪个约束的名字
        3.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 固定写法 官方文档起别名
        4.xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd"
         值1=引入的约束的名字   值2=引入的约束的位置
    -->

SAXReader

    SAXReader sr = new SAXReader();
    Document document = sr.read(new File("aaa"));
    Element element = document.getRootElement();
    List<Element> list = element.elements();
    for (Element element2 : list) {
        String s1 = element2.attributeValue("className");

    }

    a)elements(…) 获得指定名称的所有子元素。可以不指定名称
    b)element(…) 获得指定名称第一个子元素。可以不指定名称
    c)getName() 获得当前元素的元素名
    d)attributeValue(…) 获得指定属性名的属性值
    e)elementText(…) 获得指定名称子元素的文本值
    f)getText() 获得当前元素的文本内容

四、网络编程

InetAddress网络协议(ip)地址,内含主机名称、地址等信息,通过方法调用可以获得相关信息。

UDP:

发送端:

    DatagramSocket ds = new DatagramSocket();
    DatagramPacket dp = new DatagramPacket("你好".getBytes(), "你好".getBytes().length, InetAddress.getLocalHost(),6666);
    ds.send(dp);

接收端:

    DatagramSocket ds = new DatagramSocket(6666);
    byte[] bytes = new byte[1024*64];
    DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    ds.receive(dp);
    int port  = dp.getPort();
    InetAddress address = dp.getAddress();
    ds.close();
    System.out.println("" + address + ":" + port + ":" + new String(bytes));

TCP:
服务器:

        ServerSocket server = new ServerSocket(6666);
        System.out.println("服务器开启,端口6666");
        while(true){
            final Socket socket = server.accept();
            new Thread(){
                @Override
                public void run() {
                    try {
                        InputStream is = socket.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        PrintStream ps = new PrintStream(socket.getOutputStream());
                        String fileName = br.readLine();
                        File dir = new File("服务器文件夹");
                        dir.mkdir();
                        File file = new File(dir, fileName);
                        if (file.exists()) {
                            ps.println("存在");
                            socket.close();
                            return;
                        }else {
                            ps.println("不存在");
                        }
                        FileOutputStream fos = new FileOutputStream(file);
                        byte[] arr = new byte[8192];
                        int len;
                        while ((len = is.read(arr)) != -1){
                            fos.write(arr, 0, len);
                        }
                        fos.close();
                        socket.close();

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();

        }

客户端:

        File file = getFile();
        Socket socket = new Socket("127.0.0.1",6666);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintStream ps = new PrintStream(socket.getOutputStream());
        ps.println(file.getName());
        String result = br.readLine();
        if (result.equals("存在")) {
            System.out.println("您输入的文件已存在");
            socket.close();
            return;
        }
        FileInputStream fis = new FileInputStream(file);
        byte[] arr = new byte[8192];
        int len;
        while ((len = fis.read(arr)) != -1) {
            ps.write(arr, 0, len);
        }
        fis.close();
        socket.close();

五、基本数据类型

整数型:
byte      1个字节,-128~127
short     2个字节,-2^15~2^15-1
int       4个字节,-2^31~2^31-1,默认整数
long      8个字节,-2^63~2^63-1
浮点型:
float     4个字节,-3.403E38~3.403E38
double    8个字节,-1.798E308~1.798E308,默认小数
字符型:
char      2个字节,0~65535
布尔类型
boolean   true/false   

六、集合

这里写图片描述
这里写图片描述

七、流对象

这里写图片描述

八、线程状态

这里写图片描述

九、动态代理

Cglib

public static void cglib() {
        final Student s = new HeimaStudent();
        //Enhancer.create(Class,Callback);
        //Callback:它是一个接口。我们一般不会直接用它,而是用它的子接口,MethodInterceptor。
        Student newS = (Student)Enhancer.create(s.getClass(), new MethodInterceptor(){

            @Override
            public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
                System.out.println("睡觉");
                arg1.invoke(s, arg2);
                System.out.println("上课");
                return null;
            }});
        newS.show();
    }

jdk

public static void proxy() {
        final Student s = new HeimaStudent();
        Student newS = (Student)Proxy.newProxyInstance(s.getClass().getClassLoader(), s.getClass().getInterfaces(), 
                new InvocationHandler() {

                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("上课");
                        method.invoke(s, args);
                        System.out.println("睡觉");
                        return null;
                    }
                });
        newS.show();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值