第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 点赞

第76节:Java中的基础知识的更多相关文章

  1. 第79节:Java中一些要点

    第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...

  2. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  3. 第69节:Java中数据库的多表操作

    第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...

  4. 第68节:Java中的MYSQL运用从小白到大牛

    第68节:Java中的MYSQL运用从小白到大牛 前言 学习java必备要求,学会运用!!! 常见关系化数据库 BootStrap是轻量级开发响应式页面的框架,全局css组件,js插件.栅格系统是将页 ...

  5. Java并发(基础知识)—— Executor框架及线程池

    在Java并发(基础知识)—— 创建.运行以及停止一个线程中讲解了两种创建线程的方式:直接继承Thread类以及实现Runnable接口并赋给Thread,这两种创建线程的方式在线程比较少的时候是没有 ...

  6. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  7. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  8. 第82节:Java中的学生管理系统

    第82节:Java中的学生管理系统 学生管理系统的删除功能 删除,点击超链接,点击弹出对话框式是否进行删除,如果确定,就删除,超链接执行的是js方法,在js里访问,跳转servlet,,servlet ...

  9. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

随机推荐

  1. Docker 容器连接

    前面我们实现了通过网络端口类访问运行在 diocker 容器内的服务.下面我们来实现通过端口连接到了一个 dokcer 容器. 网络端口映射 我们创建一个python应用的容器. runoob@run ...

  2. HTML 中使用 JavaScript

    在 HTML 中插入 JavaScript 的主要方法,就是使用 <script> 元素, 浏览器会解释并执行其中的 JavaScript 代码. <script>  元素的属 ...

  3. ----regular expression in js----

    正则表达式:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式. 搜索模式可用于文本搜索和文本替换. ...

  4. Mysql中存储引擎区别【 InnoDB、MyISAM】

    区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事 ...

  5. Ubuntu16.04 安装Tensorflow1.7过程记录一:安装显卡驱动

    为刚到手的Titan V装新系统,首先当然是显卡驱动安装. 可以参考这:https://jingyan.baidu.com/article/d7130635c5a86113fdf47532.html ...

  6. 初识STM32中的USMART组件

    今天看了usmart那部分的模块,感觉使我们stm32的学习变更加方便,你可以通过串口查看和检验你所注册过的函数. USMART配步骤1.将USMART包添加到工程中,头文件要包括path2.添加所需 ...

  7. 详细分析LoadRunner参数化

    在进行网页的性能测试时,对网页的登录界面进行压力测试情况下就会使用到多用户进行登录,就需要对登录名和密码进行参数化,那么loadrunner怎么参数化设置呢?下面我们来详细分析一下. 一.我们这里通过 ...

  8. vue+betterscrool实现横向弹性滚动

    如何利用better-scroll在vue中实现横向滚动,并且滚动到两端以后会有弹性效果 1.使用npm下载better-scroll 2.按需引入better-scroll 3.需要2个盒子装起来组 ...

  9. (PMP)第2章-----项目运行环境

    1.事业环境因素:(客观存在,可能有帮助或阻碍,项目经理必须遵守) 内部:文化,结构,治理:设施和资源的地理分布,基础设施,信息技术软件,资源可用性,员工能力 外部:市场条件,社会和文化,法律限制,商 ...

  10. mysql 慢日志分析

    mysql 调优首先需要找到那些有问题的SQL语句. 怎么找到这些语句呢? mysql 提供了很方便的功能. 1.慢日志 在my.cnf 文件中,增加如下配置 log-error            ...