
java
文章平均质量分 78
全栈Java笔记
这个作者很懒,什么都没留下…
展开
-
15.2-全栈Java笔记:ActionEvent事件类型可以实现哪些功能?
ActionEvent事件ActionEvent可能是使用得最多的事件类型,其对应的监听器是ActionListener接口,该监听器接口的实现类必须重写actionPerformed方法,当事件发生时就会调用该方法。这个方法的原型是:public void actionPerformed(ActionEvent e); 这个actionPerformed方法就是当事件发生时,由系统自动调用的方法原创 2017-08-17 15:43:37 · 2500 阅读 · 0 评论 -
14.1-全栈Java笔记: Java语言中GUI到底是神马鬼?| AWT | Swing
到目前为止,我们在Java中编写的基本都是基于控制台的程序;而Java编程语言之所以如此流行的一个主要原因之一,就是因为它支持图形用户界面功能,即GUI(Graphical User Interface)。GUI(Graphical User Interface)即图形用户界面,就是应用程序提供给我们用户操作的图形界面,包括窗口、菜单、工具栏及其它多种图形界面元素,如文本框、按钮、列表框、对话框等。原创 2017-08-09 14:44:48 · 612 阅读 · 0 评论 -
13.7-全栈Java笔记:打飞机游戏实战项目|Rectangle|intersects|Plane
碰撞类检测技术 游戏中,碰撞是遇到最频繁的技术。当然,很多游戏引擎内部已经做了碰撞检测处理,我们只需调用即可。本节课是从碰撞的原理进行讲解,大家自己去实现基本的碰撞检测。矩形检测原理 游戏中,多个元素是否碰到一起,实际上,通常是用“矩形检测”原理实现的。 我们在前面提到,游戏中所有的物体都可以抽象成“矩形”,我们只需判断两个矩形是否相交即可。对于一些复杂的多边形、不规则物体,实际上是将他分解成多原创 2017-08-04 14:22:33 · 1752 阅读 · 1 评论 -
13.6-全栈Java笔记:打飞机游戏实战项目|Shell|speed|launchFrame
炮弹类设计 通过炮弹类的设计,我们可以更深入了解构造器的用法以及容器的用法。同时,可能还需要读者稍微回忆一下初中数学曾学过的三角函数,这样更能理解炮弹飞行路径的计算原理。 当然,如果忘记这些知识了也没关系,毕竟在实际开发中很少涉及数学原理性的内容。炮弹类基本设计 炮弹类我们用实心的黄色椭圆实现,不再加载新的图片。当然,大家课下可以自行找一些炮弹图片亦可。 我们的逻辑是在窗口固定位置(200,2原创 2017-08-03 14:36:58 · 1483 阅读 · 0 评论 -
13.5-全栈Java笔记:打飞机游戏实战项目|KeyEvent|Plane|live
飞机类设计 飞机是我们游戏中的主物体,需要由玩家直接控制,手段有:键盘、鼠标、触摸屏等等。无论是什么硬件,本质上都是玩家通过硬件改变游戏物体的坐标,从而实现多种多样的效果。 本节中,我们重点使用键盘进行交互。大家学会了使用键盘操控游戏物体,通过鼠标或其他,我们只需要通过相关API的帮助即可轻松实现。键盘控制原理 键盘和程序交互时,每次按下键、松开键都会触发相应的键盘事件,事件的信息都封装到了K原创 2017-08-02 14:38:03 · 879 阅读 · 0 评论 -
13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane
全栈Java笔记:打飞机游戏实战项目上节,我们实现了动画效果,但是发现窗口会不停的闪烁,体验度非常差。在实际开发中,绘制图形是非常复杂的,绘图可能需要几秒甚至更长时间,也经常发生闪烁现象, 为了解决这个问题,我们通常使用“双缓冲技术”。1)“双缓冲技术”的绘图过程原创 2017-08-01 14:50:06 · 1626 阅读 · 0 评论 -
13.3-全栈Java笔记:打飞机游戏实战项目|PaintThread|launchFrame
多线程和内部类实现动画效果 1)增加绘制窗口的线程类 前三个版本,我们步步为营,每个小版本都有功能的突破。但是,目前为止我们的窗口仍然是静态的,并没有像真正的游戏窗口那样“各种动、各种炫”。本节我们结合多线程实现动画效果。 我们在MyGameFrame类中定义“重画窗口线程PaintThread类”,为了方便使用MyGameFrame类的属性和方法,我们将PaintThread定义成内部类。【原创 2017-07-31 14:51:58 · 1322 阅读 · 0 评论 -
13.2-全栈Java笔记:打飞机游戏实战项目|Graphics|ImageIO|GameUtil
上节我们讲到如何在游戏项目中运用AWT技术绘制游戏窗口,本节我们继续往下讲~~图形和文本绘制 1)paint方法 如果要在窗口中画图或者显示什么内容,我们需要重写paint(Graphics g)方法。 这个方法的作用是:画出整个窗口及其内部内容。它会被系统自动调用。我们自己不需要去调用这个方法。 【示例1】paint方法介绍@Overridepublic void paint(Graphi原创 2017-07-28 14:53:36 · 1449 阅读 · 3 评论 -
13.1-全栈Java笔记:打飞机游戏实战项目|AWT|MyGameFrame
重点内容简介和项目目标 通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用。 比如:多线程用来实现动画效果、容器实现对于多发炮弹的存取和处理、常用类等等的应用。 寓教于乐,让大家迅速入门,更希望通过喜闻乐见的小游戏,让大家爱上编程,爱上“程序员”。老鸟建议 很多朋友会疑惑:“游戏项目,又不能拿到企业面试中,为什么要讲?” 这是一种太过于功利的想法。就像,原创 2017-07-27 15:37:27 · 1294 阅读 · 0 评论 -
12.7-全栈Java笔记:Java网络编程(五)
UDP通讯的实现1.DatagramSocket:用于发送或接收数据包当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSocket对象,在客户端产生一个DatagramSocket对象。服务器端的DatagramSocket将DatagramPacket发送到网络上,然后被客户端的DatagramSocket接收。DatagramSocket有两种构造函数。原创 2017-07-04 09:25:25 · 314 阅读 · 0 评论 -
12.6-全栈Java笔记:Java网络编程(四)
上节回顾:在学习了Socket建立客户端和服务器双向交流后,我们发现它的问答形式不够灵活。本节课我们讲解如何在服务器和客户端之间实现聊天室~需要思考的问题:服务器端:一个线程专门发送消息,一个线程专门接收消息。客户端:一个线程专门发送消息,一个线程专门接收消息。除了消化这段代码外,还需要思考,怎么实现一个聊天室!(难度较大!!)【示例1】聊天室服务器端原创 2017-07-04 09:23:57 · 195 阅读 · 0 评论 -
12.5-全栈Java笔记:Java网络编程(三)
上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信呢?在上节中我们已经讲到,TCP/IP套接字是最可靠的双向流协议,使用TCP/IP可以发送任意数量的数据。如果发送方和接收方计算机确定好端口,他们就可以通信了,其中的端口用套接字表原创 2017-07-04 09:22:34 · 264 阅读 · 0 评论 -
12.4-全栈Java笔记:Java网络编程(二)
基于TCP协议的Socket编程和通信在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。 “请求-响应”模式: Socket类:发送TCP消息 ServerSocket类:创建服务器套接字是一种进程原创 2017-07-04 09:21:09 · 250 阅读 · 0 评论 -
12.3-全栈Java笔记:Java网络编程(一)
Java为了可移植性,不允许直接调用操作系统,而是由java.net包来提供网络功能。Java虚拟机负责提供与操作系统的实际连接。 InetAddress作用:封装计算机的IP地址和DNS(没有端口信息!)。特点:这个类没有构造函数。如果要得到对象,只能通过静态方法:getLocalHost、getByName、 getAllByName、 getAddress、getHost原创 2017-07-04 09:20:00 · 237 阅读 · 0 评论 -
12.2-全栈Java笔记: TCP协议和UDP协议
区别在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输原创 2017-07-03 09:48:06 · 404 阅读 · 0 评论 -
12.1-全栈Java笔记:网络编程的基本概念
什么是计算机网络?把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。计算机网络的主要功能:资源共享信息传输与集中处理均衡负荷与分布处理综合信息服务 (www/综合业务数字网络 ISDN)什么是网络通信协议?计算机网络中实现通信必须有一原创 2017-07-03 09:42:18 · 480 阅读 · 0 评论 -
11.11-全栈Java笔记:线程状态转换和任务定时调度
线程状态转换 图1 线程的状态1)New :创建好线程对象,但没有启动的时候。一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源。2)就绪线程序通过Scheduler(调度程序)去确定是否运行。3)Runing---dead:运行结束(非双向,为单向箭头)。4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件原创 2017-07-03 09:39:54 · 485 阅读 · 0 评论 -
11.9-全栈Java笔记: 线程并发协作(生产者/消费者模式)
多线程环境下,我们经常需要多个线程的并发和协作。这个时候,就需要了解一个重要的多线程并发协作模型“生产者消费者模式”。 什么是生产者?生产者指的是负责生产数据的模块(这里模块可能是:方法、对象、线程、进程)。 什么是消费者?消费者指的是负责处理数据的模块(这里模块可能是:方法、对象、线程、进程)。什么是缓冲区?消费者不能直接使用生产者的数据,它们之间有个“缓冲原创 2017-07-03 09:38:13 · 557 阅读 · 0 评论 -
11.8-全栈Java笔记:死锁及解决方案
死锁的概念“死锁”指的是:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 因此, 某一个同步块需要同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。下面案例中,“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么,实际运行时,“小丫的化妆线程原创 2017-07-03 09:32:59 · 872 阅读 · 0 评论 -
11.7-全栈Java笔记:如何实现线程同步
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问时的冲突问题。 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized原创 2017-07-03 09:30:07 · 249 阅读 · 0 评论 -
11.6-全栈Java笔记:什么是线程同步
同步问题的提出现实生活中,我们会遇到“同一个资源,多个人都想使用”。 比如:教室里,只有一台电脑,多个人都想使用。天然的解决办法就是,在电脑旁边,大家排队。前人使用完后,后人再使用。线程同步的概念处理多线程问题时,多个线程同时访问同一个对象,并且一个线程还想修改这个对象。 这时候,我们就需要用到“线程同步”。 线程同步其实就是一种等待机制,多个线程需要同时访问同一个对象,则线原创 2017-07-03 09:28:06 · 248 阅读 · 0 评论 -
11.5-全栈Java笔记:线程基本信息和优先级别
获取线程基本信息的方法表 线程的常用方法方法功能isAlive()判断线程是否还“活”着,即线程是否还未终止。getPriority()获得线程的优先级数值setPriority()设置线程的优先级数值setName()原创 2017-07-03 09:26:29 · 232 阅读 · 0 评论 -
11.4-全栈Java笔记:线程三种状态的控制
关于Java线程终止、暂停、联合的文章网上有很多,经过测试,本节重点讲解的是针对不同使用场景选择合适的方法。终止线程的典型方式终止线程我们一般不使用JDK提供的stop()/destroy()方法(他们本身也被JDK废弃了)。通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行。【示例1】终止线程的典型方法(重要!!!)原创 2017-07-03 09:25:13 · 262 阅读 · 0 评论 -
11.3-全栈Java笔记:线程的生命周期
一个线程对象在它的生命周期内,需要经历5个状态。新生状态(New)用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。就绪状态(Runnable)处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 “线程就绪队列”,等待系统为其分配CPU。 就绪状态并不是执行状态,当系统选定一原创 2017-07-03 09:22:43 · 292 阅读 · 0 评论 -
11.2-全栈Java笔记:Java中如何实现多线程
在JAVA中使用多线程非常简单,我们先学习如何创建和使用线程,然后结合案例再深入剖析线程的特性。通过继承Thread类实现多线程继承Thread类实现多线程的步骤:1. 在Java中负责线程的这个功能的是java.lang.Thread 这个类2. 可以通过创建 Thread 的实例来创建新的线程。3. 每个线程都是通过某个特定Thread对象所对应的方法run( )原创 2017-06-30 10:25:02 · 214 阅读 · 0 评论 -
11.1-全栈Java笔记:多线程技术的基本概念
多线程是JAVA语言的重要特性,大量应用于网络编程、应用于服务器端程序的开发、以及最常见的UI界面底层原理、操作系统底层原理都大量使用了多线程。我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程的应用。UI界面的主线程绘制界面,如果有一个耗时的操作发生则启动新的线程,完全不影响主线程的工作。当这个线程工作完毕后,再更新到主界面上。我们可以上百人、上千人、上万人同时访问原创 2017-06-30 10:19:57 · 645 阅读 · 0 评论 -
10.10-全栈Java笔记:Apache IOUtils和FileUtils的使用
JDK中提供的文件操作相关的类,功能非常基础,进行复杂操作时需要做大量编程工作。实际开发中,往往需要你自己动手编写相关的,尤其在遍历目录文件时,经常用到递归,非常繁琐。 Apache-commons工具包中提供了FileUtils,可以让我们非常方便的对文件和目录进行操作。 本文就是让大家对FileUtils类有一个全面的认识,便于大家以后开发文件和目录相关功能。 Apache I原创 2017-06-30 10:04:31 · 1358 阅读 · 0 评论 -
10.9-全栈Java笔记:装饰器模式构建IO流体系
装饰器模式装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强的功能。 我这里有智能手机Iphone, 我们可以通过加装投影组件,实现原有手机功能的扩展。这就是一种“装饰器模式”。 我们在未来普通人加装“外骨骼”装饰,让普通人具有力扛千斤的能力,也是一种“装饰器模式”。 【图】 手机经过投影套件“装饰后”,原创 2017-06-30 10:01:38 · 295 阅读 · 0 评论 -
10.8-全栈Java笔记:序列化/反序列化的步骤和实例
本节我们详细讲解10.3节中提到的序列化和反序列化操作。序列化和反序列化是什么当两个进程远程通信时,彼此可以发送各种类型的数据。 无论是何种类型的数据,都会以二进制序列的形式在网络上传送。比如,我们可以通过http协议发送字符串信息;我们也可以在网络上直接发送JAVA对象。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。原创 2017-06-30 10:00:42 · 249 阅读 · 0 评论 -
10.7-全栈Java笔记:常见流详解(五)
本节我们学习「常见流中的最后两项:转换流和随意访问文件流」~转换流InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景:System.in是字节流对象, new BufferedReader(须接受Reader对象)。我们就能将System.in转换成Reader对象,即可完成此场景。【示例1】使用Input原创 2017-06-30 09:57:52 · 197 阅读 · 0 评论 -
10.6-全栈Java笔记:常见流详解(四)
上节我们讲到「Java中常用流:数据流和对象流」,本节我们学习文件字符流和文件缓冲流~文件字符流前面介绍的文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。【示例1】使用FileReader与FileWriter实现文本文件的copypac原创 2017-06-30 09:56:38 · 312 阅读 · 0 评论 -
10.5-全栈Java笔记:常见流详解(三)
上节我们讲到「Java中常用流:缓冲流」,本节我们学习数据流和对象流~ 数据流数据流将“基本数据类型变量”作为数据源,从而允许程序以与机器无关方式从底层输入输出流中操作java基本数据类型。 DataInputStream和DataOutputStream提供了可以存取与机器无关的所有Java基础类型数据(如:int,double 等)的方法。【示例1】DataInput原创 2017-06-30 09:55:53 · 268 阅读 · 0 评论 -
10.4-全栈Java笔记:常用流详解(二)
上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~ 缓冲流BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数组来提高操作流的效率。【示例1】使用缓冲流实现文件的高效率复制操作public class Demo06 { public static voi原创 2017-06-30 09:51:59 · 251 阅读 · 0 评论 -
10.3-全栈Java笔记:常用流详解(一)
文件字节流FileInputStream通过字节的方式读取文件,适合读取所有类型文件(图像、视频、文本文件等)。Java也提供了FileReader专门读取文本文件。 FileOutputStream 通过字节的方式写数据到文件,适合所有类型文件。Java也提供了FileWriter专门写入文本文件。 【示例1】将文件内容读取到程序中。 import原创 2017-06-30 09:50:39 · 237 阅读 · 0 评论 -
10.2-全栈Java笔记:最全面的IO技术(二)
上节我们聊到「IO技术概念及入门」这节我们继续聊一下IO技术的分类。Java中流的概念细分按流的方向分类:输入流:数据流向是数据源到程序(InputStream、Reader结尾的流)输出流:数据流向是程序到目的地(OutPutStream、Writer结尾的流)按处理的数据单元:字节流:按照字节读取数据(InputStream、OutputStre原创 2017-06-29 10:46:12 · 507 阅读 · 0 评论 -
10.1-全栈Java笔记:最全面的IO技术(一)
IO技术对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等等。外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读原创 2017-06-29 10:41:32 · 983 阅读 · 0 评论 -
9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类
遍历集合的N种方式总结【示例1】遍历List方法1,使用普通for循环for(int i=0;i//list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp);}【示例2】遍历List方法2,使用增强for循环(使用原创 2017-06-29 10:38:34 · 660 阅读 · 0 评论 -
9.7-全栈Java笔记:Set接口和实现类
Set接口Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然试用。因此,学习Set的使用将没有任何难度。 Set容器表示:无序、不可重复。无序表示Set中的元素没有索引,我们只能遍历查找;不可重复表示:不允许加入重复的元素。更确切地讲,新元素如果和Set中某个元素通过eq原创 2017-06-29 10:34:17 · 576 阅读 · 0 评论 -
9.6-全栈Java笔记:二叉树和红黑二叉树
二叉树的定义二叉树是树形结构的一个重要类型。 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树(BinaryTree)由一个结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。下图中展现了五种不同基本形态的二叉树。(a) 为空树原创 2017-06-29 10:28:25 · 577 阅读 · 0 评论 -
9.5-全栈Java笔记:Map接口中的实现类HashMap
上节聊到「Map接口和实现类」,今天我们深入探讨其实现类中的HashMap如何进行底层实现。Hashmap基本结构讲解哈希表的基本结构就是“数组+链表”。我们打开HashMap源码,发现有如下两个核心内容:public class HashMap extends AbstractMap implements原创 2017-06-29 10:23:48 · 390 阅读 · 0 评论