10 2016 档案

摘要:回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象; 写sql 5:执行sql a) 更新 delete/insert/update !:executeUpdate(); b) 查询 阅读全文
posted @ 2016-10-31 21:12 卡拉瓦 阅读(3241) 评论(0) 推荐(1)
摘要:我们创建一个sql表,里面的数据往往都会有自增长值。 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值。 代码: 阅读全文
posted @ 2016-10-30 20:55 卡拉瓦 阅读(2091) 评论(0) 推荐(0)
摘要:之前的代码中,以下代码很多时候并不是固定的: 这时候,我们可以在该类的包的src目录下创建一个bd.properties文件,用来存储这些信息: 如果是java项目读取该文件的这些信息的话,可以这样读取: 但是在Web项目中不能这样读取,因为: . 代表java命令运行的目录 * 在java项目下, 阅读全文
posted @ 2016-10-30 20:01 卡拉瓦 阅读(7903) 评论(0) 推荐(0)
摘要:CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: 那么,这条语句的存储过程代码就是 使用CallableStatement来执行: 在sql中执行带有输入参数和输出参数的代码: 这段代码的存储过程代码是: 使用CallableStateme 阅读全文
posted @ 2016-10-30 17:20 卡拉瓦 阅读(933) 评论(0) 推荐(0)
摘要:存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if while) 1.2 存储过程特点 1)执行效率非常快!存储过程是在数据库的服务器端执行的!!! 2)移植性很差!不同数据库的存储过程是不能移植。 1.3 存储过程语 阅读全文
posted @ 2016-10-30 16:19 卡拉瓦 阅读(2697) 评论(0) 推荐(0)
摘要:Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效率更高 3)由于PreparedStatement有缓存区,所以更安全,防止了注入(1=1) Pre 阅读全文
posted @ 2016-10-30 13:34 卡拉瓦 阅读(609) 评论(0) 推荐(0)
摘要:jdbc执行Statement接口的步骤如下: 1)驱动注册程序: 2)获取连接对象: 3)创建Statement对象: 4)准备sql语句:(静态的sql语句) 5)执行sql语句: 6)输出: 7)关闭连接: 阅读全文
posted @ 2016-10-30 11:27 卡拉瓦 阅读(387) 评论(0) 推荐(0)
摘要:上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象、获取连接的数据库对象、创建Statement对象 2)所有操作执行完后,关闭连接(后来的先关) 所以,我们可以把这三大部分凑起来,建立一个jdbc的工具类: jdbcutil 工具类再重 阅读全文
posted @ 2016-10-30 11:16 卡拉瓦 阅读(6259) 评论(0) 推荐(0)
摘要:|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL) |-Prep 阅读全文
posted @ 2016-10-29 22:56 卡拉瓦 阅读(2723) 评论(0) 推荐(0)
摘要:JDBC接口核心的API java.sql.* 和 javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。 |- connect(url, properties): 连接数据库的方法。 url: 连接数据库的 阅读全文
posted @ 2016-10-29 22:51 卡拉瓦 阅读(816) 评论(0) 推荐(0)
摘要:之前操作数据 1)通过mysql的客户端工具,登录数据库服务器 (mysql -u root -p 密码) 2)编写sql语句 3)发送sql语句到数据库服务器执行 什么是jdbc? 使用java代码(程序)发送sql语句的技术,就是jdbc技术!!!! 使用jdbc发送sql前提 代码: 阅读全文
posted @ 2016-10-29 22:43 卡拉瓦 阅读(297) 评论(0) 推荐(0)
摘要:5 -- *************一、数据约束********************---- 6 -- 1.1 默认值 7 CREATE TABLE student( 8 id INT, 9 NAME VARCHAR(20), 10 address VARCHAR(20) DEFAULT '广州天河' -- 默认值 11 ) 12 1... 阅读全文
posted @ 2016-10-28 09:06 卡拉瓦 阅读(349) 评论(0) 推荐(0)
摘要:1 CREATE TABLE student 2 ( 3 id INT, 4 NAME VARCHAR (10), 5 Chinese FLOAT, 6 English FLOAT, 7 Math FLOAT 8 ); 9 10 INSERT INTO student VALUES (1,'张三',80,70... 阅读全文
posted @ 2016-10-27 09:53 卡拉瓦 阅读(865) 评论(0) 推荐(0)
摘要:1 -- *** ①、对数据库的操作 *** -- 2 3 4 -- 查看所有的数据库 5 SHOW DATABASES; 6 7 -- 创建数据库 8 CREATE DATABASE day1026 9 DEFAULT CHARACTER SET utf8; 10 11 -- 查看该数据库的所有表 12 SHOW TABLES; 13 ... 阅读全文
posted @ 2016-10-26 22:00 卡拉瓦 阅读(983) 评论(0) 推荐(0)
摘要:3 MySQL数据库 3.1 mysql数据存储结构 先数据库,再表,再有数据 4 数据库管理 4.1 查询所有数据库 mysql> show databases; + + | Database | + + | information_schema | -- mysql元数据,基础数据 | mysq 阅读全文
posted @ 2016-10-26 19:41 卡拉瓦 阅读(449) 评论(3) 推荐(0)
摘要:看书复习几天以及这几天满课。。从早到晚都上课 阅读全文
posted @ 2016-10-20 22:36 卡拉瓦 阅读(190) 评论(0) 推荐(0)
摘要:转有关的文章链接: Java 高并发一:前言: http://www.jb51.net/article/92358.htm Java 高并发二:多线程基础详细介绍 http://www.jb51.net/article/92360.htm Java 高并发三:Java内存模型和线程安全详解 http 阅读全文
posted @ 2016-10-18 22:59 卡拉瓦 阅读(1028) 评论(0) 推荐(0)
摘要:JDK8的新特性: http://bbs.itcast.cn/thread-24398-1-1.html 其中之一:接口可以使用方法 阅读全文
posted @ 2016-10-17 20:24 卡拉瓦 阅读(279) 评论(0) 推荐(0)
摘要:JDK7的新特性: 二进制字面量 JDK7开始,终于可以用二进制来表示整数(byte,short,int和long)。 使用二进制字面量的好处是,可以使代码更容易被理解。语法非常简单,只要在二进制数值前面加 0b或者0B 举例: int x = ob110110 数字字面量可以出现下划线 为了增强对 阅读全文
posted @ 2016-10-17 20:17 卡拉瓦 阅读(274) 评论(0) 推荐(0)
摘要:上一章,自定义了枚举类,超级麻烦。。 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是Enum的子类 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省 阅读全文
posted @ 2016-10-17 18:54 卡拉瓦 阅读(502) 评论(0) 推荐(0)
摘要:枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。 自定义枚举类。 第一版:无参构造 第二版: 阅读全文
posted @ 2016-10-17 18:10 卡拉瓦 阅读(267) 评论(0) 推荐(0)
摘要:装饰设计模式 装饰设计模式概述 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案 优点 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能 缺点 正因为可以随意组合,所以就可能出现一些不合理的逻辑 阅读全文
posted @ 2016-10-17 17:39 卡拉瓦 阅读(181) 评论(0) 推荐(0)
摘要:模版设计模式 模版设计模式概述 模版方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现 优点 使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求 缺点 如果算法骨架有修改的话,则需要修改抽象类 例子: 如果我想知道一个程序运行所花费的时间,那么为 阅读全文
posted @ 2016-10-17 16:25 卡拉瓦 阅读(172) 评论(0) 推荐(0)
摘要:在之前的java 23 中,了解过设计模式的单例模式和工厂模式。在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 其实就是开发人员经常说的”高内聚,低耦合” 也就是说,每个类应该只有一个职责, 阅读全文
posted @ 2016-10-17 15:57 卡拉瓦 阅读(261) 评论(0) 推荐(0)
摘要:为什么要写动态代理类? 例子: 如果现在想做个登陆注册的功能。用户可以执行登陆、注册、添加、删除这些功能。 但是,有些功能是要有一定权限才可以执行的。 而现在已经有了个用户类的接口和该类的实现类了,但里面没有添加 “权限查询”和“日志记录”这两个功能。 这个时候我不可能去改动这两个类,而且,我以后遇 阅读全文
posted @ 2016-10-16 20:11 卡拉瓦 阅读(318) 评论(0) 推荐(0)
摘要:代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。 举例:春季回家买票让人代买 动态代理: 在程序运行过程中产生的这个对象 而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理其实就是通过反射来生成一个代理 在Java中java.lang.reflect包下提供了一 阅读全文
posted @ 2016-10-16 18:11 卡拉瓦 阅读(335) 评论(0) 推荐(0)
摘要:标题的意思是: 通过反射写一个类,类中有个方法。该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值 代码: 测试类: 阅读全文
posted @ 2016-10-16 17:41 卡拉瓦 阅读(11616) 评论(0) 推荐(1)
摘要:之前学过的集合里面都有泛型,规定了泛型的类型以后,就不能往这个集合添加除了这个类型之外的类型数据了。 那么,有什么方法可以越过这个泛型,添加特定类型以外的类型数据么? 例子: 往ArrayList<Integer>集合中添加一个字符串String类型的数据 分析: 通过查看ArrayList的add 阅读全文
posted @ 2016-10-16 17:08 卡拉瓦 阅读(474) 评论(0) 推荐(0)
摘要:在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: 在之前,如果想要调用类里面的方法,只能这样: 这样做,有个缺点,如果类多了,方法多了,以后的更改很麻烦。 那么,为了以后的更改的方便。 创建个对应的配置文件,运用反射来访问这些方法 阅读全文
posted @ 2016-10-16 17:04 卡拉瓦 阅读(699) 评论(0) 推荐(0)
摘要:类Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。 A:获取所有方法 数组 1、getMethods 获取该类包括其父类的公共成员方法 2、getDeclaredMethods 获取该类的所有的成员方法 B:获取单个方法 1、getMethod 获取该类所有的公共类单个成员 阅读全文
posted @ 2016-10-16 12:51 卡拉瓦 阅读(3666) 评论(0) 推荐(0)
摘要:类Field: 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。 A:获得类的成员变量 数组: 1、getFields(公共类的) 2、getDeclaredFields(所有类型的) B:获得类的单个成员变量: 1、getField (公共类的) 2、getDeclaredField ( 阅读全文
posted @ 2016-10-16 11:25 卡拉瓦 阅读(14312) 评论(0) 推荐(0)
摘要:类 Constructor<T>:提供关于类的单个构造方法的信息以及对它的访问权限。 通过反射的方法获取构造方法并使用 ps:先忽略泛型 A.1:获取构造方法的数组: public Constructor<?>[] getConstructors():获得所有公共构造方法 public Constr 阅读全文
posted @ 2016-10-16 09:53 卡拉瓦 阅读(12957) 评论(0) 推荐(0)
摘要:反射: JAVA语言的反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 如何解剖一个类: 要想解剖一个类,必须先要获取到该类 阅读全文
posted @ 2016-10-16 09:02 卡拉瓦 阅读(1067) 评论(0) 推荐(0)
摘要:说到反射,首先说类的加载器。 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载: 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。 连接: 验证 是否有正确的 阅读全文
posted @ 2016-10-16 08:40 卡拉瓦 阅读(279) 评论(0) 推荐(0)
摘要:TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现。 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权; 首先,创建个线程类:(这个线程类执行的是服务器的功能) 线程类代码: 服务器的代码: 客户端的代码:(只改动名字那里,目前只 阅读全文
posted @ 2016-10-15 22:01 卡拉瓦 阅读(668) 评论(0) 推荐(0)
摘要:上次的是上传TXT文件,这次上传的是图片。同样,上传成功需要反馈给客户端。 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了。 而图片用记事本打开,我们看不懂,所以就用缓冲字节流,只需要把通道内的字节流转换成高效字节流就可以了。 客户端: 服务器: 阅读全文
posted @ 2016-10-15 21:22 卡拉瓦 阅读(1303) 评论(0) 推荐(0)
摘要:TCP练习: 1、客户端键盘录入,服务器输出文本文件 客户端代码: 服务器代码: 2、客户端文本文件,服务器输出到控制台 客户端代码: 服务器代码: 3、客户端读取文本文件,服务器输出文本文件 (可用来上传文件) 若是上传文件,那么我上传文件完毕后,客户端就要获得一个反馈。 但是,只单单给服务器添加 阅读全文
posted @ 2016-10-15 18:36 卡拉瓦 阅读(249) 评论(0) 推荐(0)
摘要:上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流。 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流。 B:这次,传输的数据是通过键盘录入的数据。 服务器端代码: 客户端: 阅读全文
posted @ 2016-10-15 17:17 卡拉瓦 阅读(298) 评论(0) 推荐(0)
摘要:TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送和接收数据的思路图解: TCP传输-客户端思路 1:建立客户端的Socket服务,并明确要连接的服务 阅读全文
posted @ 2016-10-15 16:35 卡拉瓦 阅读(431) 评论(0) 推荐(0)
摘要:平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现。 建立一个类: 把聊天的发送端和接收端放在同一个类,启动一个窗口 再建立发送类: 接收端:(要一直启动,所以无需释放资源) 根据这些,建立GUI,再加优化,就可以做一个聊天室 阅读全文
posted @ 2016-10-15 14:38 卡拉瓦 阅读(524) 评论(0) 推荐(0)
摘要:UDP协议的输出端: 接收端: 阅读全文
posted @ 2016-10-14 21:26 卡拉瓦 阅读(435) 评论(0) 推荐(0)
摘要:UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端。 B:建立数据包。 C:调用Socket的发送接收方法。 D:关闭Socket。 E:发送端与接收端是两个独立的运行程序。 UDP传输-发送端思路 UDP发送数据: A:创建Soc 阅读全文
posted @ 2016-10-14 20:00 卡拉瓦 阅读(304) 评论(0) 推荐(0)
摘要:Socket Socket套接字: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 Socket原理机制: 通信的两端都有Socket。 网络通信其实就是Socket间的通信。 数据在两个Socket间通过IO传输。 Socket套接字图解: 阅读全文
posted @ 2016-10-14 19:53 卡拉瓦 阅读(203) 评论(0) 推荐(0)
摘要:网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通讯的规则 常见协议:TCP,UDP 例子: 平时我们要进行通讯,需要哪些要素呢? 比如说:我要跟你说 阅读全文
posted @ 2016-10-14 17:47 卡拉瓦 阅读(1207) 评论(0) 推荐(0)
摘要:网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 网络模型 网络模型 计 阅读全文
posted @ 2016-10-14 17:28 卡拉瓦 阅读(224) 评论(0) 推荐(0)
摘要:简单说说,懒得发了。。。 步骤: A:首先写出登陆注册需要用到类以及代码(IO流) B:然后创建登陆窗口和注册窗口 C:各个监听事件: a:登录窗口 1、重置:把2个文本框的内容全部清空 2、注册:关闭登陆界面、跳转到注册界面(所以得把注册界面的main()方法全部注释掉,改成由这里跳转) 3、登陆 阅读全文
posted @ 2016-10-14 11:53 卡拉瓦 阅读(2277) 评论(0) 推荐(0)
摘要:我想要在校验的过程中,如果输入到操作数中的不是数字,则弹出提醒框: 类 JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框 在设置窗体类添加代码: 阅读全文
posted @ 2016-10-13 22:36 卡拉瓦 阅读(306) 评论(0) 推荐(0)
摘要:A、首先更改窗体左上角的图片 步骤一: 创建3个包,分别建立1个类 第一个是窗体的包,窗体类:设置窗体的主要布置和功能 第二个是资源包,图片:把想要改的图案拉进来 第三个是UI界面包,UI界面设计类:专门对窗体界面进行美化 步骤二: 在UI界面设计类中写代码: 步骤三: 窗体类中写主要代码,上一章的 阅读全文
posted @ 2016-10-13 21:11 卡拉瓦 阅读(4151) 评论(1) 推荐(0)
摘要:这个是用NetBeans软件制作的,因为这个软件制作GUI任务比较方便 通过拖拽控件生成的窗体:(红色的名称是更改后的控件名称) 拉拽好布局后,要进行的步骤: A:更改想要进行操作的控件的名称(右键控件,选择更改变量名称) B:知道要对哪个控件进行监听,然后右键→事件→选择想要的 这里是对计算按钮进 阅读全文
posted @ 2016-10-13 19:42 卡拉瓦 阅读(741) 评论(0) 推荐(0)
摘要:需求: 创建多级菜单 步骤: A:创建窗体对象(并设置属性和布局) B:创建菜单栏 C:创建菜单和子菜单 D:逐步添加菜单(子菜单添加到菜单中,菜单添加到菜单栏中) E:窗体中设置菜单栏(菜单栏并不是添加,而是设置) F:设置各个菜单对应的监听事件 G:设置窗体关闭监听时间 H:设置显示窗口 代码: 阅读全文
posted @ 2016-10-13 17:41 卡拉瓦 阅读(2171) 评论(0) 推荐(0)
摘要:需求: 创建一个含有标签和文本框的窗体,其中文本框只能输入数字 步骤:(大致上) 创建窗体对象 创建标签对象 创建文本框对象 把组件添加到窗体中 设置标签的监听事件,对键盘按下的数据进行监听 设置窗体关闭监听事件 设置显示窗体 代码: 阅读全文
posted @ 2016-10-13 16:28 卡拉瓦 阅读(6153) 评论(3) 推荐(0)
摘要:需求: 创建一个可改变背景颜色的窗口,鼠标移动到按钮上,窗口背景就会改变成特定的颜色 步骤: (大致上) 创建窗口对象 创建按钮对象 添加按钮到窗口中 设置窗口关闭监听事件 设置鼠标进入按钮区域的监听事件 设置鼠标离开按钮区域的监听事件 设置显示窗口 代码: 阅读全文
posted @ 2016-10-13 16:25 卡拉瓦 阅读(1973) 评论(0) 推荐(0)
摘要:需求: 把文本框中的数据,通过点击按钮,转移到文本域中。 同时清空文本框中的数据 代码:(步骤都注释了) 阅读全文
posted @ 2016-10-13 15:13 卡拉瓦 阅读(391) 评论(0) 推荐(0)
摘要:需求:把按钮添加到窗体,并对按钮添加一个点击事件。 A:创建窗体对象 B:创建按钮对象 C:把按钮添加到窗体 D:窗体显示 注意:这里对按钮添加点击事件,同样使用监听器。 但是,这里的按钮是组件,所以不能使用 窗体侦听器WindowListener() 要使用 组件侦听器 ActionListene 阅读全文
posted @ 2016-10-13 14:34 卡拉瓦 阅读(1074) 评论(0) 推荐(0)
摘要:我们创建了窗体后,就要对窗体进行操作,比如关闭窗口。而这时候就要建立监听机制: 事件监听机制: A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做出的处理方案 D:事件监听 就是把事件源和事件关联起来 举例:人受伤事件。 事件源:人(具体的对象) Person 阅读全文
posted @ 2016-10-13 14:11 卡拉瓦 阅读(399) 评论(0) 推荐(0)
摘要:GUI(图形用户界面) GUI和CLI的区别: GUI Graphical User Interface(图形用户接口)。 用图形的方式,来显示计算机操作的界面,这样更方便更直观。 CLI Command line User Interface (命令行用户接口) 就是常见的Dos命令行操作。 需要 阅读全文
posted @ 2016-10-13 10:46 卡拉瓦 阅读(426) 评论(0) 推荐(0)
摘要:Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 其中一个方法: exec(String command) 在单独的进程中执行指定的字符串命令,就是可以直接打开软件,里面填写软件名称 阅读全文
posted @ 2016-10-12 12:21 卡拉瓦 阅读(370) 评论(0) 推荐(0)
摘要:单例模式:保证类在内存中只有一个对象。 如何保证类在内存中只有一个对象呢? A:把构造方法私有 B:在成员位置自己创建一个对象 C:通过一个公共的方法提供访问 单例模式之饿汉式: (一进来就造对象,一回家就吃饭,饿。。) 测试类: 单例模式之懒汉式:(用的时候才创建对象,不饿不吃) 测试类: 单例模 阅读全文
posted @ 2016-10-12 11:44 卡拉瓦 阅读(203) 评论(0) 推荐(0)
摘要:转载: JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式) 阅读全文
posted @ 2016-10-12 11:43 卡拉瓦 阅读(137) 评论(0) 推荐(0)
摘要:定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编写的开源调度框架。 定时器:可以让我们在指定的时间做某件事情,还可以重复的做某件事情。 依赖Time 阅读全文
posted @ 2016-10-12 10:43 卡拉瓦 阅读(412) 评论(0) 推荐(0)
摘要:首先回顾下之前的匿名内部类: 匿名内部类的格式: new 接口或者接口名(){ 重写方法 }; 本质:是该类或者接口的子类对象 匿名内部类方式使用多线程 1、new Thread(){代码…}.start(); 2、new Thread(new Runnable(){代码…}).start(); 例 阅读全文
posted @ 2016-10-11 21:42 卡拉瓦 阅读(1256) 评论(0) 推荐(0)
摘要:JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 A、public static ExecutorService newCachedThreadPool() B、public static ExecutorService newFixedThreadPool(int nThre 阅读全文
posted @ 2016-10-11 21:08 卡拉瓦 阅读(188) 评论(0) 推荐(0)
摘要:程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 在JDK5之前,我们必须手动 阅读全文
posted @ 2016-10-11 21:00 卡拉瓦 阅读(205) 评论(0) 推荐(0)
摘要:在之前,是把生产者录入数据和消费者获取数据的所有代码都分别写在各自的类中。 这样不大好 这次把生产者和消费者部分关键代码都写入资源类中: 然后再改变生产类和消费类的代码: 生产类: 消费类: 测试类不变: 阅读全文
posted @ 2016-10-11 17:46 卡拉瓦 阅读(208) 评论(0) 推荐(0)
摘要:线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起。 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。 首先创建一个Runnable的实现类 先看看默认状态下,线程都会保存在哪个线程组中 由上面可知道,线程默认情况下属于main线程组 我们再让线程添加到自定 阅读全文
posted @ 2016-10-11 17:39 卡拉瓦 阅读(242) 评论(0) 推荐(0)
摘要:先来一张图,看看什么叫做等待唤醒机制 接上一章的例子。 例子:学生信息的录入和获取 * 资源类:Student * 设置学生数据:SetThread(生产者) * 获取学生数据:GetThread(消费者) * 测试类:StudentDemo * 资源类:Student (为了使用等待唤醒机制,添加 阅读全文
posted @ 2016-10-10 22:55 卡拉瓦 阅读(249) 评论(0) 推荐(0)
摘要:生产者和消费者问题的描述图 通过上图,我们可以发现: 生产者和消费者使用的都是同一个资源(肉包子) 所以,当使用线程的时候,这两类的锁也是同一把锁(为了避免出现线程安全问题) 例子:学生信息的录入和获取 * 资源类:Student * 设置学生数据:SetThread(生产者) * 获取学生数据:G 阅读全文
posted @ 2016-10-10 21:46 卡拉瓦 阅读(223) 评论(0) 推荐(0)
摘要:同步的弊端: A:效率低 B:容易产生死锁 死锁: 两个或两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象。 举例: 中国人,美国人一起吃饭。 正常情况: 中国人:筷子两支 美国人:刀和叉 死锁时: 中国人:筷子1支,刀一把 美国人:筷子1支,叉一把 首先创建一个死锁的类 程序执行的理想结 阅读全文
posted @ 2016-10-10 20:19 卡拉瓦 阅读(271) 评论(0) 推荐(0)
摘要:在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 注意:Lock是个接口。 2个常用方法: void lock(): 获取锁。 void 阅读全文
posted @ 2016-10-10 18:32 卡拉瓦 阅读(966) 评论(0) 推荐(0)
摘要:无内容。。等电脑 阅读全文
posted @ 2016-10-10 18:17 卡拉瓦 阅读(143) 评论(0) 推荐(0)
摘要:之前所学习到的线程安全的类: StringBuffer:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。 Vector:Vector 类可以实现可增长的对象数组。 Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值 阅读全文
posted @ 2016-10-07 18:01 卡拉瓦 阅读(1325) 评论(0) 推荐(0)
摘要:上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ; Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 同步方法:(一个方法一进去就看到代码被同步了的情况下考虑使用) 把同步关键字synchronized 阅读全文
posted @ 2016-10-07 17:37 卡拉瓦 阅读(426) 评论(0) 推荐(0)
摘要:从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备,所以肯定出问题。 如何解决问题: 原因A、B肯定不能改变,所以只能改变原因C 解决问题思路: 如果把 阅读全文
posted @ 2016-10-07 17:00 卡拉瓦 阅读(304) 评论(0) 推荐(0)
摘要:使用多线程实现的第二种方式: 首先创建自定义类 创建测试类,售票口设置3个: 当启动程序后,就会发现出现了2个问题: 第一个问题:会出现2个或者3个售票口同时出售同一张票的情况(售票口1、2、3同时出售第90张票) 第二个问题:到最后面,甚至售票口在出售第0张、第-1张票 分析原因: 第一个问题:会 阅读全文
posted @ 2016-10-06 22:59 卡拉瓦 阅读(1127) 评论(0) 推荐(0)
摘要:多线程的代码实现: 方式2:实现Runnable接口 步骤: A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Thread类的对象,并把C步骤的对象作为构造参数传递(2种方法) a:Thread(Runnable tar 阅读全文
posted @ 2016-10-06 09:17 卡拉瓦 阅读(276) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2016-10-06 08:42 卡拉瓦 阅读(238) 评论(0) 推荐(0)
摘要:线程休眠(让线程休息一会再运行) public static void sleep(long millis) 在自定义线程类中添加该方法。 更改后,运行测试类,结果就是每执行完一轮,就休息1秒(这里设置的是休眠1秒),再进行一轮。 一轮:(如果测试类调用了3个线程,那么就是随机运行3次为一轮) 如: 阅读全文
posted @ 2016-10-05 22:01 卡拉瓦 阅读(305) 评论(0) 推荐(0)
摘要:线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令。 那么Java是如何对线程进行调用的呢? 线程有两种调度模型: 分时调度模型 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片 阅读全文
posted @ 2016-10-05 20:47 卡拉瓦 阅读(6976) 评论(0) 推荐(0)
摘要:如何获取线程对象的名称呢? public final String getName():获取线程的名称。如何设置线程对象的名称呢? public final void setName(String name):设置线程的名称针对不是Thread类的子类中如何获取线程对象名称呢? public sta 阅读全文
posted @ 2016-10-05 19:20 卡拉瓦 阅读(7917) 评论(0) 推荐(0)
摘要:需求:我们要实现多线程的程序。 如何实现呢? 由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来。 而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程。 Java是不能直接调用系统功能的,所以,我们没有办法直接实现多线程程序。 但是,Java可以去调用C/C++写好的程序来实现多线 阅读全文
posted @ 2016-10-05 17:31 卡拉瓦 阅读(381) 评论(0) 推荐(0)
摘要:1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。 2:什么是进程? 通过任务管理器我们就看到了进程的存在。 而通过观察,就可以发现只有运行的程序才会出现进程。 进程:就是正在运行的程序。 进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内 阅读全文
posted @ 2016-10-05 16:27 卡拉瓦 阅读(174) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2016-10-05 16:05 卡拉瓦 阅读(310) 评论(0) 推荐(0)
摘要:1:JDK4 新IO要了解的类 Buffer(缓冲),Channer(通道) 2:JDK7 要了解的新IO类 Path:与平台无关的路径。 Paths:包含了返回Path的静态方法。 public static Path get(URI uri):根据给定的URI来确定文件路径。 Files:操作文 阅读全文
posted @ 2016-10-05 11:47 卡拉瓦 阅读(302) 评论(0) 推荐(0)
摘要:1、更改文件中的数据,特定键的值: 需求:我有一个文本文件(user.txt),我知道数据是键值对形式的,但是不知道内容是什么。 请写一个程序判断是否有“lisi”这样的键存在,如果有就改变其值为”100” 分析: A:把文本文件中的数据加载到Properties集合中 B:获取该集合的键集合 C: 阅读全文
posted @ 2016-10-05 11:00 卡拉瓦 阅读(358) 评论(0) 推荐(0)
摘要:类 Properties Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 注意:Properties是Hashtable的子类,说明是一个Map集合。但是,它后面没有<>,说明它不是泛型类 首先把它当成Map 阅读全文
posted @ 2016-10-04 10:09 卡拉瓦 阅读(213) 评论(0) 推荐(0)
摘要:序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。对象 -- 流数据(ObjectOutputStream) 构造方法:ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream 反序列化流:把文本文 阅读全文
posted @ 2016-10-03 22:28 卡拉瓦 阅读(828) 评论(0) 推荐(0)
摘要:SequenceInputStream :表示其他输入流的逻辑串联。 首先演示第二个构造方法: SequenceInputStream(InputStream s1, InputStream s2) 需求:把2个文件的内容复制到另1个文件中 以前的操作: a.txt -- b.txt c.txt - 阅读全文
posted @ 2016-10-03 21:04 卡拉瓦 阅读(359) 评论(0) 推荐(0)
摘要:SequenceInputStream(Enumeration<? extends InputStream> e) 通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。 SequenceI 阅读全文
posted @ 2016-10-03 20:35 卡拉瓦 阅读(143) 评论(0) 推荐(0)
摘要:随机访问流: RandomAccessFile类不属于流,是Object类的子类。 但它融合了InputStream和OutputStream的功能。 支持对文件的随机访问读取和写入。 public RandomAccessFile(String name,String mode):第一个参数是文件 阅读全文
posted @ 2016-10-03 17:27 卡拉瓦 阅读(433) 评论(0) 推荐(0)
摘要:标准输入输出流 System类中的两个成员变量: public static final InputStream in “标准”输入流。 public static final PrintStream out “标准”输出流。 pnputStream is = System.in; printStr 阅读全文
posted @ 2016-10-03 16:36 卡拉瓦 阅读(525) 评论(0) 推荐(0)
摘要:打印流 字节流打印流 PrintStream 字符打印流 PrintWriter打印流的特点: A:只有写数据的,没有读取数据。只能操作目的地,不能操作数据源。(只能写入数据到文件中,而不能从文件中提取数据) B:可以操作任意类型的数据。 C:如果启动了自动刷新,能够自动刷新。 D:该流是可以直接操 阅读全文
posted @ 2016-10-03 11:17 卡拉瓦 阅读(260) 评论(0) 推荐(0)
摘要:IO数据流: 可以读写基本数据类型的数据 数据输入流:DataInputStream DataInputStream(InputStream in) 数据输出流:DataOutputStream DataOutputStream(OutputStream out) 本来想自己写例子,后来看到博友写的 阅读全文
posted @ 2016-10-03 10:49 卡拉瓦 阅读(653) 评论(0) 推荐(0)
摘要:把上次用集合做的时候的分析拿出来 需求: 用户登录注册案例 按照如下操作,可以让我们更符合面向对象思想: A:这个案例有哪些类 B:每个类中又有哪些东西 C:类与类之间的关系 分析: A:这个案例有哪些类 用户类 测试类 B:每个类中又有哪些东西 用户类: 成员变量:用户名、密码 构造方法:无参构造 阅读全文
posted @ 2016-10-02 22:26 卡拉瓦 阅读(1509) 评论(0) 推荐(0)
摘要:需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中。 分析: A:读取文件中的数据 B:把数据存在一个字符串中 C:把字符串转换成字符串数组 D:对字符串数组进行排序 E:数组转换成字符串 F 阅读全文
posted @ 2016-10-02 17:10 卡拉瓦 阅读(1728) 评论(0) 推荐(0)
摘要:需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学生信息存储到集合 D:遍历集合,把数据写到文本文件 首先创建个学生类 1 package zl_Test; 2 阅读全文
posted @ 2016-10-02 17:07 卡拉瓦 阅读(1203) 评论(0) 推荐(0)
摘要:需求:复制指定目录下的指定文件,并修改后缀名。 指定的文件是:.java文件。 指定的后缀名是:.jad 数据源所在文件夹:C:\Users\Administrator\Desktop\记录 目的地所在文件夹:C:\Users\Administrator\Desktop\新建文件夹\copy 分析: 阅读全文
posted @ 2016-10-02 10:51 卡拉瓦 阅读(838) 评论(0) 推荐(0)
摘要:需求:把C:\Users\Administrator\Desktop\记录\测试里面的所有文件复制到 C:\Users\Administrator\Desktop\新建文件夹\copy文件夹中 分析: A:封装目录 B:获取该目录下的所有文件的File数组 C:遍历该集合,得到每一个File对象 D 阅读全文
posted @ 2016-10-02 09:36 卡拉瓦 阅读(693) 评论(0) 推荐(0)
摘要:需求:一个文本中有几个名字,随机从中获取一个名字 分析: A:首先把文本中的数据读出 B:再把数据存储到集合中 C:产生一个随机的索引 D:打印出这个索引对应的值 阅读全文
posted @ 2016-10-02 09:34 卡拉瓦 阅读(267) 评论(0) 推荐(0)
摘要:有时候,我们会遇到单独写入数据到文本文件的情况。比如: 需求:把ArrayList集合中的字符串数据存储到文本文件 分析: A:ArrayList集合中存储的是String类 B:要存储的文件是文本文件,所以用字符流,为了快速,用缓冲字符流A 数据源: ArrayList<String> 遍历集合, 阅读全文
posted @ 2016-10-01 23:17 卡拉瓦 阅读(923) 评论(0) 推荐(0)
摘要:需求:复制图片 分析: 因为图片我们用记事本打开后无法读懂,所以用字节流 并且字节流复制有4种方式,所以我们尝试4种方式。 推荐第四种:缓冲字节流一次读取一个字节数组 首先写main方法: 第一种:基本字节流一次读取一个字节 第二种:基本字节流一次读取一个字节数组 第三种:缓冲字节流一次读取一个字节 阅读全文
posted @ 2016-10-01 21:40 卡拉瓦 阅读(1875) 评论(0) 推荐(0)
摘要:需求:复制文本文件 分析: 由于文本文件我们用记事本打开后可以读懂,所以使用字符流。 而字符流有5种复制的方式: 首先写main方法 第一种方式:基本字符流一次读取一个字符 第二种方式:基本字符流一次读取一个字符数组 第三种方式:缓冲字符流一次读取一个字符 第四种方式:缓冲字符流一次读取一个字符数组 阅读全文
posted @ 2016-10-01 21:16 卡拉瓦 阅读(321) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2016-10-01 19:49 卡拉瓦 阅读(146) 评论(0) 推荐(0)
摘要:字符缓冲流的特殊方法: A、BufferedWriter: public void newLine():根据系统来决定换行符 B、 BufferedReader: public String readLine():一次读取一行数据 注意:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则 阅读全文
posted @ 2016-10-01 19:09 卡拉瓦 阅读(802) 评论(0) 推荐(0)
摘要:字符流为了高效读写,也提供了对应的字符缓冲流。 字符缓冲流:A、 BufferedWriter:字符缓冲输出流 B、 BufferedReader:字符缓冲输入流A、BufferedWriter:字符缓冲输出流将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓 阅读全文
posted @ 2016-10-01 18:31 卡拉瓦 阅读(497) 评论(0) 推荐(0)
摘要:既然字节流可以复制文件,那么字符流当然也有。 同样的思路: 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader目的地: b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter 简化: 我们常用的编码表大都是使用本地默认的 阅读全文
posted @ 2016-10-01 18:05 卡拉瓦 阅读(539) 评论(0) 推荐(0)
摘要:所谓的输入流,就是读取文件中的数据 同样的,字符输入流InputStreamReader 4个构造方法,不过2个比较常用: 构造方法: A:InputStreamReader(InputStream is):用默认的编码读取数据B:InputStreamReader(InputStream is,S 阅读全文
posted @ 2016-10-01 17:34 卡拉瓦 阅读(305) 评论(0) 推荐(0)
摘要:字符输出流:OutputStreamWriter 构造方法:一共4个,说2个常用的 A:OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流(eclise默认的是GBK编码表) B:OutputStreamWriter(OutputStre 阅读全文
posted @ 2016-10-01 17:26 卡拉瓦 阅读(325) 评论(0) 推荐(0)
摘要:字节流通过读取一个byte数组的方式可以读取中文的,但是有可能出现小问题,所以,读取中文最好是用字符流。 字符流: 字符流=字节流+编码表。 编码表: 由字符及其对应的数值组成的一张表 编码表介绍: 计算机只能识别二进制数据,早期由来是电信号。 为了方便应用计算机,让它可以识别各个国家的文字。 就将 阅读全文
posted @ 2016-10-01 17:05 卡拉瓦 阅读(266) 评论(0) 推荐(0)