博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第76节:Java中的基础知识
阅读量:5032 次
发布时间:2019-06-12

本文共 7009 字,大约阅读时间需要 23 分钟。

标题图

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

设计模式

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

如果看了觉得不错

点赞!转发!

达叔小生:往后余生,唯独有你

You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

转载于:https://www.cnblogs.com/dashucoding/p/11140342.html

你可能感兴趣的文章
less 分页显示文件内容
查看>>
如何对数据按某列进行分层处理
查看>>
[Qt] this application failed to start because it could not find or load the Qt platform plugin
查看>>
Git Submodule管理项目子模块
查看>>
学会和同事相处的30原则
查看>>
文件操作
查看>>
jquery基本选择器
查看>>
hdu 1010 dfs搜索
查看>>
搭建wamp环境,数据库基础知识
查看>>
android中DatePicker和TimePicker的使用
查看>>
SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
查看>>
Android中获取应用程序(包)的大小-----PackageManager的使用(二)
查看>>
Codeforces Gym 100513M M. Variable Shadowing 暴力
查看>>
浅谈 Mybatis中的 ${ } 和 #{ }的区别
查看>>
CNN 笔记
查看>>
版本更新
查看>>
SQL 单引号转义
查看>>
实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
查看>>
PHP socket客户端长连接
查看>>
7、shell函数
查看>>