- 8.1学习内容:上午GUI的布局,默认的FlowLayout,BorderLayout位置布局,GridLayout表格布局,CardLayout卡片布局–少见,AbsoluteLayout绝对布局。下午是组件的使用和Event的监听。
监听器的使用:实现ActionListener,重写方法,再让组件注册监听器。 8.2学习内容:
上午学习内部类:
成员内部类——和类的成员一样,使用方法A.B b = a.new B();创建B的对象时肯定创建了A的对象.
静态内部类——和静态成员一样,使用方法A.B b = new A.B();创建B的对象不一定创建A的对象.
局部内部类——在类的成员方法中,只有在调用方法的时候才会产生B的对象.
匿名内部类——使用方法:A a = new A(){类体};A一般为接口,{类体}是实现了A或者继承了A,所以类体中一般重写方法,使用很灵活,可以在方法参数里面使用匿名内部类.下午使用sql语句熟悉mysql数据库环境.
mysql -u root -p;show databases;create database 数据库名; use 数据库名; show tables; 建表语句.desc 表名—-显示表字段; show create table 表名;—显示创建表的语句.每条命令都以分号—-> ; 结束.
晚上了解MVC模式.
M是Mode,核心业务层,在M之下细分有个DAO层,又称持久层.
C是Controller,控制器,控制View传到Mode层的数据,也控制Mode层返回信息在View上的显示.
View,表示层,和用户的交互在View层.- 8.3学习内容:
- alter table 表名 [add 列名 类型 [约束[first|after 列名]]] [drop 列名] [alter column 列名 数据类型]
- insert into 表名 [(列名1,列名2….)] values (值1,值2)
- update 表名 set 列名 = 表达式 [where 条件]
- delete from 表名 [where 条件]
- select 列名 [as 别名] from 表名 [where 条件] [group by 列名 [having 条件表达式]] [ order by 列名 [asc|desc]]
- ifnull(列名,值) – 对空值的处理,[not]between … and ….,[not] like ,关系符.
- 8.7学习内容:
- 上午复习SQL
- 下午学习JDBC.初步连接数据库. Class.froName,Connection,Statement,ResultSet,finally.
- SQL中对group by 的概念混淆了,group by只是用来分组,将数据按照条件分为不同的组,可以count(*)来计算每个分组中有多少个数据.order by 可以将数据排序,将所有数据按顺序显示出来并且计算每个不同分组中的数组?
- 外键和主键,有外键的是从表,作为表的主键的是主表.创建表的时候先创建主表,再创建从表.删除的时候先删除从表再删除主表.
8.8 学习内容:
访问数据库并封装查询出的数据.数据库中的事务概念–一起执行,要么都成功,要么都失败.
将getConn()–获得连接,close()–关闭资源, query()–查询,update()–更新,封装成JDBC util工具类.每次要访问数据库调用query()或者update()的时候,都要去新建一个连接.之前想将Connection设置成一个成员变量,不想每次调用的时候都去创建一个Connection对象—但是如果用成员变量还是需要去创建不同的对象才有不同的连接对象,用静态的话只能有一个连接,这样访问的时候得多慢,说不定就出现了BUG.
可能在后面会有一个连接池,每次只会释放连接,而不去关闭.当有需要连接的时候就分配一个连接对象.之前对DAO,entity,Service的关系不清晰.
在DAO查询到数据后,将其封装为一个对象或者用List去存储很多的数据,这个时候DAO中的方法返回值应该是List或者一个类类型,这样在返回给Service中调用的方法时,Service就能获取到封装的对象,然后在Service中对对象进行处理.PreparedStatement的使用,能够防止SQL注入(select * from table where 1 or 1).
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程.在执行一条SQL语句的时候和Statement没有很大区别..Statement每次执行sql语句,相关数据库都要执行sql语句的编译.(数据库编译是什么鬼),所以预编译是个什么鬼~~~util的Date类和sql的Date类的区别:
sql.Date 是 util.Date的子类~~~sql.Date为了适应数据库写出来的
PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date .
8.9学习内容:
泛型可以添加子类泛型类和接口才能启用泛型机制.加上泛型后会改变继承关系—List 和 List 不再是继承关系List<’?>指任何List<>的父类型.List也可以
public T show (T t1, T t2){};T的类型是一样的,只是一个说明,可以不写IO流–File类,createFile()只会创建文件,mkdir如果没有路径是不会创建文件夹的,而mkdirs如果没有路径 会自己创建出路径.
- 项目中的遇到的问题:JTable的使用.创建表格的步骤
- dtm = new DefaultTableModel(new Object[][], new String[]),前面的是值,后面的是列名
- ao.getTable_2().setModel(dtm);
- ao.getTable_2().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);这样才能让滚动条出现,但是还有列宽的设置,不能完全显示日期信息.
- 8.14学习内容:
- 上午:RandomAccessFile读写一个player的成绩.
- 下午: 线程的两种创建方式.
(1). 继承Thread类,继承之后不需要包装,可以直接使用myThread.start()启动线程;
(2). 实现Runnable接口,实现接口后需要包装Thread t = new Thread(myThread); - 后台线程一般会在主线程执行完才会结束.myThread.setDaemon(true); //设置后台线程
- 那些坑:
(1). IO流中基本都实现了Closable接口,里面有close()方法,抛出IOException,所有调用close()方法的时候会抛出异常
(2). 如果线程start()的位置在主线程代码执行完后,子线程会按照顺序流执行?
class Test{
public static void main(String[] args){
// 1.创建子线程
// 1.1 通过实现Runnable接口创建线程
MyThread mt1 = new MyThread();
Thread t1 = new Thread(mt1);
// 1.2 通过继承Thread类创建线程,不需要包装
MyThread mt2 = new MyThread2();
// main方法中执行代码块
for (int i = 0; i < 10; i++) {
String name = Thread.currentThread().getName();
System.out.println(name + "=" + i);
// 2.启动线程
t1.start();
t2.start();
}
}
class MyThread implements Runnable {
@Override
public void run() {
System.out.println("实现Runnable接口的线程:");
for (int i = 0; i < 10; i++) {
String name = Thread.currentThread().getName();
System.out.println(name + "=" + i+"\t");
}
}
}
class MyThread2 extends Thread {
@Override
public void run() {
System.out.println("继承Thread的线程:");
for (int i = 0; i < 10; i++) {
String name = Thread.currentThread().getName();
System.out.println(name + "=" + i);
}
}
}
最后输出结果有时候会出现main方法先执行完,线程1再执行,线程2再执行.刚开始还以为代码是按顺序执行的,结果多输出几次就不是的了.只是因为数目太小,在很短时间内就能执行完.
main方法一定会等待子线程结束后再结束.因为main的for方法在start()之前执行,所以会先执行完.接下来再是两个线程之间抢夺CPU进行输出.
8.15学习内容:
主线程默认优先级5,子线程优先级与主线程相同.
子类继承父类,调用super.方法(),不重写就会去执行父类的方法.空方法体会出现问题
线程串行化:在一个线程的运行过程中需要另一个线程的结果,需要join()
子线程要调用join()之前调用start();感觉join用在比较耗时间的操作上,又需要计算结果
StringBuffer.reverse();
Java不支持泛型数组8.17学习内容:
- 生产者和消费者的线程问题:
/* 数据满了进入等待
如果index==data.length,则调用wait(),此时会释放这个对象锁.这个时候别的线程可以去使用
这个对象锁,调用pop()方法去改变index的值,这样就能跳出循环.
使用while能够一直去检查数组是不是满的,满的就继续等待.
*/
while (index == data.length) {
try {
this.wait(); // 等待,释放对象锁
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 通知其他线程
this.notifyAll();
data[index] = c;
System.out.println("生产:" + data[index]);
index++;
ArrayList线程不安全,Vector线程安全.
2. 网络编程Socket
// IP地址的几个方法
InetAddress add = InetAddress.getLocalHost();
InetAddress add1 = InetAddress.getByName("www.baidu.com");
System.out.println(add1.getHostName());
System.out.println(add1.getHostAddress());
System.out.println(String.valueOf(add1.getAddress()));
// URL类的使用,读取一个URL的东西并写出到a.jpg
URL baidu = new URL("http://images2.fanpop.com/images/photos/5400000/Tropical-Fish-fish-5412585-800-600.jpg");
InputStream is = baidu.openStream();
FileOutputStream fos = new FileOutputStream("a.jpg");
int i;
while( (i = is.read())!= -1) {
fos.write(i);
}
fos.close();
8.21
1.Socket网络编程的时候,ServerSocket容易出现EOFException,很大的原因是客户端代码出现问题,导致IO流的关闭,而服务端在读取数据的时候客户端突然关闭连接,就会出现EOFException.
2.每次必须先启动服务器,再启动客户端
3.今天与组员进行连接的时候,改变server.properties的server.ip,应该是就可以访问了,具体报错忘记了,估计是我传递的数据有问题,导致组员服务器不能解析,也就不能返回给我客户端信息.在自己的主机上是可以测试成功的.明天看看能不能解决..一个星期没有写了~~~,中间做项目,这两天学习HTML,都没有去写了,变得怠慢了.
8.29
1.今天学习的内容:form表单和选择器.form里面有各种input标签file类型可以用来选择文件, 可以用来提交到后台.CSS选择器主要有类选择器(标签中对应class 属性),id选择器(标签中对应id 属性),标签选择器(对所有相同标签生效).
2.在form表单中,文本域textarea直接写标签textarea,不是input标签,而且是双标签,而input是单标签.
3.类选择器用.开头,id选择器用#开头,标签选择器直接写标签.8.30
- 学习内容:上午–盒模型,padding内边距,border边界,margin外边距.下午–定位和浮动.几种定位:absolute,relative,fixed;浮动– 让元素左浮右浮,这样可以让块元素从左到右排列.
- div 是一个无实际意义的块状元素.只是作为一个块状元素的容器.所以可以根据div来将网页分成不同的部分.使用浮动 之后 会覆盖掉 没有使用浮动的 元素.
- 子元素没有指定宽度和高度,宽度会自动布满父元素.但是高度和内容有关.如果有多个子元素,每个都会占据块元素内容大小.
8.31
- 学习内容:CSS3的新控件,上午–border-radius圆角,自动提示datelist,,下午–border-image边界图片,线性渐变line-gradient.边框阴影box-shadow,瀑布流column-count等.
- 坑:
将边框阴影写成了border-shadow,实际为box-shadow.
瀑布流中只设置column-count=3的时候,并不会真的只有3列,如果宽度不够,会自动调整.根据父元素宽度自适应.所以要设置图片的宽度,列宽度column-width(一般设置和图片一样).然后乘以列数,得到父元素的宽度.也可以反过来用父元素宽度除以列宽度得到列数.所以在父元素宽度不够的时候是需要计算的.如果父元素宽度足够,则3列就是3列,列之间会有间距.
9.1
- 学习内容:上午–照片墙,CSS3的2D转换,使用transform:rotate(旋转),scale(缩放),skew(拉伸).还有动画的属性–keyframes . 调用自定义方法.下午周考.
- 坑:今天复习了一下IO流的一部分,很久没有用过了.然后在创建流对象的时候,将InputStream和OutputStream当做了一个实例类,想去new InputStream().对IO流的创建不熟悉.
InputStream,OutputStream,Writer和Reader 都是抽象类,都需要去new 具体子类.
9.4
- 学习内容: 学了jquery mobile框架的配置和使用.主要是使用data-role这个属性,将各个不同的标签赋予不同的属性和功能.data-role的属性有—-page,header,content,footer,listview等等.
- 其实对jquery mobile这个框架的作用不是很理解,也就是总是会问它有什么用.在界面布局上感觉不符合正常的网页布局.所以它只能写手机的布局.但是我记得好像有响应式布局,能够同时适应PC和移动端的界面.而现在jquery mobile只能写手机的布局界面.(有点没事找事的样子….) .
- 9.5
1.学习内容:主要是弹性盒子的使用.CSS3中新增的属性,为了取代float而出现.使用–在父元素中添加属性
display:flex; flex-direction:row.这样就可以将块级元素放在同一行.还有一个冲突,设置left:0px,right:0px,这样网页会自动铺满父元素.
2.现在对于网页的布局 自己写的话 只能硬拼出来. 而不是那种 自动适应网页大小的布局.对标签的属性运用不熟练.比如文本中对字体的设置,居中有很多方法.自己一两天不用就会忘记.感觉自己查的话每次用了却记不住~~~ - 9.6
- 9.7
1.学习内容: 上午主要是讲了CSS中的浮动和定位,了解到定位和浮动都是在脱离文档流进行操作的,而脱离文档流进行操作会覆盖文档流的内容,.相对定位一是将子元素限制在父元素范围内,而是相对自己布局,且原来的位置是被保留下来的.而绝对定位,如果没有相对定位限制,就是相对于body的,有相对定位的限制,就是相对于相对定位的标签进行定位. 下午是JS的一个入门.值得注意的是在JS里面将函数也作为了一种数据类型.因此可以将函数当做变量操作.还有===比较数据类型和值,typeof返回String型. 9.8
- 学习内容: 上午原生js,通过document的方法可以获取到html页面中的所有标签,并能够去设置值.但是原生js 对浏览器的兼容不好,都要自己去写,所以去用框架.下午使用jquery,主要的是$,将原生的js都封装成了方法,因此简单了很多,而且不用去考虑兼容性的问题.
代表的是jquery对象.通过
(选择器)来获取页面中的标签元素.
2. 注意:在js文件里面,使用jquery,写的函数都需要在$(function(){})里面写.这相当于window.onload(function(){})
- 学习内容: 上午原生js,通过document的方法可以获取到html页面中的所有标签,并能够去设置值.但是原生js 对浏览器的兼容不好,都要自己去写,所以去用框架.下午使用jquery,主要的是$,将原生的js都封装成了方法,因此简单了很多,而且不用去考虑兼容性的问题.
代表的是jquery对象.通过
(选择器)来获取页面中的标签元素.
9.11
- 学习内容: 安装myeclipse.
安装tomcat. 配置tomcat路径, 配置path路径. - 坑:
1.在socket中,一旦关闭输入流或者输出流,就会将socket整个关闭.
2.子类抛出的异常不能比父类抛出的异常大.
- 学习内容: 安装myeclipse.
- 9.12
- 学习内容:一个完整的业务实现
前端界面浏览器上通过form表单或者URL 向 Tomcat服务器 发送请求,tomcat服务器在web.xml中找到对应的Servlet 类, 然后在Servlet中去获取传递来的参数, 同时在Servlet中调用后台的方法对业务进行处理,最后返回响应结果,并且实现页面的跳转. - 主要是路径还有点不清楚,Servlet和前端页面的根路径 是不同的.
- 学习内容:一个完整的业务实现