基础班部分阶段性总结【数据持久化存储--序列化,日期获取,io流,内部类】

1.初识JVM**

(JAVA Virtual Machine)

JVM是一种规范,可以使用软件来实现,也可以使用硬件来实现,就是一个虚拟的用于执行bytecodes

字节码的计算机。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。

JVM负责将java字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。JAVA提供了另一种

解释运行的方法JIT(just in time),可以一【次解释完,再运行特定平台上的机器码【,高级的JIT可以只能

分析热点代码,并将这些代码转成本地机器码,并将结果缓存起来,下次直接从内存中调用,这样就大

大提高了执行JAVA代码的效率。这样就实现了跨平台、可移植的功能。

\1. JVM是指在一台计算机上由软件或硬件模拟的计算机;它类似一个小巧而高效的CPU。

\2. byte-code代码是与平台无关的是虚拟机的机器指令。

\3. java字节代码运行的两种方式:

1)方式interpreter(解释)

2)Just-in-time(即时编译):由代码生成器将字节代码转换成本机的机器代码,然后可以以较高速度执行。

JAVA的跨平台实现的核心是不同平台使用不同的虚拟机

不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处

运行

2.编译型与解释型

两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开

发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object

Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样

的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、

JavaScript、VBScript、Perl、Python等等。

【Java语言虽然比较接近解释型语言】的特征,但在执行之前已经预先进行一次预编译,生成的代码是介

于机器码和Java源代码之间的中介代码,运行的时候则由JVM(Java的虚拟机平台,可视为【解释器】)解

释执行。它既保留了源代码的高抽象、可移植的特点,又已经完成了对源代码的大部分预编译工作,所以

执行起来比“纯解释型”程序要快许多。

3.重写的注意事项

  1. static修饰的方法是静态方法,静态方法类一加载方法就执行,静态方法不能够被重写【静态和非静态方法之间也不能进行重写,编译报错】,同名同参不同方法体的静态方法,编译通过,但都是父类指向子类引用对象,无法构成重写;重写针对的是非静态方法;

例如:

public class Person {

public static void test() {

System.out.println(“Person”);

}

}

//编译通过,但不是重写

public class Student extends Person {

public static void test(){

System.out.println(“Student”);

}

}

main:

Perosn p = new Student();

p.test();//输出Person

p = new Person();

p.test();//输出Perosn

4.【匿名代码块和静态代码块的作用】

匿名代码块的作用是给对象的成员变量初始化赋值,但是因为构造器也能完成这项工作,所以匿名代码块使用的并不多。静态代码块只在第一次加载时执行,匿名代码块每次实例化对象时都会执行(相当于在构造方法中赋值) 因此匿名代码块经常被称为构造代码块;

静态代码块的作用是给类中的静态成员变量初始化赋值。

执行顺序:

静态代码块【仅一次】》匿名代码块》构造器【构造方法父类先执行,然后子类】》普通方法

public class Person {

{

System.out.println(“匿名代码块”);

}

static{

System.out.println(“静态代码块”);

}

public Person(){

System.out.println(“构造器”);

}

}

5、方法绑定(method binding)

执行调用方法时,系统根据相关信息,能够执行内存地址中代表该方法的代码。分为静态绑定和动态绑

定。

静态绑定:

在【编译期】完成,可以提高代码执行速度。

动态绑定:

【通过对象调用的方法】,采用动态绑定机制。这虽然让我们【编程灵活】,但是降低了代码的执行速度。这也

是JAVA比C/C++速度慢的主要因素之一。JAVA中除了final类、final方、static方法,所有方法都是JVM在

运行期才进行动态绑定的。

6.抽象类和抽象方法的实际存在意义

打个比方,要做一个游戏。如果要创建多个角色,如果反复创建类和方法会很繁琐和麻烦。建一个抽象类

后。若要创建角色可直接继承抽象类中的字段和方法,而抽象类中又有抽象方法。如果一个角色有很多种

职业,每个职业又有很多技能,要是依次实例这些技能方法会显得想当笨拙。定义抽象方法,在需要时继

承后重写调用,可以省去很多代码。 【建立类似的类,减少代码冗余】

总之抽象类和抽象方法起到一个【框架作用。很方便后期的调用和重写 】

抽象方法是为了【增加程序的可扩展性】。重写抽象方法时即可实现同名方法但又非同目的的要求。

7.接口

1)、Java接口中的成员变量默认都是public,static,final类型的(****都可省略****),必须被【显示初始化】,即接口中的成员变量为常量【(大写,单词之间用"_"分隔) 】

2)、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3)、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4)、接口中没有构造方法,不能被实例化

5)、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6)、Java接口必须通过类来实现它的抽象方法

7)、【当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类】

8)、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9)、 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

8.内部类分为四种:

1). 成员内部类(实例内部类、非静态内部类)

成员内部类中不能写静态属性和方法 【因为静态的类加载就执行,比外部类普通方法执行还要快,】

【实例化内部类】

实例化内部类,首先需要实例化外部类,通过外部类去调用内部类

//在A类中申明了一个B类,此B类就在A的内部,并且在成员变量的位置上,所以就称为成员内部类

package cn.kgc.tyl.test1011;

/**
 *
 * 定义成员内部类
 */
public class Outer {
	private int id;

	public void out() {
		System.out.println("这是外部类方法");
	}

	class Inner {
		public void in() {
			System.out.println("这是内部类方法");
		}
	}
}
*************************************1-1
package cn.kgc.tyl.test1011;

import cn.kgc.tyl.test1011.Outer.Inner;

/**
 *
 * 实例化内部类
 */
public class TestOuter {
	public static void main(String[] args) {
		// 实例化成员内部类分两步
		// 1、实例化外部类
		Outer outObject = new Outer();
		// 2、通过外部类调用内部类
		Outer.Inner inObject = outObject.new Inner();
// 12合并      Outer.Inner inObject = new Outer().new Inner();
		inObject.in();// 打印:这是内部类方法
	}
}
/**
 *
 * 这是内部类方法
 */
 **************************************1-2

//测试,调用内部类中的方法

分析:想想如果你要使用一个类中方法或者属性,你就必须要先有该类的一个对象,同理,一个类在另一个类的内部,那么想要使用这个内部类,就必须先要有外部类的一个实例对象,然后在通过该对象去使用内部类

2). 静态内部类

3). 局部内部类

4). 匿名内部类

9. 序列化和反序列化transient【临时的】

1、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。
2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量一样被初始化

对象的序列化可以通过实现两种接口来实现,若操作的是一个Serializable对象,则所有的序列化将会自动进行,若操作的是 一个Externalizable对象,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关
transient临时数据,中途允许改变,用来屏蔽不想序列化的属性
一 什么叫序列化

通俗点讲:它是【处理对象流】的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输。

二 序列化有什么作用【数据的持久化】

1.方便传输,速度快,还很安全,被调用方序列化,调用方反序列化即可拿到传输前【最原始的java对象】,常用于不同进程之间的对象传输

2.方便存储,不管是存储成文件还是数据库,都行,存储为文件,下回要用可以直接反序列拿到对象

三 怎么序列化和反序列化

实现序列化接口就行(里面什么方法都没有,不用管的,只是一个标记接口而已)Serializable;

四 序列化时需要注意事项

为了不必要的报错麻烦: 序列化时最好是定义序列化版本id 即 public static final Long seriaVersionUID = 1L (默认) 或者 xxxxx L(自定义64位都行)

因为反序列化会判断序列化中的id和类中的id是否一样,如果不定义虽然会自动生成,但如果后面改了东西列,所以还是自觉点定义一个id,省去好多麻烦

同时记住【静态变量不会被序列化的】,它可不在堆内存中,序列化只会序列化堆内存

 在Java中,下列选项中,与序列化和反序列化有关的是( )。
多选题
FileReader
ObjectOutputStream
transient
DataOutputStream
BC
序列化和反序列【此题双选,未认真读题】
本题考察对序列化和反序列化的理解。ObjectOutputStream是用于序列化输出的类,transient临时数据,中途允许改变,用来屏蔽不想序列化的属性。所以本题选bc

10.Collections工具类

Java中,java.util.Collections类属于()。

单选题

无实例类;

单实例类

有固定个数的实例类

枚举类

A

集合框架包含的内容

本题考查对Collections类的理解。Java中Collections类完全由在 collection 上进行操作或返回 collection 的【静态方法】组成。它包含在 collection 上操作的【多态算法】,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。因为Collections类提供的方法都是static的,所以可以直接调用执行,不需实例化对象。常见方法实现选择器接口如sort(),shuffle(),reverse。

11.IO输入流输出流【writeUTF()和writeChars()】

package cn.kgc.tyl.test1016;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestIo {
	public static void main(String[] args) {
		
	
	try {
		FileOutputStream fos=new FileOutputStream("D:/demotext.txt");
		try {
			fos.write('a');
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	} catch (FileNotFoundException e) {
			e.printStackTrace();
	}
}
}


//题型	1.单选题此程序运行结果是()。
//A	编译错误,write方法参数应该是int类型
//B	用记事本打开demotext.txt文件,发现写入33
//C	用记事本打开demotext.txt文件,发现写入字符a
//D	用记事本打开demotext.txt文件,发现写入为不可识别的编码
//
/**
 *
 *选C,write(char):两个字节自然输出a,ASCII的小a是65,大A是97,排除法也不会选B
 
 * */
/**
 *2.在Java中,DataOutputStream进行二进制文件操作时,写入字符串“abc”使用( )方法。
单选题
print("abc")
writeString("abc")
writeChar("abc")
writeUTF("abc")
D:写入字符串时,ow向文件中保存文件,【chars】:需要细心些;
使用DataInputStream和DataOutputStream读写二进制文件
DataOutputStream类的写入数据的方法基本以write开头,针对字符串写入,有三个方法 字符数组writeBytes(String arg),多字符 writeChars(String arg),以及unicode字符 writeUTF(String arg)。本题答案中只出现了writeUTF方法,答案为D
 
 * */

12.多线程买票问题【while(true)与for循环】

    1.whiletrue)本身就是循环,有自增,自减,就不要调用for.
    2.为了共享数据,实现的是同一个实现的runnable接口
package cn.kgc.tyl.test1016;


public class TestBuyTicket {
 public static void main(String[] args) {
	 BuyTicket b=new BuyTicket();
	 Thread p1=new Thread(b,"张三");
	 Thread p2= new Thread(b,"李四");
	 p1.start();
	 p2.start();
}
}

13.复合主键

【两个主键必须在一起定义,不能分开定义】
错误写法:

CREATE TABLE flight_details4(
flight_prefix VARCHAR(20) NOT NULL primary key ,
flight_id VARCHAR(10) NOT NULL PRIMARY KEY ,

………………其他字符段………………

);

正确写法:

CREATE TABLE flight_details4(

flight_prefix VARCHAR(20) NOT NULL ,
flight_id VARCHAR(10) NOT NULL ,

………………其他字符段………………,

PRIMARY KEY(flight_prefix,flight_id)
);

– 主键约束:学号、课程编号和日期构成组合主键**【复合主键】**
ALTER TABLE result PRIMARY key (stuNo,subject_num,subject_date);

14.【日期函数】获得先前或者现在一个日期的时分秒,年月日

当前日期 current_date() 或者curdate()

当前时间 now() [输出年月日时分秒]

当前时间vs一个给定的时间具体的时间年/月/小时 year(now()) vs hour(arrivaltime);

当地时间 localtime()

系统时间 sysdate()

DATEDIFF() 函数返回两个日期之间的时间。默认是天数【可以有一个形参,指定类型,比如月,年】
adddate() 返回增加天数的日期,默认是天数。只有两个形参,

DATEDIFF(date1,date2)返回日期参数date1date2之间相隔的天数SELECT DATEDIFF(NOW**(),** **‘2008-8-8’);返回:**2881
ADDDATE(date,n)计算日期参数date加上n天后的日期SELECT ADDDATE(NOW(),5**);返回:**2016-09-02 09:37:07
DATEDIFF(datepart,startdate,enddate)
datepart 参数可以是下列的值:
datepart缩写
yy, yyyy
季度qq, q
mm, m
年中的日dy, y
dd, d
wk, ww
星期dw, w
小时hh
分钟mi, n
ss, s
毫秒ms
微妙mcs
纳秒ns
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2章 一切都是对象 2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结 2.11 练习 第3章 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 3.2.1 真和假 3.2.2 if-else 3.2.3 反复 3.2.4 do-while 3.2.5 for 3.2.6 断和继续 3.2.7 切换 3.3 总结 3.4 练习 第4章 初始化和清除 4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 成员初始化 4.4.1 规定初始化 4.4.2 构建器初始化 4.5 数组初始化 4.5.1 多维数组 4.6 总结 4.7 练习 第5章 隐藏实施过程 5.1 包:库单元 5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 6.4 到底选择合成还是继承 6.5 protected 6.6 递增开发 6.7 上溯造型 6.7.1 何谓“上溯造型”? 6.8 final关键字 6.8.1 final数据 6.8.2 final方法 6.8.3 final类 6.8.4 final的注意事项 6.9 初始化和类装载 6.9.1 继承初始化 6.10 总结 6.11 练习 第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承扩展接口 7.5.3 常数分组 7.5.4 初始化接口的字段 7.6 内部类 7.6.1 内部类和上溯造型 7.6.2 方法和作用域内部类 7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型标识 7.9 总结 7.10 练习 第8章 对象的容纳 8.1 数组 8.1.1 数组和第一类对象 8.1.2 数组的返回 8.2 集合 8.2.1 缺点:类型未知 8.3 枚举器(反复器) 8.4 集合的类型 8.4.1 Vector 8.4.2 BitSet 8.4.3 Stack 8.4.4 Hashtable 8.4.5 再论枚举器 8.5 排序 8.6 通用集合库 8.7 新集合 8.7.1 使用Collections 8.7.2 使用Lists 8.7.3 使用Sets 8.7.4 使用Maps 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 8.9 练习 第9章 违例差错控制 9.1 基本违例 9.1.1 违例自变量 9.2 违例的捕获 9.2.1 try块 9.2.2 违例控制器 9.2.3 违例规范 9.2.4 捕获所有违例 9.2.5 重新“掷”出违例 9.3 标准Java违例 9.3.1 RuntimeException的特殊情况 9.4 创建自己的违例 9.5 违例的限制 9.6 用finally清除 9.6.1 用finally做什么 9.6.2 缺点:丢失的违例 9.7 构建器 9.8 违例匹配 9.8.1 违例准则 9.9 总结 9.10 练习 第10章 Java IO系统 10.1 输入和输出 10.1.1 InputStream的类型 10.1.2 OutputStream的类型 10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream写入数据 10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建目录 10.5 IO流的典型应用 10.5.1 输入流 10.5.2 输出流 10.5.3 快捷文件处理 10.5.4 从标准输入读取数据 10.5.5 管道数据流 10.6 StreamTokenizer 10.6.1 StringTokenizer 10.7 Java 1.1的IO流 10.7.1 数据的发起与接收 10.7.2 修改数据流的行为 10.7.3 未改变的类 10.7.4 一个例子 10.7.5 重定向标准IO 10.8 压缩 10.8.1 用GZIP进行简单压缩 10.8.2 用Zip进行文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11 练习 第11章 运行期类型鉴定 11.1 对RTTI的需要 11.1.1 Class对象 11.1.2 造型前的检查 11.2 RTTI语法 11.3 反射:运行期类信息 11.3.1 一个类方法提取器 11.4 总结 11.5 练习 第12章 传递和返回对象 12.1 传递句柄 12.1.1 别名问题 12.2 制作本地副本 12.2.1 按值传递 12.2.2 克隆对象 12.2.3 使类具有克隆能力 12.2.4 成功的克隆 12.2.5 Object.clone()的效果 12.2.6 克隆合成对象 12.2.7 用Vector进行深层复制 12.2.8 通过序列化进行深层复制 12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4.5 字串的特殊性 12.5 总结 12.6 练习 第13章 创建窗口和程序片 13.1 为何要用AWT? 13.2 基本程序片 13.2.1 程序片的测试 13.2.2 一个更图形化的例子 13.2.3 框架方法的演示 13.3 制作按钮 13.4 捕获事件 13.5 文本字段 13.6 文本区域 13.7 标签 13.8 复选框 13.9 单选钮 13.10 下拉列表 13.11 列表框 13.11.1 handleEvent() 13.12 布局的控制 13.12.1 FlowLayout 13.12.2 BorderLayout 13.12.3 GridLayout 13.12.4 CardLayout 13.12.5 GridBagLayout 13.13 action的替用品 13.14 程序片的局限 13.14.1 程序片的优点 13.15 视窗化应用 13.15.1 菜单 13.15.2 对话框 13.16 新型AWT 13.16.1 新的事件模型 13.16.2 事件和接收者类型 13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 13.17.2 打印 13.17.3 剪贴板 13.18 可视编程和Beans 13.18.1 什么是Bean 13.18.2 用Introspector提取BeanInfo 13.18.3 一个更复杂的Bean 13.18.4 Bean的封装 13.18.5 更复杂的Bean支持 13.18.6 Bean更多的知识 13.19 Swing入门 13.19.1 Swing有哪些优点 13.19.2 方便的转换 13.19.3 显示框架 13.19.4 工具提示 13.19.5 边框 13.19.6 按钮 13.19.7 按钮组 13.19.8 图标 13.19.9 菜单 13.19.10 弹出式菜单 13.19.11 列表框和组合框 13.19.12 滑杆和进度指示条 13.19.13 树 13.19.14 表格 13.19.15 卡片式对话框 13.19.16 Swing消息框 13.19.17 Swing更多的知识 13.20 总结 13.21 练习 第14章 多线程 14.1 反应灵敏的用户界面 14.1.1 从线程继承 14.1.2 针对用户界面的多线程 14.1.3 用主类合并线程 14.1.4 制作多个线程 14.1.5 Daemon线程 14.2 共享有限的资源 14.2.1 资源访问的错误方法 14.2.2 Java如何共享资源 14.2.3 回顾Java Beans 14.3 堵塞 14.3.1 为何会堵塞 14.3.2 死锁 14.4 优先级 14.4.1 线程组 14.5 回顾runnable 14.5.1 过多的线程 14.6 总结 14.7 练习 第15章 网络编程 15.1 机器的标识 15.1.1 服务器和客户机 15.1.2 端口:机器内独一无二的场所 15.2 套接字 15.2.1 一个简单的服务器和客户机程序 15.3 服务多个客户 15.4 数据报 15.5 一个Web应用 15.5.1 服务器应用 15.5.2 NameSender程序片 15.5.3 15.5.3 要注意的问题 15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2 程序片 15.6.3 用C++写的CGI程序 15.6.4 POST的概念 15.7 用JDBC连接数据库 15.7.1 获得学习示例 15.7.2 查找程序的GUI版本 15.7.3 JDBC API为何如何复杂 15.8 远程方法 15.8.1 远程接口概念 15.8.2 远程接口的实施 15.8.3 创建根与干 15.8.4 使用远程对象 15.8.5 RMI的替选方案 15.9 总结 15.10 练习 第16章 设计范式 16.1 范式的概念 16.1.1 单子 16.1.2 范式分类 16.2 观察器范式 16.3 模拟垃圾回收站 16.4 改进设计 16.4.1 “制作更多的对象” 16.4.2 用于原型创建的一个范式 16.5 抽象的应用 16.6 多重派遣 16.6.1 实现双重派遣 16.7 访问器范式 16.8 RTTI有害吗 16.9 总结 16.10 练习 第17章 项目 17.1 文字处理 17.1.1 提取代码列表 17.1.2 检查大小写样式 17.2 方法查找工具 17.3 复杂性理论 17.4 总结 17.5 练习 附录A 使用Java代码 A.1 Java固有接口 A.1.1 调用固有方法 A.1.2 访问JNI函数:JNIEnv自变量 A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans集成 A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测[2] D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖语言的方法 D.3.3 特殊情况 D.4 参考资源 D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍 附录E 关于垃圾收集的一些话 附录F 推荐读物 英文版主页 | 文版主页 | 详细目录 | 关于译者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_45442261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值