![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
gaokewoo
这个作者很懒,什么都没留下…
展开
-
TCP通讯模型
Socket编程模型是Java网络编程的基础,在Socket API的基础上,可以做出更多的网络应用程序,比如FTP、HTTP、QQ等通讯工具都可以通过Socket API来实现。 一、最简单的Socket编程模型: package lavasoft.ex1; import java.io.IOException; import java转载 2014-04-29 13:20:12 · 377 阅读 · 0 评论 -
并发协作-生产者消费者模型
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,转载 2014-05-06 09:35:39 · 391 阅读 · 0 评论 -
新特征-条件变量
条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式着天壤之别。 条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象转载 2014-05-06 09:33:34 · 270 阅读 · 0 评论 -
新特征-线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程转载 2014-05-06 09:32:31 · 385 阅读 · 0 评论 -
Java中的clone
一个很典型的调用clone()代码如下:class CloneClass implements Cloneable{ public int aInt; public Object clone(){ CloneClass o = null; try{ o = (CloneClass)super.clone()转载 2014-05-06 11:55:32 · 360 阅读 · 0 评论 -
并发协作-死锁
线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。 发生死锁的原因一般是两个对象的锁相互等待造成的。 在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子。 /** * Java线程:并发协作-死锁 * * @author转载 2014-05-06 09:35:59 · 427 阅读 · 0 评论 -
break和continue关键字使用总结
一、作用和区别 break的作用是跳出当前循环块(for、while、do while)或程序块(switch)。在循环块中的作用是跳出当前正在循环的循环体。在程序块中的作用是中断和下一个case条件的比较。 continue用于结束循环体中其后语句的执行,并跳回循环程序块的开头执行下一次循环,而不是立刻循环体。 二、其他用途 bre转载 2014-05-06 09:47:55 · 530 阅读 · 0 评论 -
return语句使用总结
Java中的return语句使用总结 Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。 在return语句的各类文章中,大多仅仅介绍了return语句用于有返回值(非void返回值)的方法中。而很少或没有介绍return语句转载 2014-05-06 09:45:42 · 460 阅读 · 0 评论 -
新特征-信号量
Java的信号量实际上是一个功能完毕的计数器,对控制一定资源的消费与回收有着很重要的意义,信号量常常用于多线程的代码中,并能监控有多少数目的线程等待获取资源,并且通过信号量可以得知可用资源的数目等等,这里总是在强调“数目”二字,但不能指出来有哪些在等待,哪些资源可用。 因此,本人认为,这个信号量类如果能返回数目,还能知道哪些对象在等待,哪些资源可使用,就非常完美了,仅仅拿到这些概括转载 2014-05-06 09:35:10 · 351 阅读 · 0 评论 -
新特征-有返回值的线程
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。 现在Java终于有可返回值的任务(也可以叫做线程)了。 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get转载 2014-05-06 09:34:04 · 379 阅读 · 0 评论 -
多态在 Java 和 C++ 编程语言中的实现比较
众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C++ 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于多态的支持到底是如何实现的呢,本文对此做了全面的介绍。注意到在本文中,指针和引用会互换使用,它们仅是一个抽象概念,表示和另一个对象的连接关系,无须在意其具体的实现。Java 的实现方式Java 对于转载 2014-05-06 11:50:19 · 389 阅读 · 0 评论 -
学习之路
第一步是安装好JDK 写一个Hello World,? 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用转载 2014-05-06 09:48:36 · 284 阅读 · 0 评论 -
final、static使用总结
一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。转载 2014-05-06 09:47:31 · 301 阅读 · 0 评论 -
this、super使用总结
一、this Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,转载 2014-05-06 09:45:12 · 394 阅读 · 0 评论 -
字符串使用总结
一、String类String 类不是原始基本数据类型,在Java中,字符串是一个对象。String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例来实现。 字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。例如:转载 2014-05-06 09:43:17 · 193 阅读 · 0 评论 -
垃圾回收总结
内存是稀缺的资源,哪怕内存一块钱一条!如果在编程中使用不当,再大的内存也会耗光。 一、认识Java的自动垃圾回收 垃圾回收是Java语言的一大特性,方便了编程,是以消耗性能为代价的。而垃圾在这里只无用的对象。而C++是需要程序员自己写析构函数来释放内存的,麻烦,也有可能忘记而导致内存泄露。 Java语言对内存的分配管理是通过JVM内部机制决定的。程序转载 2014-05-06 09:44:44 · 333 阅读 · 0 评论 -
UDP通讯模型
UDP是一种不可靠的网络通讯方式,这里的不可靠是从理论上讲的,从实用角度看还是很可靠的,比如QQ消息等就使用的是UDP的通信的方式。 一、最简单的通信模型import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; /转载 2014-04-29 13:19:44 · 622 阅读 · 0 评论 -
final数据和方法
final数据和方法:一个既是static又是final的域只占据一段不能改变的存储空间对于基本类型,final使数值恒定不变对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以被修改的。Java并未提供使任何对象恒定不变的途径。final方法会防止任何继承类修改它的定义,保证不会被覆转载 2014-04-29 13:18:22 · 367 阅读 · 0 评论 -
垃圾回收器
垃圾回收器:垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放非new分配的对象内存一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存本地方法是一种在Java中调用非Java代码的方法finalize()方法的需求限制到一种特殊情况,即通过某种创建对象转载 2014-04-29 13:17:57 · 325 阅读 · 0 评论 -
类的成员变量初始化
类的成员变量初始化:类的每个基本类型数据成员保证都会有一个初始值在类中定义的一个对象引用时,如果不将其初始化,此引用就会获得一个特殊的初始值null可以在定义类成员变量的地方为其赋值(C++不行)无法阻止自动初始化的进行,它将在构造器被调用之前发生在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括转载 2014-04-29 13:17:03 · 756 阅读 · 0 评论 -
继承与访问权限
访问权限:如果不提供任何访问权限修饰词,则意味着它是“包访问权限”对于类的访问权限,仅有两个选择:包访问权限或public继承:Java会自动在导出类的构造器中插入对基类构造器的调用如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显示地调用基类构造器的语句,并且以适当的参数列表如果Java的基类拥有转载 2014-04-29 13:16:34 · 373 阅读 · 0 评论 -
类与接口
抽象类abstract 关键字表明一个抽象方法或抽象类,包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的如果从一个抽象类继承并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供定义,如果不这样做,那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限定这个类interfaceinterface不仅仅是一个极转载 2014-04-29 13:15:51 · 469 阅读 · 0 评论 -
异常
异常好处:1、不必在方法调用处进行检查2、只需在一个地方处理错误所有标准异常类都有两个构造器:一个默认构造器另一个是接受字符串作为参数要自己定义异常类,必须从已有的异常类继承,最好是选择意思相近的异常类继承printStackTrace()将打印从方法调用处直到异常抛出处的方法调用序列e.printStackTrace()e.getMes转载 2014-04-29 13:15:32 · 302 阅读 · 0 评论 -
RTTI
Java使用Class对象来执行其RTTI,即使你正在执行的是类似转型这样的操作Java程序在它开始运行之前并非被完全加载,其各个部分是在必需时才加载的(由类加载器进行加载)static成员在类第一次被加载时执行static初始化是在类加载时进行的Class对象就和其他对象一样,我们可以获取并操作它的引用。forName()是取得Class对象的引用的一转载 2014-04-29 13:13:39 · 311 阅读 · 0 评论 -
泛型
泛型例子:public class Holder {private T a;public Holder(T a){this.a = a;}public void set(T a){this.a = a;}public T get() { return a; }public static void main(String[] args){Holder h = ne转载 2014-04-29 13:11:17 · 400 阅读 · 0 评论 -
内部类
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类 A:成员内部类作为外部类的一个成员存在,与外部类的属性、方法并列。 // 成员内部类中,不能定义静态成员// 成员内部类中,可以访问外部类的所有成员 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner转载 2014-05-06 11:56:42 · 303 阅读 · 0 评论 -
深入分析 Java I/O 的工作机制
I/O 调优下面就磁盘 I/O 和网络 I/O 的一些常用的优化技巧进行总结如下:磁盘 I/O 优化性能检测我们的应用程序通常都需要访问磁盘读取数据,而磁盘 I/O 通常都很耗时,我们要判断 I/O 是否是一个瓶颈,我们有一些参数指标可以参考:如我们可以压力测试应用程序看系统的 I/O wait 指标是否正常,例如测试机器有 4 个 CPU,那么理想的 I/转载 2014-05-06 11:53:02 · 368 阅读 · 0 评论 -
main()方法详解
Java中的main()方法详解 在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。 在看Java中的main()方法之前,先看一个最转载 2014-05-06 09:46:04 · 656 阅读 · 0 评论 -
集合框架使用总结
一、概述数据结构对程序设计着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Frame转载 2014-05-06 09:39:03 · 436 阅读 · 0 评论 -
异常处理总结
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的转载 2014-05-06 09:42:28 · 429 阅读 · 0 评论 -
日期时间使用总结
一、Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题。 在Java中,操作日期主要涉及到一下几个类: 1、java.util.Date 类 Date 表示特定的瞬间,精确到毫秒。从 JDK 1.1转载 2014-05-06 09:39:40 · 367 阅读 · 0 评论 -
线程的调度-守护线程
守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。 setDaemon方法的详细说明:p转载 2014-04-30 16:08:51 · 340 阅读 · 0 评论 -
线程私有变量
线程对象也是从一个(线程)类而构建的,线程类作为一个类也可以拥有自己的私有成员。这个成员为此线程对象私有,有时候使用线程私有变量,会巧妙避免一些并发安全的问题,提高程序的灵活性和编码的复杂度。 下面举例来说吧,统计一个线程类创建过多少个线程,并为每个线程进行编号。 package com.lavasoft.test; /** * 为线程添转载 2014-04-30 16:08:03 · 1408 阅读 · 0 评论 -
网络编程 (5)
使用Java NIO提高服务端程序的性能 在前面的章节里,我们讨论了Java NIO的基本概念,在这一节里,我们将结合具体的Java Socket编程,讨论使用NIO提高服务端程序的性能的问题。 Java NIO增加了新的SocketChannel、ServerSocketChannel等类来提供对构建高性能的服务端程序的支持。SocketChannel、Serve转载 2014-04-30 16:06:46 · 239 阅读 · 0 评论 -
新特征-障碍器
Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。 障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子: import java.util.concurrent.BrokenBarrierException; impor转载 2014-04-30 16:19:37 · 297 阅读 · 0 评论 -
线程栈模型与线程的变量
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈的变化过程。 这幅图描述在代码执行到两个不同时刻1、2时候,虚转载 2014-04-30 16:17:01 · 404 阅读 · 0 评论 -
线程的交互
线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。 一、线程交互的基础知识 SCJP所要求的线程交互知识点需要从java.lang.Object的类的个方法来学习: void notify() 唤醒在此对象监视器上等待的单个线程。 void notifyA转载 2014-04-30 16:12:28 · 286 阅读 · 0 评论 -
线程的同步-同步块
对于同步,除了同步方法外,还可以使用同步代码块,时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。 在上个例子的基础上,对oper方法做了改动,由同步方法改为同步代码块模式,程序的执行逻辑并没有问题。转载 2014-04-30 16:11:43 · 356 阅读 · 0 评论 -
线程的调度-优先级
与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。 /** * Java线程:线程的调度-优转载 2014-04-30 16:09:37 · 374 阅读 · 0 评论 -
线程的调度-让步
线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。 /** * Java线程:线程的调度-让步 * * @author leizhimin 2009-11-4 9转载 2014-04-30 16:08:29 · 305 阅读 · 0 评论