- 博客(275)
- 收藏
- 关注
翻译 [疯狂Java]基础类库:Runtime(运行时信息)
1. Runtime类简介: 1) 代表Java程序的运行时环境,是和Java程序相关联的,每一个运行起来的Java程序都具有一个自己Runtime对象; 2) 和System一样,Java程序的Runtime对象也是由JVM创建的,用户无法自己创建Runtime对象; 3) Runtime主要用来查看当前Java程序所在的JVM的信息(如JVM可使用的处理器数量、内
2016-05-18 20:52:53 993
翻译 [疯狂Java]基础类库:命令行参数、Scanner
1. Java命令行参数: 1) 即main方法的参数String[] args; 2) 这里就只声明三点: 1) 命令行参数是从程序名称之后开始算的:java JavaApplication arg1 arg2 arg3 ... 2) args[0]是第一个参数arg1,而并非程序名JavaApplication;
2016-05-18 14:55:23 911
翻译 [疯狂Java]数组:Arrays(数组工具类)
1. Arrays工具类简介: 1) 是Java提供的专门用来操作数组的工具类,里面有一大堆静态方法(算法)来操作数组,低位就相当于C++ STL的库,只不过Arrays里面全部都是操作数组的算法,于此类似的是Collections工具类,里面全部都是操作集合的算法; 2) 里面大致分为两类方法,一类是单线方法(用于单线程处理数组),另一类是多线算法(大多以parallel作为
2016-05-17 16:55:56 5004
翻译 [疯狂Java]数组:模型、初始化、使用、多维数组
1. Java数组的定义: 1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了); 2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的; 3) 定义数组:支持两种格式 i. Java格式:type[] ar
2016-05-17 10:49:11 2685
翻译 [疯狂Java]NIO多路复用网络通信:Selector、SelectionKey、SelectableChannel(SocketChannel、ServerSocketChannel)
1.
2016-05-17 09:05:10 926
翻译 [疯狂Java]NIO.2:文件属性
1. NIO.2对文件属性访问的全面升级: 1) 旧版本中File类只提供了一些非常简单的文件属性访问功能,基本上只是可以获取文件属性值,但通常不能修改; 2) NIO.2专门在java.nio.file包下增加了一个attribute包(即java.nio.file.attribute),里面提供了大量的文件属性访问及修改API,基本上可以全面使用OS的文件系统功能;
2016-05-16 21:34:16 2566 1
翻译 [疯狂Java]NIO.2:WatchService、WatchKey(监控文件变化)
1. 旧版本监控文件变化的弊端: 1) 非常繁琐,必须自己手动开启一个后台线程每隔一段时间遍历一次目标节点并记录当前状态,然后和上一次遍历的状态对比,如果不相同就表示发生了变化,再采取相应的操作,这个过程非常长,都需要用户自己手动实现; 2) 效率低:效率都消耗在了遍历、保存状态、对比状态上了!这是因为旧版本的Java无法很好的利用OS文件系统的功能,因此只能这样笨拙地监控文件
2016-05-16 16:19:42 16655 4
翻译 [疯狂Java]NIO.2:walkFileTree、FileVisitor(遍历文件/目录)
1. 遍历文件和目录——FileVisitor: 1) 在旧版本中遍历文件系统只能通过递归的方法来实现,但是这种方法不仅消耗资源大而且效率低; 2) NIO.2的Files工具类提供了一个静态工具方法walkFileTree来高效并优雅地遍历文件系统; 3) walkFileTree: i. 原型:static Path Files.walkFil
2016-05-16 14:10:48 19127 2
翻译 [疯狂Java]NIO.2:平台无关的文件系统访问支持(Path、Paths、Files)
1. NIO.2简介: 1) 是Java7新增的功能,是NIO的扩展,主要比原来的NIO多了一些内容,主要有java.nio.file(提供了对文件系统访问的全面支持,并且是平台无关的哟!),还有就是java.nio.channels包下又多了几个Asynchronous开头的Channel接口和类(提供异步非阻塞式Channel,以支持高性能多线程IO); 2) 小结:NIO
2016-05-15 13:47:39 2088
翻译 [疯狂Java]NIO:Channel的map映射
1. 通道映射技术: 1) 其实就是一种快速读写技术,它将通道所连接的数据节点中的全部或部分数据直接映射到内存的一个Buffer中,而这个内存Buffer块就是节点数据的映像,你直接对这个Buffer进行修改会直接影响到节点数据,而这个Buffer也不是普通的Buffer,叫做MappedBuffer,即镜像Buffer,对该Buffer进行修改会直接影响到实际的节点(更新到节点);
2016-05-13 17:10:02 7547
翻译 [疯狂Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer
1. Channel简介: 1) 回顾Channel的特性: i. NIO使用Channel(通道)来传送数据,即I/O流的角色; ii. 但是Channel只能和Buffer直接交互,即输入输出的数据都必须要先经过Buffer才行,程序不能直接访问Channel中的数据; iii. 输入的时候Channel相当于把物理节点中的
2016-05-09 16:45:06 3089
翻译 [疯狂Java]I/O:NIO简介、Buffer
1. 新IO: 1) 从JDK1.4开始Java提供了一系列改进的I/O新功能,称为New IO,这些API放在java.nio包下,而旧的标准IO的API放在原有的java.io包下; 2) NIO主要是针对旧IO的如下缺点进行改造的:以下是旧IO的缺点 i. 底层的流字节指针只能一次处理一个字节(元操作只能处理一个字节,虽然有很多批量操作(一次读写一条字
2016-05-05 15:27:47 668
翻译 [疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)
1. 一种不是很好的排除序列化——transient关键字: 1) 如果你不想让对象中的某个成员被序列化可以在定义它的时候加上transient关键字进行修饰,例如:class A implements Serializable { private int a; private transient int b; ...!!这样,在A的对象被序列化时其成员b就不
2016-05-03 14:24:56 6400 8
翻译 [疯狂Java]I/O:I/O流的最高境界——对象流(序列化:手动序列化、自动序列化、引用序列化、版本)
1. 什么是对象流:序列化/反序列化的概念 1) 对象流是和字节流/字符流同处于一个概念体系的: a. 这么说字节流是流动的字节序列,字符流是流动的字符序列,那么对象流就是流动的对象序列咯? b. 概念上确实可以这样理解,对象流就是专门用来传输Java对象的; c. 但是字节和字符都是非常直观的二进制码(字节本身就是,而字符是一种二进
2016-04-28 13:41:23 3920
翻译 [疯狂Java]I/O:文件随机读写专用类——RandomAccessFile
1. 随机读写文件类RandomAccessFile简介: 1) Java提供了一种功能特别强大的文件读写类:RandomAccessFile 2) 我们都知道File只能对文件进行创建、删除、改名等操作,但要读写文件的内容必须要经过流的包装; 3) 而RandomAccessFile虽然名字是以File作为结尾,但其并不和File是一个系列的,RandomAcces
2016-04-24 16:29:06 4823
翻译 [疯狂Java]I/O:标准流重定向、JVM读写其它进程数据
1. 标准输入输出流: 1) 标准I/O流就是指System.in、System.out、System.err这三个,分表表示标准输入流、标准输出来、标准错误流; 2) 三者默认的流节点分别是键盘、屏幕、屏幕,这也是我们频繁使用的三个I/O流;2. 标准流重定向: 1) 即人为改变三个标准流的流节点,比如吧System.out的流节点人为改成某个文件,那么
2016-04-24 14:24:32 2381
翻译 [疯狂Java]I/O:转换流、BufferedReader简介、回推输入流
1. 将字节流转换成字符流: 1) Java只提供了将字节流转换成字符流的方法,但是并没有提供字符流转换成字节流的方法。这是因为字符流要比字节流操作更加方便、直观,毕竟字符是人直接能看得懂的;!!因此,如果一个流已经是字符流了,那就没有必要再转换成字节流了,毕竟字符流操作比字节流方便啊!而将字节流转换成字符流的目的就是为了操作更方便,所以Java不提供字符流到字节流的转换;
2016-04-22 15:20:31 3249
翻译 [疯狂Java]I/O:处理流、PrintStream简介、I/O体系、字符串作为流节点
1. 处理流PrintStream的简单使用: 1) 处理流最大的特点就是对节点流的包装,因此只要构造器的参数是节点流的一定就是处理流(PrintStream、BufferedStream等),而构造器参数是节点本身的就是节点流(FileInputStream等); 2) 处理流的两大好处:操作简单(对象方法使用很简单,基本源自各编程语言的模型,通用性强)、执行效率更高;
2016-04-22 11:20:15 1381
翻译 [疯狂Java]I/O:字节流、字符流
!!Java的字节流和字符流的操作方式非常相似,方法和参数的共同点非常多,因此就按照输入流和输出流来讲,在输入流和输出流中再细分出字节流和字符流;1. 输入流中的字节流和字符流: 1) InputStream和Reader分别代表输入流的字节流和字符流; 2) 这两个类是所有输入流的抽象基类,其本身并不能作为实例对象来进行操作,但是它们是所有输入流的模板,所有输入流
2016-04-21 22:32:31 749
翻译 [疯狂Java]I/O:流模型(I/O流、字节/字符流、节点/处理流)
1. 流的概念: 1) Java把所有设备中的有序数据抽象成流,而流(stream)就是指从源节点到目的节点的有序数据,而这里的节点就是存储节点; 2) 而上述只是一种对Java的流的一种描述性概括,这里给出Java中流的严格定义: i. 流是存储节点上的有序数据; ii. 流必然要从某个源节点流向某个目的节点,即流具有动态的特性(流动性
2016-04-21 13:27:27 1121
翻译 [疯狂Java]JDBC:用blob处理多媒体类型数据
1. JDBC导入Blob类型数据: 1) Blob即Binary Long Object的缩写,即二进制长对象,常用于存储大型文件,比如图片、音视频等; 2) 由于在SQL中无法表示blob常量,因此就不能用Statement导入到数据库,但幸好可以用PreparedStatement导入数据库: i. PreparedStatement可以用通配符?来表
2016-04-20 21:32:19 979
翻译 [疯狂Java]JDBC:连接池
1. 连接池的概念: 1) 普通的DriverManager获取连接的弊端: i. 一个数据库连接对象就对应一个物理连接,每次打开一个连接后必须立即使用,用完后必须立即关闭; ii. 而且这种资源的建立和关闭相当耗费系统资源; iii. 因此这在多层结构的应用环境中对系统运行效率的影响尤为明显; 2) 连接池的解决方案
2016-04-20 16:06:36 678
翻译 [疯狂Java]JDBC:数据库元数据分析
1. 数据库元数据——有时候并不仅仅需要分析和业务逻辑相关的表,也需要分析当前数据库的有关信息: 1) 比如分析当前数据库中有多少张表、当前共创建了多少外键、多少索引、某个表的结果如何等等; 2) 这些都属于描述数据库中数据的数据,称为元数据; 3) JDBC提供了对数据库元数据分析的API——DatabaseMetaData类对象(通过Connection获得,对象
2016-04-18 17:32:24 1904
翻译 [疯狂Java]JDBC:事务管理、中间点、批量更新
1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性; 2) 设想一个银行转账的过程,如果分两步,第一步是A的账户-1000,第二步是B的账户+1000,这两个动作必须是连贯的,如果中间断开(出现故障等)比如第一步执行完之后发生异常而终止了操作,那么A就白扣了1000,而B的账户也没有钱增加,这就发生了非常严重的错误;!!以上这个案例可以看出:
2016-04-17 15:44:53 2653
翻译 [疯狂Java]JDBC:ResultSet的升级RowSet、离线的CachedRowSet、离线分页查询
1. RowSet系列、创建RowSet实例: 1) RowSet的出现最初是为了解决离线缓存的问题,因为在使用ResultSet的时候必须保证在线(即保持与数据库的连接),连接后必须立即处理,否则连接断开则ResultSet也将关闭,这就非常麻烦,再有些设计模式中,要求逻辑和视图分开,因此就必须自己先开一段内存暂存ResultSet中的内容(这样ResultSet关闭了里面的数据已经拿
2016-04-15 15:43:39 5083
翻译 [疯狂Java]JDBC:可滚动/可更新的ResultSet
1. 之前还有一个大问题没有解决:为什么ResultSet时刻都保持着跟Connection的绑定(Connection关闭ResultSet也被关闭) 1) 其实你可能猜到了,ResultSet还有我们之前没有用到的功能,ResultSet肯定是时刻(实时)跟Connection保持着连接的,也许数据库相应数据的改变也能及时地更新ResultSet中相应的内容; 2) 答案是
2016-04-14 15:48:33 1757
翻译 [疯狂Java]JDBC:CallableStatement执行存储过程
1. 简单的存储过程的创建: 1) 一个MySQL中典型的存储过程的创建:delimitercreate procedure add(a int, b int, out sum int)begin set sum = a + b;end;!!存储过程类似于C/Java中的函数和方法,具有参数传入,但是没有返回值;!!返回值是通过输出参数来获取的,输出参数之前要用out关键
2016-04-14 14:59:31 4066 2
翻译 [疯狂Java]JDBC:PreparedStatement预编译执行SQL语句
1. SQL语句的执行过程——Statement直接执行的弊病: 1) SQL语句和编程语言一样,仅仅就会普通的文本字符串,首先数据库引擎无法识别这种文本字符串,而底层的CPU更不理解这些文本字符串(只懂二进制机器指令),因此SQL语句在执行之前肯定需要编译的; 2) SQL语句的执行过程:提交SQL语句 -> 数据库引擎对SQL语句进行编译得到数据库可执行的代码 -> 执行S
2016-04-14 09:53:52 10887 4
翻译 [疯狂Java]JDBC:Statement、ResultSet、连接资源自动关闭、Properties配置文件
1. 建立连接得到Connection对象后如何继续操作数据库? 1) 查询数据库就必须要执行SQL语句,可以通过Connection对象conn获取一个代表要提交给数据库的SQL语句的句柄,即Statement对象; 2) 使用Connection的createStatement方法得到SQL语句句柄:Statement Connection.createStatement(
2016-04-12 11:23:13 5150
翻译 [疯狂Java]JDBC:加载数据库驱动、连接数据库
1. 加载数据库驱动: 1) 由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构; 2) JDBC将整个数据库驱动器在底层抽象成一个对象(即驱动器对象),所有对数据库的操作都可以通过该对象进行; 3) 只不过数据库驱动对象和普通的Java对象有所不同: i. 首先大多
2016-04-11 16:05:33 7344
翻译 [疯狂Java]SQL:对查询结果进行集合运算
1. 集合运算: 1) 由于select查询结果是记录的集合,因此理所应当可以计算集合的交并补等; 2) 对两个查询结果进行集合运算时两边的select查询都不需要加括号,因为这并不是子查询,这两个是平行的(地位相同的)查询; 3) 集合运算的语法格式:select查询1 op select查询2; 4) 因为实际问题并非数学问题那么抽象,因此查询结果的集合
2016-04-11 09:44:17 2292
翻译 [疯狂Java]SQL:子查询
1. SQL标准对子查询的定义: 1) 简单的讲就是嵌套select查询,SQL都支持多层嵌套查询; 2) 要求内存的查询必须用括号()包起来; 3) 子查询可以出现的位置: i. from之后:查询的实质就是一个临时的视图,因此可以将一个子查询的结果当做一个表进行另外一个查询;!!既然是当成临时视图使用,最好是给该子查询起一个别名,这样方便在
2016-04-10 17:35:40 1958
翻译 [疯狂Java]SQL-连接查询:SQL92、SQL99
1. 连接查询: 1) 即查询的时候同时需要多张表(特别是存在外键关系的),此时需要多张表之间的值进行连接; 2) 目前SQL标准提出过两种连接查询,第一种是较早的SQL92标准,第二种是目前使用广泛的较新的SQL99标准; 3) 92形式简单,但编写较为冗长,99不仅在底层得到优化,而且形式看上去更加一目了然,逻辑性更强,一般建议使用99标准;2. SQ
2016-04-10 11:22:48 7681
翻译 [疯狂Java]SQL库函数:行函数、组函数、select分组、筛选组
1. SQL库函数: 1) 就跟C语言标准库函数一样,SQL将一些经常使用的到的功能封装成标准库函数供用户使用,这些库函数底层的实现效率非常高,比用户自行编写同样的函数效率会高很多,因此遇到这些常用功能就尽量使用库函数; 2) SQL并不是编程语言,更没有面向对象这一说法,因此SQL的函数跟C语言一样,是一种独立的执行单元,不需要任何类、对象来调用,而是最高级执行体单独执行;
2016-04-09 13:58:10 1775
翻译 [疯狂Java]SQL-select:查询列改名、查询常量、去重、升/降序排列
1. 选出列的命名问题: 1) 选出列也称为查询列,比如select name, id from table1;里name和id就是选出列,也成为查询列,即查询得到的列; 2) 关于选出列的要素: i. 选出列一定是目标表中的列,即上面的name和id必定是table1中的列; ii. 得到的查询结果中显示的列名就是查询列的列名(name,
2016-04-08 13:17:00 5266
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人