第76节:Java中的基础知识
第76节:Java中的基础知识
设置环境,安装操作系统,安装备份,就是镜像,jdk
配置环境,eclipse
下载解压即可使用,下载tomcat
折佣动态代理解决网站的字符集编码问题
使用request.getParameter()
获得的数据是否有乱码问题.
自定义注解
@
: @Test
等.注解就是一种数据类型
package com.dashucoding.test;
import java.util.ArrayList;
import java.util.List;
public class TestAnnotation {
// 注解含义: 声明当前的方法是重写的方法
@Override
public String toString() {
return super.toString();
}
// @Test
public void test01() {
// 不使用 不加警告
@SuppressWarnings("unused")
int i;
// 让不使用的变量,和泛型不报警告
@SuppressWarnings({ "rawtypes", "unused" })
List a = new ArrayList();
}
// @Deprecated: 声明方法是过时的方法
}
java.lang
Class String
java.lang.Object
java.lang.String
public final class String exteds Objectt
implements Serializable, Comparable<String>, CharSequence
String str = "abc";
char data[]={'a','b','c'};
String str = new String(data);
Object.toString()
StringBuffer
StringBuilder
Charset
Serialized Form
// 编译期间有效
@Override
@Deprecated
@Suppresswarning
自己定义注解
// 定义注解
public @interface MyTest{
// 给注解定义属性
public long time();
}
格式
public @interface 注解名称{
public 属性类型 属性名称 1() default 默认值;
}
//以下注解的含义是:如果当前方法的执行时间超过1秒,会报错
@Test(timeout=1000)
@Deprecated
//以下注解的含义是:声明以下的方法是过时的方法,不建议大家使用
//@SuppressWarnings("unused")
抑制编译器发生警告信息
//@SuppressWarnings({ "unused", "rawtypes" })
抑制编译器发生警告信息
//@Override
声明当前的方法是重写父类的方法
注解的属性支持的类型有
基本数据类型(4类8种)
String,Class,Annotation(注解类型),枚举类型
public class UserDao {
static{
System.out.println("加载静态代码段的消息");
}
@MyTest
public void addUser(){
System.out.println("增加用户");
}
@MyTest
public void delUser(){
System.out.println("删除用户");
}
@MyTest
public void uptUser(){
System.out.println("更新用户");
}
public void getUser(){
System.out.println("获取用户");
}
}
注解Retention说明当前自定义注解的作用域(Class,Source,Runtime)
//@Retention(RetentionPolicy.RUNTIME)
注解Target说明当前的自定义注解的目标对象
//@Target(ElementType.METHOD)
public @interface MyTest {
//在MyTest注解中定义成员属性,默认值为-1
public long timeout() default -1;
}
注解:自定义,要说明作用域和目标对象.
设计模式:
单例模式,工厂模式,
// 单例模式
public class Stu {
private Stu() {
}
private static Stu stu=new Stu();
public static Stu getInstance(){
return stu;
}
}
public class TestStu {
public static void main(String[] args) {
Stu stu1=Stu.getInstance();
Stu stu2=Stu.getInstance();
Stu stu3=Stu.getInstance();
System.out.println(stu1);
System.out.println(stu2);
System.out.println(stu3);
}
}
设计模式,用于解决各种问题的套路.
装饰者模式:
要知道接口中的方法,自己定义装饰类实现接口.传参数,为不能继承的实现类.
public interface ICar {
public void start();
public void run();
public void stop();
}
public class GoogleCar implements ICar{
@Override
public void start() {
System.out.println("控制谷歌的汽车启动");
}
@Override
public void run() {
System.out.println("控制谷歌的汽车运行");
}
@Override
public void stop() {
System.out.println("控制谷歌的汽车停止");
}
}
public class TestCar {
public static void main(String[] args) {
ICar car=new GoogleCar();
car.start();
car.run();
car.stop();
}
}
public interface ICar {
public void start();
public void run();
public void stop();
}
public class GoogleCar implements ICar{
@Override
public void start() {
System.out.println("判断天气是否良好");
System.out.println("判断路况是否良好");
System.out.println("控制谷歌的汽车启动");
}
@Override
public void run() {
System.out.println("控制谷歌的汽车运行");
}
@Override
public void stop() {
System.out.println("控制谷歌的汽车停止");
}
}
public class TestCar {
public static void main(String[] args) {
ICar car=new GoogleCar();
car.start();
car.run();
car.stop();
}
}
public interface ICar {
public void start();
public void run();
public void stop();
}
public class GoogleCar implements ICar{
@Override
public void start() {
System.out.println("控制谷歌的汽车启动");
}
@Override
public void run() {
System.out.println("控制谷歌的汽车运行");
}
@Override
public void stop() {
System.out.println("控制谷歌的汽车停止");
}
}
public class MyCar extends GoogleCar{
@Override
public void start() {
System.out.println("判断天气是否良好");
System.out.println("判断路况是否良好");
super.start();
}
}
public class TestCar {
public static void main(String[] args) {
ICar car=new MyCar();
car.start();
car.run();
car.stop();
}
}
public interface ICar {
public void start();
public void run();
public void stop();
}
public final class GoogleCar implements ICar{
@Override
public void start() {
System.out.println("控制谷歌的汽车启动");
}
@Override
public void run() {
System.out.println("控制谷歌的汽车运行");
}
@Override
public void stop() {
System.out.println("控制谷歌的汽车停止");
}
}
public class MyCar implements ICar{
ICar car;
public MyCar(ICar car) {
this.car=car;
}
@Override
public void start() {
System.out.println("检查天气是否良好");
System.out.println("检查路况是否拥堵");
car.start();
}
@Override
public void run() {
car.run();
}
@Override
public void stop() {
car.stop();
}
}
public class TestCar {
public static void main(String[] args) {
ICar car=new MyCar(new GoogleCar());
car.start();
car.run();
car.stop();
}
}
缺点
缺点就是接口中的方法过多,导致修饰类中的方法过多
动态代理模式:
字节码加载器,把字节码文件加载到内存,这类程序简称为字节码加载器.底层实现,利用io流技术.
字节码加载器3种.
public interface ICar {
public String start(int a,int b);
public void run();
public void stop();
}
public final class GoogleCar implements ICar{
public void fly(){}
@Override
public String start(int a,int b) {
System.out.println("控制谷歌的汽车启动");
return "start...."+a+" "+b;
}
@Override
public void run() {
System.out.println("控制谷歌的汽车运行");
}
@Override
public void stop() {
System.out.println("控制谷歌的汽车停止");
}
}
public class Test {
public static void main(String[] args) {
Class[] clazz = GoogleCar.class.getInterfaces();
Class cla=clazz[0];
//获取ICar.class字节码对象上所有的方法
Method[] mds = cla.getMethods();
for (Method method : mds) {
System.out.println(method.getName());
}
}
}
小结
自定义注解
动态代理解决网站字符集编码
jdk
提供的三个注解作用
注解的使用
注解的定义和解析
Proxy
编写动态代理类
类加载器的作用
自定义注解模拟@Test
使用@Test
对程序进行测试,使用Junit
是单元测试的工具.什么是注解呢,Annotation
注解是一种代码级别的说明.
和注释相比,注释是给开发人员看的,注解是给计算机提供相应的信息.
注解到底有什么用呢?
编译检查,代码分析,编写文档
jdk
提供注解
@Deprecated 表示被修饰的方法已经过时了.
@Override jdk5.0表示复写父类的方法,jdk6.0表示是实现接口的方法
@SuppressWarnings表示抑制警告
deprecation 过时
rawtypes 忽略类型安全
unused 忽略不能使用
unchecked 忽略检查
null 忽略空指针
all 忽略所有
// 方法已过期
class Test {
@Deprecated
public void init(){
}
}
jdk 5.0
class Test1 {
public void init(){}
}
class Test2 extends Test1{
@Override
public void init(){}
}
// jdk6.0
interface Test1{
public void init();
}
class Test2 implements Test1 {
@Override
public void init(){}
}
@SuppressWarnings("serial")
@SuppressWarnings("null")
rawtypes: 类型安全
unused: 不使用
@interface
class interface enum
自定义注解
// 定义注解
@interface MyAno{
}
@interface MyAno{
public String username() default "jack";
}
属性格式: 修饰符, 返回值类型 属性名() [default 默认值]
修饰符: 默认值 public abstract
只能是public abstract
返回值类型,基本类型,字符串String,Class,注解,枚举
属性名:自定义
default
默认值
小结
类加载器
什么是类加载器,类加载器就是负责加载类的对象.
将class
文件加载到内存生成Class
对象,所有的类加载器都是java.lang.ClassLoader
的子类.
类加载器加载机制是全盘负责委托机制.
动态代理解决全站乱码问题
request.getMethod(); 获取当前请求类型
request.setCharacterEncoding(“utf-8”);
String v=request.getParameter(name);
设计模式
- 创建型模式
- 结构型模式
- 行为型模式
工厂方法
抽象工厂
建造者模式
单态模式
原型模式
适配器模式
桥接模式
组合模式
装饰模式
外观模式
享元模式
代理模式
责任链模式
命令模式
解释器模式
迭代器模式
中介者模式
备忘录模式
观察者模式
状态模式
策略模式
模板方法
访问者模式
如果看了觉得不错
点赞!转发!
达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞