孙豪杰的博客

[Java基础教程]第十三章-Java多线程

main方法启动的线程,做为主线程一直在监听新的链接,每当有新的用户链接进来会创建一个新的线程”Thread thread = new SessionProcessor(sessionName, acceptSocket);”,并启动线程”thread.start()”.
新创建的线程执行逻辑是我们在继承了Thread的类SessionProcessor的run方法。从socket中获取输入流,读取客户端发送的字符串。
多线程实现的关键点:
1、继承Thread类或者实现Runnable接口,并重写run方法
2、创建线程并调用start方法。
为了解决资源竞争,需要保持线程串行访问共享资源,Java中关键字”synchronized”和接口“java.util.concurrent.locks.Lock”相关的类可以解决这种问题。
多线程能很大的提升程序员运行的效率,但是如果处理不好同步会得到不一样的预期结果。所以线程有风险,使用需谨慎。

[Java基础教程]第十二章-Java输入输出流

20世纪人类使用电位表示2进制(0,1),计算机才有了飞速的发展。计算机的存储和网络传输都是2进制,每个位为一个bit,每8bit为一个字节。后来计算机的用途逐渐从纯粹的数学计算扩展到各个方面,为了表示文字使用固定2进制串表示各种字符集,这种方式叫编码。
通常文件(文本文件)的访问需要至少3个流,因为文件的存储和传输都是2进制数字,所以先获取字节流OutputStream/InputStream,然后把字节流使用相应的编码方式转换成字符流Writer/Reader,字符流只能单字符传输效率太低,所以又引入一个缓冲字符流BufferedWriter/BufferedReader,缓冲区满了才做输入或者输出操作。BufferedWriter.write(String)作用是把参数的字符串输入到文件中,如果需要换行字符串中添加”n”就可以。如果入参数据太少可能会导致缓冲区没有写满,如果我们不调用flush,可能数据没有真正的写入文件,所以使用BufferedWriter写入后一定要flush。最后记得关闭流,否则可能导致内存丢失。
通过网络的数据交互使用的也是输入流和输出流,多了ServerSocket,Socket用于描述网络连接。网络就是IP:Port进行连接的。

[Java基础教程]第十一章-Java类和对象

继承是面向对象的三个特性之一,Java语言通过继承父类和实现接口两种方式实现继承。Java的继承有两个比较重要的特点:单继承结构,每个类只能有一个父类;所有的类继承java.lang .Object类。Object类中包含了多个默认实现的方法,其中常用的有3个,hashCode,equals,toString:
在前面几章中我们定义类的属性和方法前面会加一个单词修饰,比如private,public等,这些是对属性和方法访问权限的定义。这些修饰符共4个分别为,private,protected,default(没有修饰符),public。
类的类,有点拗口,面向对象的思想,一切都是对象,那么类的定义也是对象,也有类描述-Class类,类的属性,类的方法等都是有类定义,通过这种方式访问类和对象的方式叫做反射

[Java基础教程]第十章-Java容器

总结一下,常用容器有4种:
List容器,主要特点有序,值可以重复,主要子类ArrayList,另外一个文章没有提到的LinkedList,在容器中值更新频繁的场合下使用。
Set容器,主要特点,无序,值不可重复,主要子类HashSet
Map容器,键值对存储,无序,不可重复,主要子类HashMap
数组,主要特点有序

[Java基础教程]第九章-Java日期处理

中国古代是否有自己的历法是朝代是否确立的标志之一,可见日期时间对人们生活的重要性,在计算机中日期和时间仍然占有非常重要的地位。Java中日期是以1970-01-01 08::00:00为基准,其他时间为这个基准的相加(或者相减)的毫秒数。jdk为格式化Date提供了一个工具类java.text.DateFormat,这是一个抽象类,最常用的子类为java.text.SimpleDateFormat,我们把当前时间输出为”2016-02-01 23:27:72″的格式。

[Java基础教程]第八章-Java字符串

Java的字符串类(java.lang.String)也被称为第九种基础数据类型,它是jdk中最常用的类,没有之一。前面学习数学运算符的时候在控制台输出了所有运算的结果值,我们输出结果值的时候同时也输出了方程式结果会更清晰,比如”3 + 7 = 10″。前面我们一起学习过几次数据类型,那么基础数据类型和String之间是怎么转换的呢?”==”比较运算符是判断符号两侧的变量是否相等,如果两个字符串直接比较会是什么结果呢。获取字符串长度length(),字符串截取substring(begin,end),index位置上的字符charAt(index),这里的begin,end和Index都是字符在字符串中的位置,起始inex为0,这点需要注意.

[Java基础教程]第七章-Java流程控制

小明帮妈妈打酱油,临出门了妈妈就会说:”如果有瓶装的就买个瓶装的,否则就买一个袋装的。”这种场景在计算机中非常常见,一起来看下怎么用Java实现吧。
目前一共介绍了3种运算符,数学运算符(+-*/%),比较运算符(<,>,<=,>=)和逻辑运算符(&&,||),基本能满足日常开发。当一起使用的时候优先级是:数学运算符>比较运算符>逻辑运算符,”()”大于数学运算符。
流程控制:分支流程if else,switch case,循环流程while和for,以及中断循环的语句break,和continue。

[Java基础教程]第六章-Java数学运算符

最初设计计算机的目的是为二战中的盟国军队计算导弹的轨迹,数学计算是计算机的最初目的,本章我们共同学习一下最基础的数学四则运算符。
首先看下基本数据类型:
整型类型:byte(8bit),short(16bit),int(32bit),long(64)
浮点型类型:float(32bit),double(64bit)
字符型:char(16bit)
boolean型:boolean(1bit)
有了数学运算的数据基础,我们再来看一下怎么进行四则运算(加减乘除)和取模运算。

[Java基础教程]第五章-Java代码注释

工作中开发的项目会有如下特点:
1、多人参与开发同一个项目,彼此间有复用
2、项目开发周期长,一个项目可能会开发几个月甚至更长
3、需求变更导致代码不断的重构(重新或者修改的意思)
4、项目维护者不是项目的最初的开发者
导致直接阅读代码有难度,为了便于他人或者未来的自己阅读代码,在代码中书写一些文字性描述。Java语言本身支持注释,在编译和运行当中注释代码会被忽略。

[Java基础教程]第四章-Java开发中基础概念

Java开发中基础概念
1、变量和赋值
2、变量的作用域
3、类:现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起,是数据和操作的组织形式。系统运行不直接使用类,使用根据类产生的具体对象。
4、对象:对象是对客观事物的抽象,类是对对象的抽象。对象属于某一个类,根据类生成具体对象。