栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java第二阶段第一周

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java第二阶段第一周

第一周:day29--day34

一.数据库 1.事务的概念

事务就是在执行某个业务功能中,当这个业务功能它同时执行多个sql语句,将这多个sql语句的执行

过程看成一个整体,要么同时执行成功,要么同时执行失败.

2.数据库三大范式

1NF:(最基本范式)

第一范式 : 数据库表中的每一列是不可在拆分的原子数据项(是一个独立的列)

2NF:

第二范式: 满足第一范式基础上,每张表非主键字段(列)必须完全依赖于主键字段,不能产生部分依赖

3NF:

第三范式: 满足第二范式基础上(非主键字段必须完全依赖主键字段),非主键字段不能产生传递依赖.

3.反射 3.1获取一个类的字节码文件对象

(1)方式1:Object类的getClass()方法获取

public final Class getClass()

(2)方式2:任意Java类型的class属性

(3)方式3:反射类中字节码文件对象Class 里面静态方法,返回值是当前类本身

public static Class forName(String className) throws ClassNotFoundException

方式1:
Person p = new Person() ;
System.out.println(p.getClass());

方式2:
Class personClazz = Person.class ;

方式3:
Class c = Class.forName("com.qf.reflect_01.Person"); 参数必须是类的全限定名称:包名.类名
3.2获取构造方法

<1>获取这个类所有公共的构造方法:public Constructor[] getConstructors()

<2>获取这个类中所有的构造方法,包括私有,或者受保护的: 

public Constructor[] getDeclaredConstructors():

<3>获取单个的公共构造方法:(参数:参数类型的class,就是类型字节码文件对象)

public Constructor getConstructor(Class... parameterTypes)

<4>获取单个的指定的构造方法(参数为参数类型的class)

public Constructor getDeclaredConstructor(Classs... parameterTypes)

3.2.1获取公共构造方法

(1)获取字节码文件

(2)获取构造方法

3.2.2获取私有构造方法

(1)获取字节码文件

(2)获取构造方法

(3)非公共时取消语言访问限制

        public void setAccessible(boolean flag)

(4)创建实例

        public T newInstance(Object... initargs) :参数:实际参数值

3.3获取成员变量

(1)获取字节码文件对象

(2)通过反射获取成员变量所在的Field类对象

        <1>获取所有的公共字段的类对象

        public Field[] getFields()

        <2>获取所有的字段(成员变量)的类对象,包括默认,受保护,私有

        public Field[] getDeclaredFields()

        <3>获取指定的默认字段所在的字段类对象Field(参数为指定的属性名称)

        public Field getDeclaredField(String name)

(3)取消Java语言访问检查

(4)将参数值绑定在当前类的实例

        public void set(Object obj, Object value)

3.4获取成员方法

<1>获取当前类公共的成员方法,以及继承的公共方法

public Method[] getMethods()

<2>获取所有的成员方法类对象,只包含自己的,不包括继承的

public Method[] getDeclaredMethods()

<3>获取指定的公共成员方法(参数1:成员方法的方法名,参数2:成员方法携带参数类型的class)

public Method getMethod(String name,Class... parameterTypes)

<4>获取指定的私有成员方法所在类对象Method(参数1:成员方法的方法名,参数2:成员方法携带参

数类型的class)

getDeclaredMethod(String name,Class... parameterTypes)

<5>底层方法调用Method里面调用机制

public Object invoke(Object obj,Object... args)

3.4.1获取公共成员方法

(1)获取类字节码文件对象

(2)获取公共的show方法所在的类对象并且调用这个方法

3.4.2获取私有成员方法

(1)获取字节码文件对象

(2)获取成员方法所在类对象

(3)取消java语言访问检查

(4)调用

4.JDBC开发步骤

(1)第一步:导包:  mysql驱动jar包

(2)第二步:  注册驱动

使用 Class.forName("com.mysql.jdbc.Driver");手动加载字节码文件到 JVM 中。

(3)第三步:   获取数据库的连接对象:  驱动管理程序的类DriverManager

public static Connection getConnection(String url,String user,String password) 

参数1:连接数据库的地址; 参数2:数据库的用户名; 参数3:密码

(4)第四步:  准备好sql语句

String sql = "sql语句";

(5)第五步:  通过连接对象创建执行对象Statement

Statement createStatement()

(6)第六步:  执行sql语句:  

<1>通用方法:增删改

int executeUpdate(String sql)

<2>查询语句

ResultSet executeQuery(String sql)

boolean next():  将光标从当前位置向前移动一行。

XXX getXXX( int columnIndex;):通过列的索引值获取内容

XXX getXXX(String columnLaber):通过列的标签名称获取内容(字段名称)

(7)释放资源

5.PreparedStatement

(1)通过Connection接口下:  PreparedStatement prepareStatement(String sql):获取预编译对象,同

时将参数化sql发送给数据库,通过预编译sql语句对象,它内存中就可以对参数?(占位符)赋值.

(2)通过void setXXX(int parameterIndex,XXX x)进行赋值

参数1:就是第几个占位符号(占位符的索引值,从1开始)

参数2:赋的实际参数---根据字段类型

(3)PreparedStatement特点:参数化的sql,防止参数字符串拼接,有效防止SQL注入,比Statement

更安全.

(4)面试题:PreparedStatement和Statement区别

<1>PreparedStatement: 预编译对象,执行都是参数化的sql语句,sql语句参数都是占位符号?,可以有

效防止sql注入(不存在字符串拼接),sql语句就执行一次,可以发送不同的参数进行赋值,执行sql效率

相对快于Statement.

<2>Statement:普通的执行对象,每次执行的都是静态的sql,存在硬编码,而且存在字符串拼接,会造成

sql注入,不安全,执行sql效率低,每次执行都要发送sql.

6.Junit使用 6.1使用步骤

(1)导包

(2)自定义类,书写单元测试方法

(3)没有返回值类型,没有参数类型

(4)方法注解@Test---启动器

7.注解 7.1注解的概念

注解: 标记类,方法,参数,成员变量,由一种特殊的含义 (能被解析的);注解不是注释,注释针对代码解

释说明的文字,普通注释不能被解析,除非文档注释.

注解的本质就是接口interface---->前面加入了@标记

注解中的属性----->就是接口中的方法名

java代码经历三个阶段:SOURCE :原码编译阶段;  CLASS: 类的加载;  RUNTIME:运行阶段

7.2注解的分类

jdk内置注解

(1)@Overrid:标记当前这个方法是否为重写方法

(2)@Deprecated:标记某个方法是过时方法

(3)@SuppressWarnings:压制警告

(4)@FunctionalInteface:函数式接口 :jdk8后;接口如果只有一个抽象方法,那么这个接口就可以是函

数式接口----使用lambda表达式.

7.3元测试提供的其他注解

(1)@Before:它标记的方法在执行@Test方法之前先执行,后期的服务器的初始化操作代码

(2)@After它标记的方法是在执行@Test方法之后执行,存储的一些释放资源代码

(3)断言的功能:Assert.asserEquals(预期的结果,单元测试中的结果):进行匹配,如果值一样,就断言成

功,否则断言失败.

7.4注解中的属性(方法名)返回值类型

(1)String

(2)枚举类型Enum

(3)注解类型@Annotation

(4)基本类型

(5)以上类型的数组

8.动态代理 8.1代理核心思想

代理: 最终目的是使用代理角色帮助真实角色完成事情;程序中,就是对业务功能进行增强.

动态代理---是在程序运行过程中,通过反射获取代理对象

8.2动态代理基本方法

(1)核心类:Proxy:该类提供了创建动态代理类和实例的静态方法

Proxy静态功能: public static Object newProxyInstance(ClassLoader loader,

Class[] interfaces,InvocationHandler h);

参数1:当前基于接口的类加载器

参数2:代理类实现的接口列表

参数3:基于代理的处理程序的接口

(2)InvocationHandler是代理实例调用处理程序实现的接口 ;

通过invoke方法处理代理实例上的方法并返回结果;

Object invoke(Object Proxy,方法 method,Object[] args) throws Throwable;

参数1:调用该方法的代理实例

参数2:当前需要被增强的方法

参数3:当前被增强方法的实际参数数组;

public class UserTest {
    public static void main(String[] args) {
        UserDao ud = new UserDaoImpl() ;  真实角色
        MyInvocationHandler handler = new MyInvocationHandler(ud) ;
        UserDao udProxy = (UserDao) Proxy.newProxyInstance(
            ud.getClass().getClassLoader(),
            ud.getClass().getInterfaces(),
            handler);
        udProxy.add() ;
    }
}
            代理角色可以是任意java对象
public class MyInvocationHandler implements InvocationHandler {
    private Object target ;   目标对象
    public MyInvocationHandler(Object target)
        this.target = target ;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
        System.out.println("权限校验") ;
        Object obj = method.invoke(target, args);
        System.out.println("产生日志记录");
        return obj;   代理对象
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号