第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.langClass Stringjava.lang.Objectjava.lang.Stringpublic final class String exteds Objecttimplements Serializable, Comparable, CharSequence
String str = "abc";char data[]={'a','b','c'};String str = new String(data);Object.toString()StringBufferStringBuilderCharsetSerialized 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.0class Test1 { public void init(){}}class Test2 extends Test1{ @Override public void init(){}}
// jdk6.0interface Test1{ public void init();}class Test2 implements Test1 { @Override public void init(){}}
@SuppressWarnings("serial")@SuppressWarnings("null")rawtypes: 类型安全unused: 不使用
@interfaceclass 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后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通 简书博客: 达叔小生
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞