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

java基础知识>>>查漏补缺

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

java基础知识>>>查漏补缺

目录
      • 问题1:什么是注解(Annotation)?为什么在开发时候用注解? 细聊注解?
      • 问题2:什么是反射? 做什么用的呢?
      • 问题3:什么是泛型? 做什么用的呢?
      • 问题4:为什么封装用包装类型不用基本类型?POJO里也都是封装类型?
      • 问题5:#{} 与¥{} 区别以及它们是什么?阐述
      • 问题6:sqlsession以及session理解? 日常业务常用

问题1:什么是注解(Annotation)?为什么在开发时候用注解? 细聊注解?

注解@也叫元数据,常见的@重写Override和@Deprecated,注解它是JDK1.5版本开始引入的一个特性(性质),用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。

《刨根问底栏目组》:

之所以用注解是因为JDK1.5之前的版本中, Spring 中要声明一个 Bean,要通过 XML 配置的方式,现在有了注解,等于减少了一个XML配置文件,减少了开发代码量。 可以直接在类上+注解完成 Bean 的声明工作。

包下面会自动生成一些数据,比如+@controller,importorg.springframework.stereotype.Controller >>意思是使用@controller生成源代码,底层对它会层层调用,从而对使用注解的地方进行一些说明。

package cn.tedu.mapper;

import cn.tedu.pojo.User;
import org.springframework.stereotype.Controller;

import java.util.List;
@Controller

问题2:什么是反射? 做什么用的呢?

官方解释:程序在运行状态中,对于任意一个类,都可以知道这个类所有属性和方法,对于任意一个对象都能够调用他的任意方法和属性。比如你用private关键词封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。

note: 字节码是一堆二进制的文件

先说应用方式以具体案例:

首先要想用反射是需要用到API

三种获取字节码的方式

1.Class.forName(“类的全路径”);
2.类名.class
3.对象.getClass();

下面准备一个测试物料类,里面封装属性进行get set 方法,整些构造 整些普通方法

package cn.tedu.review;
/本类用于复习反射的物料类/
public class Student {
//1.定义成员变量
private String name;
public int age;

//2.给被封装属性提供get与set方法
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

//3.生成本类的无参构造与全参构造
public Student(){}
public Student(String name, int age) {
    this.name = name;
    this.age = age;
}
//4.提供本类的普通方法
public void play(){
    System.out.println("今天大结局,放学后我要写1W行代码玩玩~");
}
public void sunDay(int n){
    System.out.println("国庆一共放"+n+"天");
}
//5.为了查看学生对象的具体属性与属性值,重写toString()
@Override
public String toString() {
    return "Student{" +
            "name='" + name + ''' +
            ", age=" + age +
            '}';
}

}

利用反射技术获取类对象,重点看步骤

package cn.tedu.reflection;

import org.junit.Test;

import java.lang.reflect.Method;
import java.util.Arrays;

/本类用于反射的测试/
public class TestReflect {
//1.创建程序的入口函数main()–不用

//2.通过单元测试方法,获取目标类Student对应的字节码对象
@Test
public void getClazz() throws ClassNotFoundException {

    //练习获取字节码对象的3种方式
   1. Class clazz1(这里是定义的对象名) = Class.forName("cn.tedu.review.Student");

   2.Class clazz2 = Student.class;

   3. Class clazz3 = new Student().getClass();

    //打印的是Student类对应的字节码对象
    System.out.println(clazz1);//class cn.tedu.reflection.Student
    //获取当前字节码对象clazz1的名字
    System.out.println(clazz1.getName());//cn.tedu.reflection.Student
    //通过字节码对象,获取Student类的类名
    System.out.println(clazz2.getSimpleName());
    //通过字节码对象,获取Student类对应的包对象
    System.out.println(clazz3.getPackage());
    //通过字节码对象,先获取Student类对应的包对象,再获取这个包对象的名字
    System.out.println(clazz3.getPackage().getName());
}

常听名词>>>反射技术

《刨根问底栏目组》:

总结就是这个类不是你创建的,是你同事或者直接是第三方公司,此时你要或得这个类的底层功能调用,就需要反射技术实现

问题3:什么是泛型? 做什么用的呢?

泛型的使用符号是 < >通常用来和集合对象一起使用,它是程序的增强器(下面解释为啥增强了?)它也是目前主流的开发方式。如同上面的注解@

泛型<>什么时候用?

知识点1:当操作的引用的数据类型不确定的时候,就用<>,将要操作的引用数据类型传入即可。

其实<>就是一个接收具体引用数据类型的参数范围

知识点2:在程序中,只要用到带有<>的类或者,就要明确传入的具体引用数据类型。

泛型技术是给编译器使用的技术,用于编译时期,确保了类型的安全,运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。

知识点3:为什么擦除泛型?
因为为了去兼容运行的类加载器

《刨根问底栏目组》:

泛型可以把报错的时机提前,用于在编译期检查集合的数据类型,只要不是规定的类型,就报错,通不过编译,泛型它只在编译时生效,编译通过以后,说明符合语法,泛型就会被抛弃,字节码文件中没有泛型,并且泛型的类型必须使用引用类型,比如Student、Integer。

问题4:为什么封装用包装类型不用基本类型?POJO里也都是封装类型? 问题5:#{} 与¥{} 区别以及它们是什么?阐述

《刨根问底栏目组》:

#{}方式能够很大程度防止sql注入(安全),KaTeX parse error: Expected 'EOF', got '#' at position 36: …使用占位符的地方,最好优先使用#̲{} 在JDBC不支持使用占位…{},典型情况就是动态参数

关于¥{}

1. v a l u e 中 v a l u e 值 有 限 制 只 能 写 对 应 的 v a l u e 值 不 能 随 便 写 , 因 为 {value}中value值有限制只能写对应的value值不能随便写,因为 value中value值有限制只能写对应的value值不能随便写,因为{}不会自动进行jdbc类型转换

2.简单来说,在JDBC不支持使用占位符的地方,都可以使用${}

关于#{}

1.#{}表示一个占位符号 相当于 jdbc中的 ? 符号

2.#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?

3.#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:select * from user where id= #{user_id},如果传入的值是11,那么解析成sql时的值为where id=“11”

4.如果sql语句中只有一个参数,此时参数名称可以随意定义 如果sql语句有多个参数,此时参数名称应该是与当前表关联[实体类的属性名]或则[Map集合关键字],不能随便写,必须对应!

问题6:sqlsession以及session理解? 日常业务常用

session,理解就是会话的意思,包含访问数据库的用户的信息,比如你用SYSTEM用户登陆oracle,会有一个session保存你所访问数据库的一些信息,来保持你的连接访问状态。

Session 不是 JDBC规范中的东西. 是数据库层面上的东西,它标识一次通信双方从开始通信到通信结束期间的一个上下文,是记录在服务器端(数据库端)的内存中。

JDBC 是客户端(相对数据库).
还有一个比较近似的概念Connection 这个是JDBC 规范中的内容,表示的是客户端到服务端的一个数据链路。例子: 一条小河,Connection 是桥, Session 是运菜过河拿钱回家。

SqlSession理解为就是一个提供select/insert/update/delete方法。

补充1:SqlSessionFactory是mybatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory可以通过SqlSessionFactoryBuild对象类获取。

SqlSessionFactoryBuild则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例,每一个mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心,sqlSessionFactory也是线程安全的。

SqlSessionFactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,SqlSessionFactory是创建SqlSession的工厂。

补充2:SqlSession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的Connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是Mybatis执行持久化操作的关键对象。

SqlSession对象完全包含以数据库为背景的所执行SQL操作方法。底层封装了JDBC连接,可以用SqlSession的实例对来执行被映射的SQL语句,每个线程有他自己的SqlSession实例,SqlSession的实例不能被共享,SqlSession也不是线程安全的,绝对不能将SqlSession实例的引用放在任何类型的管理范围中。

并且记住使用完SqlSession之后关闭Session很重要,放在finally块来关闭它。 不关一直运行浪费内存降低效率>>>sqlSession.close();

问题6:什么叫做SQL?
SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新也就是CRUD。管理数据库经常用到SQL语句。

问题7:POJO指的是什么?
POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。(pojo中封装好的数据,直接用注解开发@Data等)POJO类也给我们在struts框架中的配置带来了很大的方便。

问题8:javabean和POJO有什么关系区别?
POJO 和JavaBean是我们常见的两个关键字

POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。

但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean 。

但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat) 的,所以 Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。

Java Bean 是不能被跨进程访问的。JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。一般在web应用程序中建立一个数据库的映射对象时,我们只能称它为POJO。

POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象,其主要用来指代那些没有遵从特定的Java对象模型、约定或框架(如EJB)的Java对象。理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)

问题7:关于多表查询问题?resultType和resultMap是什么? association property是什么?property是什么?

问题8:怎么理解驼峰映射看,具体阐述?以及使用方法?
问题9:什么是并发概念?
“并发的概念是指的同一时间段内同时执行多个线程,而且他就是一个渣男,同时支配者很多线程。

问题10:vue怎么控制数据的实时刷新?
通过虚拟的DOM

问题11:什么是MVVM?做啥的?阐述

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

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

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