前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第76节:Java中的基础知识

第76节:Java中的基础知识

作者头像
达达前端
发布2019-07-03 14:43:21
3640
发布2019-07-03 14:43:21
举报
文章被收录于专栏:达达前端

第76节:Java中的基础知识

字数

设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat

折佣动态代理解决网站的字符集编码问题

使用request.getParameter()获得的数据是否有乱码问题.

自定义注解

@: @Test等.注解就是一种数据类型

代码语言:javascript
复制
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: 声明方法是过时的方法
    
}
代码语言:javascript
复制
java.lang
Class String
java.lang.Object
java.lang.String
public final class String exteds Objectt
implements Serializable, Comparable<String>, CharSequence
代码语言:javascript
复制
String str = "abc";
char data[]={'a','b','c'};
String str = new String(data);
Object.toString()
StringBuffer
StringBuilder
Charset
Serialized Form
代码语言:javascript
复制
// 编译期间有效
@Override
@Deprecated
@Suppresswarning

自己定义注解

代码语言:javascript
复制
// 定义注解
public @interface MyTest{
 // 给注解定义属性
public long time();
}

格式
public @interface 注解名称{
 public 属性类型 属性名称 1() default 默认值;
}
代码语言:javascript
复制
//以下注解的含义是:如果当前方法的执行时间超过1秒,会报错
@Test(timeout=1000)

@Deprecated
//以下注解的含义是:声明以下的方法是过时的方法,不建议大家使用

//@SuppressWarnings("unused")
抑制编译器发生警告信息

//@SuppressWarnings({ "unused", "rawtypes" })
抑制编译器发生警告信息

//@Override
声明当前的方法是重写父类的方法

注解的属性支持的类型有

代码语言:javascript
复制
基本数据类型(4类8种)
String,Class,Annotation(注解类型),枚举类型
代码语言:javascript
复制
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("获取用户");
    }
}
代码语言:javascript
复制
注解Retention说明当前自定义注解的作用域(Class,Source,Runtime)
//@Retention(RetentionPolicy.RUNTIME)

注解Target说明当前的自定义注解的目标对象
//@Target(ElementType.METHOD)

public @interface MyTest {
    //在MyTest注解中定义成员属性,默认值为-1
    public long timeout() default -1;
}

注解:自定义,要说明作用域和目标对象.

设计模式:

单例模式,工厂模式,

代码语言:javascript
复制
// 单例模式
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);
    }
}

设计模式,用于解决各种问题的套路.

装饰者模式:

要知道接口中的方法,自己定义装饰类实现接口.传参数,为不能继承的实现类.

代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
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();
    }
}
代码语言:javascript
复制
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种.

代码语言:javascript
复制
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提供注解

代码语言:javascript
复制
@Deprecated 表示被修饰的方法已经过时了.
@Override jdk5.0表示复写父类的方法,jdk6.0表示是实现接口的方法
@SuppressWarnings表示抑制警告
deprecation 过时
rawtypes 忽略类型安全
unused 忽略不能使用
unchecked 忽略检查
null 忽略空指针
all 忽略所有
代码语言:javascript
复制
// 方法已过期
class Test {
 @Deprecated
 public void init(){
 }
}
代码语言:javascript
复制
jdk 5.0
class Test1 {
 public void init(){}
}
class Test2 extends Test1{
 @Override
 public void init(){}
}
代码语言:javascript
复制
// jdk6.0
interface Test1{
 public void init();
}
class Test2 implements Test1 {
 @Override
 public void init(){}
}
代码语言:javascript
复制
@SuppressWarnings("serial")
@SuppressWarnings("null")
rawtypes: 类型安全
unused: 不使用
代码语言:javascript
复制
@interface
class interface enum

自定义注解

代码语言:javascript
复制
// 定义注解
@interface MyAno{
 
}
代码语言:javascript
复制
@interface MyAno{
 public String username() default "jack";
}

属性格式: 修饰符, 返回值类型 属性名() [default 默认值]

修饰符: 默认值 public abstract 只能是public abstract

返回值类型,基本类型,字符串String,Class,注解,枚举

属性名:自定义

default默认值

效果

效果

小结

类加载器

什么是类加载器,类加载器就是负责加载类的对象.

class文件加载到内存生成Class对象,所有的类加载器都是java.lang.ClassLoader的子类.

类加载器加载机制是全盘负责委托机制.

动态代理解决全站乱码问题

代码语言:javascript
复制
request.getMethod(); 获取当前请求类型
request.setCharacterEncoding(“utf-8”); 
String v=request.getParameter(name);

设计模式

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

如果看了觉得不错

点赞!转发!

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

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.01.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态代理模式:
  • 小结
  • 小结
  • 动态代理解决全站乱码问题
  • 设计模式
  • 结语
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,助力维护团队卓越代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档