第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);

设计模式

  1. 创建型模式
  2. 结构型模式
  3. 行为型模式
工厂方法
抽象工厂
建造者模式
单态模式
原型模式
适配器模式
桥接模式
组合模式
装饰模式
外观模式
享元模式
代理模式
责任链模式
命令模式
解释器模式
迭代器模式
中介者模式
备忘录模式
观察者模式
状态模式
策略模式
模板方法
访问者模式

如果看了觉得不错

点赞!转发!

达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞
posted @ 2019-01-25 16:50  达达前端  阅读(369)  评论(0编辑  收藏  举报