![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java学习之路
聪明的王二狗
渲染入门
展开
-
java字节码操作
描述java实现动态性的方式一个是反射,另一个就是字节码操作。字节码的性能比反射要高一些,但是并不是只用字节码就行了,反射和字节码很多时候是相辅相成的。通过反射我们可以动态的创建一个对象,那么通过字节码我们可以做什么呢?动态生成新的类动态改变某个类的结构(添加、删除、修改,新的属性、方法)看来字节码能大大的提高java的动态性,他还有什么优势呢:比反射开销小,性能高JAVAas...原创 2020-02-27 17:18:10 · 668 阅读 · 0 评论 -
java如何用脚本引擎执行javascript代码
脚本引擎介绍JAVA脚本引擎是从JDK6.0之后添加的新功能什么是脚本引擎?使得java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在java平台上调用各种脚本语言的目的java脚本API是连通java平台和脚本语言的桥梁可以把一些复杂易变的业务逻辑交给脚本语言处理,这大大提高了开发效率。简单说就是脚本引擎是java平台和其他脚本语言平台(例如js平台)的中间平台,...原创 2020-02-26 17:05:21 · 573 阅读 · 0 评论 -
java动态编译
描述我们之前写代码都是,写好了代码,然后编译运行,得出结果。java 6.0之后引入了动态编译机制,简单的说就是,运行时编译一段代码并执行应用场景浏览器端写代码,上传到服务器编译并运行的在线测评系统服务器动态加载某些类文件进行编译方法1,通过Runtime调用javac,启动新的进程去操作。(6.0之前,并不算是动态编译,起到动态编译的效果)Runtime run = Runti...原创 2020-02-26 15:28:54 · 240 阅读 · 0 评论 -
java反射
虽然java不是动态语言,但是java具有一定的动态性,可以利用反射机制,字节码操作获得类似动态语言的操作。反射是很重要的,他是java里的大哥级别人物,好多不能做的他都可以做。反射机制原创 2020-02-25 21:18:59 · 108 阅读 · 0 评论 -
java注解
前言如果对注解一点都不了解,强烈推荐看一下这位博主的文章,超级易懂,GO注解注解(Annotation)是从JDK5.0开始引用的新技术。作用可以将注解理解为标签,这个标签是程序的解释,对一段代码的分类,比如@override表示这段代码是重写的,@Deprecated表示这段代码是过时的,当然标签可以自己定义,按照自己的意愿对某段代码分类,方便后续操作。注解在框架中用到的特别多。不...原创 2020-02-25 15:36:04 · 91 阅读 · 0 评论 -
手写webserve——结构,结果和代码
结构文件结构UML类图结果展示专注底层,页面是为了展示结果,所以很简陋首页注册前后登录前后控制台代码GITHUB原创 2020-02-24 20:33:09 · 141 阅读 · 1 评论 -
手写webserve——获取请求协议,返回响应协议及正文
获取请求协议因为HTTP协议的底层用的是TCP/IP协议,所以使用ServeSocket建立与浏览器的连接,获取请求协议。 private ServerSocket serverSocket = new ServerSocket(8888);; Socket client = serverSocket.accept(); System.out.println("一个客户端建立了...原创 2020-02-24 16:28:53 · 215 阅读 · 0 评论 -
手写webserve——概念
需求简单实现一台web服务器:客户请求——服务器响应(请求响应式)概念九大概念oop(面向对象)容器IO多线程网络编程xml解析反射HTMLhttp协议反射概念: 反射Reflection:把java类中的各种结构(方法,属性,构造器,类名)映射成一个个的对象。注: jvm在编译的时候会创建类的模子,用模子来new一个对象,放射就是让我们来创建类的模子作用: ...原创 2020-02-22 20:13:04 · 428 阅读 · 0 评论 -
网络编程/下(简单实现聊天室)
需求使用TCP的Socket实现一个聊天室服务器端:一个线程专门发送消息,一个线程专门接受消息。客户端:一个线程专门发送消息,一个线程专门接受消息。群聊,私聊...原创 2020-02-21 18:04:02 · 972 阅读 · 0 评论 -
UDP,TCP编程
UDP需求完成在线咨询功能:学生和咨询师在线一对一交流分析使用基于UDP协议的Socket网络编程实现不需要使用IO流实现数据的传输每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送的网络中,数据包在网络中寻找他的目的地UDP基本概念DatagramSocket:用于发送和接受数据包的套接字DatagramPacket:数据包...原创 2020-02-20 21:38:36 · 134 阅读 · 0 评论 -
网络编程(上)
基本概念IP:网络中节点(电脑等)的地址,由外网找到内网。【下由详细介绍】B/S,C/S:Browser/Server(浏览器/服务器)结构,Client/Server(客户机/服务器)结构。TCP,UDP:传输控制协议(TCP),用户数据报协议(UDP)【局域网】。端口:数据传输到一个节点,例如电脑,数据根据端口来找到要用的程序。网络:将不同区域的电脑连接在一起,组成局域网,城域网或...原创 2020-02-19 16:22:24 · 194 阅读 · 0 评论 -
定时调度+指令重排+volatile+ThreadLocal+可重入锁+锁分类
定时调度简单的任务调度可以使用Timer,TimerTask两个方法,TimerTask是一个线程的子类,用来指定时间干什么事,Timer用来指定任务的时间。Timer mt = new Timer();//1秒后执行任务一次//mt.schedule(new MyTimer(), 1000);//2秒后,每个1秒执行一次//mt.schedule(new MyTimer(), 200...原创 2020-02-18 20:17:27 · 354 阅读 · 0 评论 -
并发协作——生产者消费者模式
生产者消费者模式解决方式1:生产者/消费者模式–>管程法生产者:负责生产数据的模块(这里的模块可能是:方法,对象,线程,进程)消费者:负责处理数据的模块(这里的模块可能是:方法,对象,线程,进程)缓冲区:消费者不能直接使用生产者的数据,它们之间有个“缓冲区”,生产者将生产好的数据放入“缓冲区”,消费者从“缓冲区”拿要处理的数据。解决方式2:生产者消费者模式–>信号灯法...原创 2020-02-18 14:17:47 · 147 阅读 · 0 评论 -
并发同步
多线程不同步的问题(线程不安全)每个线程都有自己的工作空间,当线程要操作数据时,先从内存中把数据复制到自己的工作空间,然后读取数据或者修改数据,最后用新的数据覆盖原来的数据。一个线程要修改数据,有三个步骤,1.读取数据到工作空间;2.修改工作空间中的数据;3.用工作空间中的数据覆盖内存中的数据。线程是同时运行的,就会带来一个问题,如果一个线程还没把修改好的数据覆盖到内存,另一个线程就读取了内存...原创 2020-02-17 21:56:10 · 94 阅读 · 0 评论 -
线程优先级+守护线程
线程优先级线程是存在优先级的,其范围是 1 ~ 10,数字越大,优先级越高,意味着先执行的概率越大,注意,优先级越高不等于先执行,只是先执行的概率越高。在API中,有与优先级对应的常量:Thread.MAX_PRIORITY:最高的优先级–>10Thread.NORM_PRIORITY:默认优先级–>5Thread.MIN_PRIORITY:最低的优先级->1pa...原创 2020-02-17 14:47:28 · 122 阅读 · 0 评论 -
线程状态
线程状态我们自己定义的线程一共有五种状态,分别是新生状态,就绪状态,运行状态,死亡状态,阻塞状态。新生状态:new出一个实例。就绪状态:调用start()方法,阻塞状态结束。运行状态:cpu分配执行权。死亡状态:run()方法执行完毕,调用stop()方法【已过时】。阻塞状态:调用sleep()方法等。在API中,对线程的状态有其他定义,调用Thread.State会返回其状态...原创 2020-02-16 19:14:16 · 89 阅读 · 0 评论 -
设计模式(记录用)
在看网课的时候看到的,上面只是很简单的介绍,后续一直补充静态代理设计模式静态代理模式要有一个真实角色,一个代理角色,他们两个都要实现同一个接口。作用:记录日志,监控。。。package ThreadClass;/** * 静态代理 * 1,真实角色 * 2,代理角色 * 1,2要实现同一个接口 * TODO * @version 1.0 * @author 王星宇 */...原创 2020-02-16 15:05:03 · 99 阅读 · 0 评论 -
创建线程的三种方式
继承Thread类继承Thread类,重写里面的run()方法。启动线程调用类的start()方法。不是调用run()方法,调用run()方法是普通的调用类的方法的过程,即先执行run()方法,在执行下面的语句,而调用start()方法是告诉cpu要执行run()方法,程序接着向下执行,具体run()方法什么时候执行,看cpu怎么分配package ThreadClass;/** * 创...原创 2020-02-16 14:47:10 · 109 阅读 · 0 评论 -
装饰流
装饰流字节缓冲流字符缓冲流转换流数据流对象流打印流随机流序列流原创 2020-02-14 16:53:48 · 241 阅读 · 0 评论 -
文件的读写
方向在java中进行文件的输入输出,要以程序为中心,也就是把自己想象成写的程序。向文件中写东西的时候是“写”,“write",”output“;从文件中读东西的时候是“读”,“read”,“input”。方法文件的输入输出常用的方法有三种:1.按字节(一个或多个)输入输出,2.按字符(一个或多个)输入输出,3.按行(一行)输入输出。文件的输入输出套路有四个步骤:创建源:File创建要...原创 2020-02-06 17:23:55 · 130 阅读 · 0 评论 -
简单实现HashSet+ HashSet和HashMap的区别
简单实现HashSet因为HashSet的底层是用HashMap实现的,key值为传进来的对象,value都为HashSet类里面定义好的静态Object类,HashSet的许多方法都是直接调用HashMap的方法,并且它的方法几乎只是collection接口的实现,所以很容易理解,这里直接放代码(简单几个方法的实现)。package myCollection;import java.ut...转载 2020-02-05 16:59:35 · 146 阅读 · 0 评论 -
HashMap底层原理及简单实现
HashMap可以用键值对来存储对象,所谓键值对,就是可以通过对象来寻找对象,是对数组索引的推广。底层原理存储结构HashMap底层的实现采用了哈希表,基本结构是“数组+链表”。HashMap里面有一个叫table的Entry数组,Entry是一个用作链表节点的类,也就是说,数组的每个元素都对应着一个链表,结构如图所示:存储过程当调用HashMap的put方法时首先,会计算key...原创 2020-02-04 21:50:34 · 405 阅读 · 0 评论 -
简单实现LinkedList
LinkedList本质上是链表,此次只是实现了LinkedList里面几个基础简单的方法,为了便于理解LinkedList节点类节点类里面包括指向上一个节点的指针,指向下一个节点的指针,和保存数据的Object类,以及两个构造方法。/** * 节点类 * TODO * @version 1.0 * @author 王星宇 */class Node{ Node previous...原创 2020-02-04 15:50:18 · 315 阅读 · 3 评论 -
理解并手写ArrayList
容器容器类似于数组,有些容器就是用数组实现的,但是容器相较于数组有许多优势,它(容器是类)不仅封装着许多实用的方法,而且不用像数组那样,事先定义好大小。当要存放的对象事先不知道数量时,例如用户管理系统,用容器更方便。分类——Collection :是最终的接口,下面有两个接口,分别是Set和List。————Set:接口,里面的对象没有顺序,不可重复——————HashSet:容器—...原创 2020-02-03 21:57:00 · 162 阅读 · 0 评论 -
飞机大战——写游戏时注意的一些细节
项目链接github项目截图常量类可以将程序中一些用到的常量,如窗口大小,单独写在一个类中(constant),再用到的时候可以直接调用,方便修改。package flyGame;public class constant { public static final int ShellNum = 25; public static final int planeX = 150...原创 2020-01-31 16:28:12 · 344 阅读 · 0 评论 -
垃圾回收机制
java引入了垃圾回收机制内存管理对象空间的分配:使用关键字new创建对象即可对象空间的释放:将对象赋值null即可,垃圾回收器负责回收所有“不可达”对象的内存空间垃圾回收过程任何一种垃圾回收算法一般要做两件基本的事情:发现无用的对象回收无用对象所占的内存空间垃圾回收机制保证可以将无用的对象内存空间进行回收,无用的对象是指没有任何对象引用该对象。java的垃圾回收器通过相关...原创 2020-01-28 21:14:07 · 114 阅读 · 0 评论 -
面向对象内存分析
Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。栈的特点:栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)JVM为每个线程创建一个栈,用于存放改线程执行方法的信息(实际参数、局部变量等)栈属于线程私有,不能实现线程间的共享栈的存储特性是 先进后出,后进先出栈是由系统自动分配,速度快,栈是...原创 2020-01-01 23:50:37 · 167 阅读 · 0 评论 -
java第一课——eclipse的安装使用
初次写博客,如有错误,欢迎指出。eclipse是java编程一个非常好用的集成开发环境(IDE,Integrated Development Environment ),下面是eclipse的安装教程:安装JDKJDK(Java Development Kit):包含java的运行环境(JVM(Java Virtual Machine/Java虚拟机)、JAVA工具)最新版JDK下载链接...原创 2019-10-27 21:59:58 · 368 阅读 · 1 评论