Java SE笔记

1 SSM

1.1 Spring

1.1.1 IOC

Spring创建对象的两种方式:

  • XML文件注册bean对象;
<bean id="student" class="com.zheng.pojo.Student"></bean>
  • 注解实现。
    步骤:
  1. 在类中添加注解;
  • @Component(value=""):其中value属性等价于xml文件中bean的id,不写时默认是首字母小写的类名,将类注册进Spring容器中,具有同样作用的注解还有@Controller、@Service(业务层注解)、@Repository(DAO层注解);
  • @Value(""):在括号内给基本类型属性赋值;
  • @Autowired:给引用类型属性赋值;
  • @Qualifier(value=""):对于存在多个实现类的接口属性,需要在value中指定要创建对象的类,即类名小写。
  1. 在xml文件中添加组件context扫描类;
<!-- 扫描com.zheng.pojo包小的所有类 -->
<context:component-scan base-package="com.zheng.pojo"/>

1.1.2 AOP

代理模式:

  • 静态代理三类角色:真实角色和代理角色实现了共同的接口,其次代理要有真实角色的引用,代理角色可以附加自己的功能。
    (1)真实角色:真正做事情的角色(栗子:房东);
    (2)代理角色:暴露给外界的(栗子:中介);
    (3)抽象角色:(栗子:租房)
  • 动态代理:可以代理多个真实角色

当不同的模块不存在关系(例如父子类关系),且有共同的方法需要实现,为了不重复写代码,此时需要使用AOP。
AOP注解:

  • @Aspect:修饰类,表明这个类是个切面,即具有共同方法的类;
  • @Before("execution()"):修饰方法,表示前置通知,在切点前执行;
  • @After:修饰必须被执行的方法,表示后置通知,在切点后执行;
  • @AfterReturning:修饰方法,表示返回通知
  • @AfterThrowing:修饰处理抛出异常的方法,表示异常通知
  • @Around:修饰方法,表示环绕通知
  • @order:当在同一个切点上定义多个切面的通知时,该注释用于定义通知执行的先后顺序,注:前置通知值越小越先执行,后置通知值越小越后面执行。
try{
  @Before
  //PointCut(切点方法)
  @AfterReturning  
} catch (Exception e){
  @AfterThrowing
} finally{
  @After
}

AOP的实现方式

  1. 通过注解写切面类和通知;
  2. 在xml文件中开启注解;
<

1.2 Spring MVC

1.3 Mybatis

实体类与数据库的表对应,实体类的属性与数据库表的字段对应,对象与表中的一行值对应。
Mybatis用法

  1. 编写实体类;
  2. 数据库中要有相对应的表;
  3. 操作数据库的SQL语句写到xxxmapper.xml;
  4. mybatis-config.xml核心配置文件,数据库链接所需要的驱动 url账号和密码;
  5. DAO层(处理事务)的编写。

Spring整合Mybatis

2 Java语言

2.1 反射(Reflection)

  • 反射(Reflection)是动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
    ClassLoader(类加载器)将class文件加载JVM中运行,overload(重载)在编译时确定,override(重写)在运行时确定。
    通过反射动态创建实例的两种方法:
  • 使用Class对象的newInstance()方法来创建Class对象对应类的实例;
Class<?> c = String.class;
Object str = c.newInstance();
  • 反射相关的主要API:
  1. java.lang.Class:Class类,描述了Class对象对应类的成员和方法信息;
  2. java.lang.reflect.Method:代表类的方法;
  3. java.lang.reflect.Field:代表类的成员变量;
  4. java.lang.reflect.Constructor:代表类的成员构造器;
  • 反射使用:
  1. 获取Class类对象;
//方法一:使用Class类的forName()静态方法;
Class<?> c = Class.forName("包名+类名");
//方法二:使用运行时类的class属性
Class<?> c = String.class;
//方法三:使用运行时类的对象
String str = new String("SPDB");
Class<?> c = str.getClass();
//方法四:使用类加载器
ClassLoader classLoader = this.getClass().getClassLoader();
Class<?> c = classLoader.loadClass(str);
  1. 通过反射创建Class对象对应类的实例;
//方法一:使用Class类对象的newInstance()方法;
Class<?> c = String.class;
Object str = c.newInstance();
//方法二:使用对象

  1. 获取Class对象的属性和方法

  • 反射的过程
  1. 程序中创建的类经过编译(javac.exe)后生成字节码文件(.class);
  2. java.exe(JVM类加载器)将***.class文件加载到内存后,成为运行时类,存在缓存区,此时运行时类就是Class的实例;
  3. 每个运行时类只加载一次;
  4. 通过Class的实例可以作如下操作:1)创建Class实例对应的运行时类的对象;2)获取和调用Class实例对应的运行时类的属性、方法以及构造方法。
  • 类加载器
  1. bootstap ClassLoader: 引导类加载器,C++编写,JVM自带的类加载器,用来加载Java核心类库。
  2. Extension ClassLoader: 扩展类加载器,用来将jre、lib和ext目录下的jar包装入工作库;
  3. System ClassLoader: 将java classpath所有目录下的类包装入类库。

参考文档:深入理解Java反射

2.2 异常处理

问题:

  1. 异常是什么,怎么产生的,有什么影响?
  2. 有哪些异常?
  3. 怎么处理异常?
  • Exception(运行时异常)
    RuntimeException(运行时异常)可以不需要处理,一般指编程时的逻辑错误,仔细检查代码可以避免此类异常,该类的子类都是运行时异常,IOException(编译时异常)必须捕获处理。
  • 自定义异常
    用户自定义异常类一般是RuntimeException的子类,需要提供serialVersionUID.
    异常处理机制:
  1. 抛出(Throw);
  2. try.....catch.....finally:1)try中执行可能产生异常的代码,catch负责捕获异常,除非在finally之前退出程序,否则finally中的语句一定会被执行;2)catch和finally语句是
  3. 手动抛出异常:1)首先要生成异常类对象,然后通过throw语句实现抛出操作;2)可以抛出的异常必须是Throwable或其子类的实例。
  4. 声明异常(throws):异常的处理方式,声明方法可能要抛出的各种异常类。
    注:
  5. 重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对重写方法的调用-异常的捕获按父类声明的异常处理。
  • Java程序执行过程中如果出现异常,会有JVM自动生成一个异常类对象。

参考文档:Java异常

2.3 注解

内置注解 - 作用在代码的注解

  • @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误;
  • @Deprecated - 标记过时方法,使用该方法时,会报编译警告;
  • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。

内置注解 - 作用在其他注解的注解

  • @Target - 标记这个注解可以用来修饰哪些Java成员(如构造方法,普通方法,参数等);
  • @Retention - 标记这个注解是保存在源文件(source)、字节码文件(class)还是运行时(runtime)中。

参考文档:注解

自定义注解

@Target
@Retentaion
public @interface MyAnnotation{
  String name() default "";
}

3 相关技术

3.1 JSP

Web开发模式1:

view jsp(展示层,也用于控制页面跳转)
service 业务层
DAO JDBC(数据层)

Web开发模式2 MVC:

view jsp(展示层)
servlet SpringMVC(控制层,以前是Struts)
service 业务层
DAO Mybatis(数据层)

注1:上述模式层与层之间的依赖关系是单向依赖,即上层服务依赖下层,下层代码修改影响上层;
注2:为了解耦,写代码不要出现双向依赖,面向接口编程(接口隔离原则)

jsp参考文档

4 设计模式

4.1 工厂模式

  • 实现了创建者和调用者的分离。
  • 详细分类:
    - 工厂方法模式
    - 抽象工厂模式

开闭原则:对扩展(新增代理类)开放,对修改(修改源代码)关闭。
依赖倒转原则

5 总结

设计模式
单例模式:

工厂模式:

观察者模式:

Java基础
引用放在栈区,对象放在堆区。
静态方法内可以使用this关键字(?)
--final
类实现接口的话要实现接口中的所有方法,继承抽象类不用。

Spring MVC
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
ViewResolver:
jsp的四个作用域:page request session application;
Spring bean的作用域(scope):singleton(只创建一个对象)、prototype(每次都创建一个新对象)、request、session

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352