├── README.md ├── 本书源码说明.docx ├── NetServer ├── WebRoot │ ├── META-INF │ │ └── MANIFEST.MF │ ├── WEB-INF │ │ └── lib │ │ │ ├── commons-io-1.4.jar │ │ │ ├── fastjson-1.2.70.jar │ │ │ └── commons-fileupload-1.2.1.jar │ └── upload.jsp ├── 服务端工程的使用说明.docx ├── .idea │ ├── vcs.xml │ ├── modules.xml │ ├── misc.xml │ └── libraries │ │ ├── lib1.xml │ │ └── lib.xml └── NetServer.iml ├── chapter16 ├── lib │ ├── dom4j-2.1.1.jar │ ├── log4j-1.2.17.jar │ ├── fastjson-1.2.70.jar │ ├── httpcore-4.4.12.jar │ ├── httpmime-4.5.10.jar │ └── mchange-commons-java-0.2.16.jar ├── src │ ├── com │ │ └── network │ │ │ ├── im_client │ │ │ ├── qq_login_bg.png │ │ │ ├── qq_logo_100.png │ │ │ ├── qq_logo_30.png │ │ │ ├── QQListener.java │ │ │ ├── Friend.java │ │ │ ├── friend_list.fxml │ │ │ ├── FriendListMain.java │ │ │ ├── ChatMain.java │ │ │ ├── QQLoginMain.java │ │ │ ├── chat.fxml │ │ │ └── qq_login.fxml │ │ │ ├── parser │ │ │ ├── UserInfo.java │ │ │ ├── GoodsItem.java │ │ │ ├── GoodsOrder.java │ │ │ └── XmlSax.java │ │ │ ├── socket │ │ │ ├── TestTcpServer.java │ │ │ ├── TestTcpClient.java │ │ │ ├── TestUdpServer.java │ │ │ └── TestUdpClient.java │ │ │ ├── ToastUtil.java │ │ │ ├── im_server │ │ │ ├── SocketBean.java │ │ │ └── ChatServer.java │ │ │ ├── PrintUtils.java │ │ │ ├── DateUtil.java │ │ │ └── httptest │ │ │ └── HttpTesterMain.java │ └── log4j.properties ├── .idea │ ├── vcs.xml │ ├── modules.xml │ ├── misc.xml │ └── libraries │ │ └── lib1.xml └── chapter16.iml ├── chapter17 ├── lib │ ├── c3p0-0.9.5.4.jar │ ├── druid-1.1.19.jar │ └── mysql-connector-java-8.0.16.jar ├── src │ ├── db.properties │ └── com │ │ └── database │ │ ├── ToastUtil.java │ │ ├── Utils.java │ │ ├── autocode │ │ ├── Student.java │ │ ├── AutoCodeMain.java │ │ ├── auto_code.fxml │ │ ├── Column.java │ │ └── Teacher.java │ │ ├── poem │ │ ├── PoemMain.java │ │ └── PoemColumn.java │ │ └── properties │ │ ├── TestProperties.java │ │ └── PropertiesUtil.java ├── .idea │ ├── modules.xml │ ├── misc.xml │ └── libraries │ │ └── lib1.xml └── chapter17.iml ├── chapter12 ├── src │ └── com │ │ └── awt │ │ ├── image │ │ ├── apple.png │ │ └── TestImage.java │ │ ├── window │ │ ├── TestSimple.java │ │ ├── TestFrame.java │ │ └── TestFlow.java │ │ └── widget │ │ └── TestTextArea.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter12.iml ├── chapter13 ├── src │ └── com │ │ └── swing │ │ ├── window │ │ ├── apple.png │ │ ├── TestFrame.java │ │ └── TestPanel.java │ │ ├── login │ │ └── MainWindow.java │ │ └── widget │ │ ├── TestTextField.java │ │ ├── TestPasswordField.java │ │ ├── TestTextArea.java │ │ └── TestScrollPanel.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter13.iml ├── chapter14 ├── src │ └── com │ │ └── javafx │ │ ├── scene │ │ ├── banana.png │ │ └── TestHello.java │ │ ├── ToastUtil.java │ │ ├── mortgage │ │ ├── Repayment.java │ │ └── MortgageMain.java │ │ ├── NumberField.java │ │ ├── loan │ │ ├── Main.java │ │ └── sample.fxml │ │ ├── fxml │ │ ├── LoginMain.java │ │ └── login.fxml │ │ └── widget │ │ └── Snack.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter14.iml ├── chapter15 ├── src │ └── com │ │ └── concurrent │ │ ├── mouse │ │ ├── hole.png │ │ ├── mouse.png │ │ ├── hole_hit.png │ │ ├── mouse_hit.png │ │ ├── hit_mouse.fxml │ │ └── HitMouseMain.java │ │ ├── PrintUtils.java │ │ └── stopwatch │ │ ├── WatchMain.java │ │ └── watch.fxml ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter15.iml ├── chapter04 ├── src │ └── com │ │ └── method │ │ ├── function │ │ ├── Simple.class │ │ └── Simple.java │ │ ├── big │ │ └── TestInteger.java │ │ └── pack │ │ └── PackNumber.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter04.iml ├── chapter01 ├── src │ └── com │ │ └── donghan │ │ ├── nanjun │ │ ├── dangyang │ │ │ ├── Hello.class │ │ │ ├── Maicheng.java │ │ │ └── Hello.java │ │ └── xiangyang │ │ │ └── Xiangyang.java │ │ ├── test │ │ ├── Year.java │ │ └── Number.java │ │ ├── nanyang │ │ └── wanxian │ │ │ └── Wancheng.java │ │ ├── huainan │ │ └── hefei │ │ │ └── Hefei.java │ │ └── weijun │ │ └── yexian │ │ └── Yecheng.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter01.iml ├── chapter07 ├── src │ └── com │ │ └── object │ │ ├── inherit │ │ ├── Swallow.java │ │ ├── Eagle.java │ │ ├── DuckProtected.java │ │ ├── DuckPublic.java │ │ └── Duck.java │ │ ├── polymorphic │ │ ├── Chick.java │ │ ├── Chicken.java │ │ ├── Hen.java │ │ ├── Cock.java │ │ ├── ChickenFinal.java │ │ ├── TestChicken.java │ │ └── TestFinal.java │ │ ├── encapsulate │ │ ├── OrangeSimple.java │ │ └── OrangeMember.java │ │ ├── account │ │ ├── TestAccount.java │ │ ├── DepositAccount.java │ │ └── CashAccount.java │ │ └── trade │ │ ├── DepositAccount.java │ │ ├── StockAccount.java │ │ ├── TransactionRecord.java │ │ ├── CashAccount.java │ │ └── TestAccount.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter07.iml ├── chapter08 ├── src │ └── com │ │ └── special │ │ ├── function │ │ ├── Behavior.java │ │ ├── Calculator.java │ │ ├── StringFilter.java │ │ ├── StringFilter2.java │ │ ├── Arithmetic.java │ │ ├── Animal.java │ │ ├── TestFunctional.java │ │ ├── StringUtil.java │ │ └── MathUtil.java │ │ ├── behavior │ │ ├── Behavior2.java │ │ ├── Cock.java │ │ ├── Hen.java │ │ ├── SortDescend.java │ │ ├── Chicken.java │ │ ├── TestAbstract.java │ │ ├── Behavior.java │ │ ├── Frog.java │ │ ├── Goose.java │ │ ├── ExpandGoose.java │ │ ├── Bird.java │ │ ├── ExpandBehavior.java │ │ └── TestInterface.java │ │ ├── inner │ │ ├── Season.java │ │ ├── SeasonCn.java │ │ ├── Tree.java │ │ ├── TreeNest.java │ │ ├── TreeInner.java │ │ ├── TestInner.java │ │ └── TestStatic.java │ │ ├── singleton │ │ ├── Plain.java │ │ ├── SingletonHungry.java │ │ ├── SingletonNest.java │ │ ├── SingletonLazy.java │ │ └── TestSingleton.java │ │ └── builder │ │ ├── UserCommon.java │ │ ├── TestBuilder.java │ │ └── User.java ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter08.iml ├── chapter02 ├── .idea │ ├── modules.xml │ └── misc.xml ├── src │ └── com │ │ └── arithmetic │ │ ├── numerical │ │ ├── Basic.java │ │ ├── Prefix.java │ │ ├── Suffix.java │ │ └── Convert.java │ │ ├── math │ │ ├── Angle.java │ │ ├── Science.java │ │ ├── Rand.java │ │ └── Trunc.java │ │ ├── Pingfanggen.java │ │ ├── operator │ │ ├── Assign.java │ │ ├── Four.java │ │ └── Unary.java │ │ └── Niudundiedai.java └── chapter02.iml ├── chapter03 ├── .idea │ ├── modules.xml │ └── misc.xml ├── chapter03.iml └── src │ └── com │ └── control │ ├── Geligaoli.java │ ├── array │ ├── OneDimensional3.java │ ├── ArrayFill.java │ ├── ColonErgodic.java │ ├── OneDimensional2.java │ ├── OneDimensional.java │ ├── TwoDimensional2.java │ ├── TwoDimensional.java │ ├── TwoDimensional3.java │ └── ArraySort.java │ ├── Jitutonglong.java │ ├── process │ ├── WhileLoop.java │ ├── WhileLoop2.java │ ├── Condition.java │ ├── Condition3.java │ ├── ForLoop2.java │ ├── Multipath.java │ ├── WhileLoop3.java │ ├── ForLoop3.java │ ├── Condition2.java │ ├── Multipath2.java │ └── ForLoop.java │ ├── Feibonaqi.java │ ├── SunziDingli.java │ ├── YanghuiSanjiao.java │ └── logic │ ├── Relation.java │ ├── Priority.java │ ├── ShortCircuit.java │ └── Bool.java ├── chapter05 ├── .idea │ ├── modules.xml │ └── misc.xml ├── chapter05.iml └── src │ └── com │ └── string │ └── character │ └── TypeChar.java ├── chapter06 ├── .idea │ ├── modules.xml │ └── misc.xml └── chapter06.iml ├── chapter09 ├── .idea │ ├── modules.xml │ └── misc.xml ├── src │ └── com │ │ └── collect │ │ ├── algorithm │ │ ├── ArraySort.java │ │ ├── SortInterface.java │ │ ├── SortBubble.java │ │ ├── LruMap.java │ │ ├── FifoList.java │ │ ├── SortQuick.java │ │ ├── ArrayFind.java │ │ └── TestQueue.java │ │ ├── container │ │ ├── MobilePhone.java │ │ ├── MobilePhoneTree.java │ │ └── MobilePhoneHash.java │ │ └── generic │ │ ├── TestClass.java │ │ └── Apple.java └── chapter09.iml ├── chapter10 ├── .idea │ ├── modules.xml │ └── misc.xml ├── src │ └── com │ │ └── addition │ │ ├── annotation │ │ ├── Calculator.java │ │ ├── Arithmetic.java │ │ ├── NotNull.java │ │ ├── Cock.java │ │ ├── Hen.java │ │ ├── Chicken.java │ │ └── Apple.java │ │ ├── exception │ │ ├── ArrayOutOfException.java │ │ ├── ArrayIsNullException.java │ │ └── TestError.java │ │ └── reflect │ │ ├── Hen.java │ │ ├── Cock.java │ │ ├── Chicken.java │ │ └── TestReflectClass.java └── chapter10.iml └── chapter11 ├── .idea ├── modules.xml └── misc.xml ├── chapter11.iml └── src └── com └── io ├── huffman ├── TestHuffman.java └── HuffmNode.java └── bio ├── UserInfo.java └── TestFileStream.java /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/README.md -------------------------------------------------------------------------------- /本书源码说明.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/本书源码说明.docx -------------------------------------------------------------------------------- /NetServer/WebRoot/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /NetServer/服务端工程的使用说明.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/NetServer/服务端工程的使用说明.docx -------------------------------------------------------------------------------- /chapter16/lib/dom4j-2.1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/dom4j-2.1.1.jar -------------------------------------------------------------------------------- /chapter16/lib/log4j-1.2.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/log4j-1.2.17.jar -------------------------------------------------------------------------------- /chapter17/lib/c3p0-0.9.5.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter17/lib/c3p0-0.9.5.4.jar -------------------------------------------------------------------------------- /chapter17/lib/druid-1.1.19.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter17/lib/druid-1.1.19.jar -------------------------------------------------------------------------------- /chapter16/lib/fastjson-1.2.70.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/fastjson-1.2.70.jar -------------------------------------------------------------------------------- /chapter16/lib/httpcore-4.4.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/httpcore-4.4.12.jar -------------------------------------------------------------------------------- /chapter16/lib/httpmime-4.5.10.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/httpmime-4.5.10.jar -------------------------------------------------------------------------------- /chapter12/src/com/awt/image/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter12/src/com/awt/image/apple.png -------------------------------------------------------------------------------- /chapter13/src/com/swing/window/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter13/src/com/swing/window/apple.png -------------------------------------------------------------------------------- /chapter14/src/com/javafx/scene/banana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter14/src/com/javafx/scene/banana.png -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/mouse/hole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter15/src/com/concurrent/mouse/hole.png -------------------------------------------------------------------------------- /chapter04/src/com/method/function/Simple.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter04/src/com/method/function/Simple.class -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/mouse/mouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter15/src/com/concurrent/mouse/mouse.png -------------------------------------------------------------------------------- /chapter16/lib/mchange-commons-java-0.2.16.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/lib/mchange-commons-java-0.2.16.jar -------------------------------------------------------------------------------- /chapter17/lib/mysql-connector-java-8.0.16.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter17/lib/mysql-connector-java-8.0.16.jar -------------------------------------------------------------------------------- /NetServer/WebRoot/WEB-INF/lib/commons-io-1.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/NetServer/WebRoot/WEB-INF/lib/commons-io-1.4.jar -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/mouse/hole_hit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter15/src/com/concurrent/mouse/hole_hit.png -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/mouse/mouse_hit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter15/src/com/concurrent/mouse/mouse_hit.png -------------------------------------------------------------------------------- /NetServer/WebRoot/WEB-INF/lib/fastjson-1.2.70.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/NetServer/WebRoot/WEB-INF/lib/fastjson-1.2.70.jar -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/qq_login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/src/com/network/im_client/qq_login_bg.png -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/qq_logo_100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/src/com/network/im_client/qq_logo_100.png -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/qq_logo_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter16/src/com/network/im_client/qq_logo_30.png -------------------------------------------------------------------------------- /chapter01/src/com/donghan/nanjun/dangyang/Hello.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/chapter01/src/com/donghan/nanjun/dangyang/Hello.class -------------------------------------------------------------------------------- /chapter01/src/com/donghan/nanjun/dangyang/Maicheng.java: -------------------------------------------------------------------------------- 1 | package com.donghan.nanjun.dangyang; // 东汉帝国南郡当阳县 2 | 3 | public class Maicheng { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /NetServer/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aqi00/java/HEAD/NetServer/WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar -------------------------------------------------------------------------------- /chapter07/src/com/object/inherit/Swallow.java: -------------------------------------------------------------------------------- 1 | package com.object.inherit; 2 | 3 | //定义了一个继承自鸟类的燕子类 4 | public class Swallow extends Bird { 5 | // 燕子类未重写任何构造方法,则默认使用不带输入参数的构造方法 6 | } 7 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/Behavior.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //定义一个行为接口,给动物类调用 4 | public interface Behavior { 5 | public void act(); // 声明一个名叫行动的抽象方法 6 | } 7 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Behavior2.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义另一个行为接口 4 | public interface Behavior2 { 5 | public void jump(); // 声明了一个抽象的跳跃方法 6 | 7 | } 8 | -------------------------------------------------------------------------------- /chapter08/src/com/special/inner/Season.java: -------------------------------------------------------------------------------- 1 | package com.special.inner; 2 | 3 | //演示枚举类型的简单定义。这是个季节枚举 4 | public enum Season { 5 | // 几个枚举变量之间以逗号分隔 6 | SPRING, SUMMER, AUTUMN, WINTER 7 | } 8 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/Calculator.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //定义一个计算器接口,给算术类使用 4 | public interface Calculator { 5 | public double operate(double x, double y); // 声明一个名叫运算的抽象方法 6 | } 7 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/StringFilter.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //定义字符串的过滤接口 4 | public interface StringFilter { 5 | public boolean isMatch(String str); // 声明一个输入参数只有源字符串的抽象方法 6 | } 7 | -------------------------------------------------------------------------------- /NetServer/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter16/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/StringFilter2.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //定义字符串的过滤接口2 4 | public interface StringFilter2 { 5 | public boolean isMatch(String str, String sign); // 声明一个输入参数包括源字符串和标记串的抽象方法 6 | } 7 | -------------------------------------------------------------------------------- /chapter16/src/com/network/parser/UserInfo.java: -------------------------------------------------------------------------------- 1 | package com.network.parser; 2 | 3 | //定义一个用户信息 4 | public class UserInfo { 5 | public String name; // 用户姓名 6 | public String address; // 收货地址 7 | public String phone; // 联系号码 8 | } 9 | -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/QQListener.java: -------------------------------------------------------------------------------- 1 | package com.network.im_client; 2 | 3 | //定义QQ事件监听器,用于服务端的回调处理。这是一个函数式接口,调用时可写成Lambda表达式 4 | @FunctionalInterface 5 | public interface QQListener { 6 | public void doEvent(String content); 7 | } 8 | -------------------------------------------------------------------------------- /chapter16/src/com/network/parser/GoodsItem.java: -------------------------------------------------------------------------------- 1 | package com.network.parser; 2 | 3 | //定义一项商品信息 4 | public class GoodsItem { 5 | public String goods_name; // 商品名称 6 | public int goods_number; // 商品数量 7 | public double goods_price; // 商品价格 8 | } 9 | -------------------------------------------------------------------------------- /chapter17/src/db.properties: -------------------------------------------------------------------------------- 1 | #数据库连接信息配置 2 | jdbc.connection.driver_class=com.mysql.cj.jdbc.Driver 3 | jdbc.connection.url=jdbc:mysql://localhost:3306/study?serverTimezone=GMT%2B8 4 | jdbc.connection.username=root 5 | jdbc.connection.password=222@@@wwwWWW 6 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/nanjun/dangyang/Hello.java: -------------------------------------------------------------------------------- 1 | package com.donghan.nanjun.dangyang; 2 | 3 | public class Hello { 4 | 5 | // 代码添加开始,下面的程序入口将会在控制台打印“Hello World” 6 | public static void main(String[] args) { 7 | System.out.println("Hello World"); 8 | } 9 | // 代码添加结束 10 | } 11 | -------------------------------------------------------------------------------- /NetServer/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter01/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter02/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter03/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter04/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter05/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter06/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter07/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter08/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter09/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter10/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter11/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter12/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter13/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter14/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter15/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter16/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /chapter17/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /NetServer/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter01/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter02/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter03/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter04/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter05/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter06/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter07/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter08/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter09/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter10/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter11/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter12/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter13/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter14/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter15/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter16/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter17/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /chapter07/src/com/object/inherit/Eagle.java: -------------------------------------------------------------------------------- 1 | package com.object.inherit; 2 | 3 | //定义了一个继承自鸟类的老鹰类 4 | public class Eagle extends Bird { 5 | 6 | // 老鹰类重写了带三个参数的构造方法,则不使用没有输入参数的构造方法 7 | public Eagle(String name, int sexType, String voice) { 8 | super(name, sexType, voice); // 利用super指代父类的构造方法名称 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /chapter12/src/com/awt/window/TestSimple.java: -------------------------------------------------------------------------------- 1 | package com.awt.window; 2 | 3 | import java.awt.Frame; 4 | 5 | //演示一个最简单的窗口 6 | public class TestSimple { 7 | 8 | public static void main(String[] args) { 9 | Frame frame = new Frame(); // 创建一个窗口对象 10 | frame.setVisible(true); // 必须设置为true,否则看不见 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/Chick.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //定义一个小鸡类。因为小鸡的性别难以辨别,所以不再定义性别属性,小鸡类也不允许被继承 4 | final public class Chick { 5 | 6 | // 定义一个名称属性 7 | public String name; 8 | 9 | // 定义一个叫唤方法 10 | public void call() { 11 | System.out.println("叽叽喳喳"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/Chicken.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //定义一个鸡类 4 | public class Chicken { 5 | 6 | // 定义一个名称属性 7 | public String name; 8 | // 定义一个性别属性 9 | public int sex; 10 | 11 | // 定义一个叫唤方法 12 | public void call() { 13 | System.out.println("半夜鸡叫"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /chapter07/src/com/object/encapsulate/OrangeSimple.java: -------------------------------------------------------------------------------- 1 | package com.object.encapsulate; 2 | 3 | //演示如何定义类的属性 4 | public class OrangeSimple { 5 | public String name; // 定义了橘子的名称 6 | public double weight; // 定义了橘子的重量 7 | public boolean isRipe; // 定义了橘子是否成熟。true表示成熟,false表示未成熟 8 | public String place; // 定义了橘子的产地 9 | } 10 | -------------------------------------------------------------------------------- /chapter16/.idea/libraries/lib1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter17/.idea/libraries/lib1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Cock.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义一个继承自抽象鸡类的公鸡类 4 | public class Cock extends Chicken { 5 | public Cock() { 6 | sex = 0; // 公鸡的性别固定为雄性 7 | } 8 | 9 | // 重写了公鸡的叫唤方法。如果不重写父类的抽象方法,那么该子类仍旧为抽象类 10 | public void call() { 11 | System.out.println("喔喔喔"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Hen.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义一个继承自抽象鸡类的母鸡类 4 | public class Hen extends Chicken { 5 | public Hen() { 6 | sex = 1; // 母鸡的性别固定为雌性 7 | } 8 | 9 | // 重写了母鸡的叫唤方法。如果不重写父类的抽象方法,那么该子类仍旧为抽象类 10 | public void call() { 11 | System.out.println("咯咯咯"); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/annotation/Calculator.java: -------------------------------------------------------------------------------- 1 | package com.addition.annotation; 2 | 3 | //该注解表示以下定义的是函数式接口,有且仅有一个抽象方法声明。 4 | //如果同时声明了多个抽象方法,则编译器在编码阶段就会报错。 5 | @FunctionalInterface 6 | //定义一个计算器接口,给算术类使用 7 | public interface Calculator { 8 | 9 | // 声明一个名叫运算的抽象方法 10 | public double operate(double x, double y); 11 | } 12 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/Hen.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //定义一个继承自鸡类的母鸡类 4 | public class Hen extends Chicken { 5 | 6 | public Hen() { 7 | // 母鸡的性别固定为雌性 8 | sex = 1; 9 | //sex = FEMALE; 10 | } 11 | 12 | // 重写了母鸡的叫唤方法 13 | public void call() { 14 | System.out.println("咯咯咯"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/Arithmetic.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //定义一个算术类 4 | public class Arithmetic { 5 | 6 | // 定义一个静态的计算方法,根据传入的计算器接口,对后面两个数字做运算 7 | public static double calculate(Calculator calculator, double x, double y) { 8 | return calculator.operate(x, y); // 这里调用了计算器接口的运算方法 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /chapter16/src/com/network/parser/GoodsOrder.java: -------------------------------------------------------------------------------- 1 | package com.network.parser; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | //定义一次商品订单信息 7 | public class GoodsOrder { 8 | public UserInfo user_info = new UserInfo(); // 用户信息 9 | public List goods_list = new ArrayList(); // 购买的商品清单 10 | } 11 | -------------------------------------------------------------------------------- /NetServer/.idea/libraries/lib1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/exception/ArrayOutOfException.java: -------------------------------------------------------------------------------- 1 | package com.addition.exception; 2 | 3 | //定义一个数组越界异常。异常类必须由Exception派生而来 4 | public class ArrayOutOfException extends Exception { 5 | private static final long serialVersionUID = -1L; 6 | 7 | public ArrayOutOfException(String message) { 8 | super(message); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /chapter16/src/com/network/socket/TestTcpServer.java: -------------------------------------------------------------------------------- 1 | package com.network.socket; 2 | 3 | //演示Socket服务器的运行(TCP协议的可靠连接) 4 | public class TestTcpServer { 5 | 6 | public static void main(String[] args) { 7 | new Thread(new ReceiveText()).start(); // 启动一个文本接收线程 8 | new Thread(new ReceiveFile()).start(); // 启动一个文件接收线程 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/test/Year.java: -------------------------------------------------------------------------------- 1 | package com.donghan.test; 2 | 3 | import java.util.Date; // 引入系统库中的Date工具 4 | 5 | public class Year { 6 | 7 | public static void main(String[] args) { 8 | Date date = new Date(); // 创建一个当前日期的实例 9 | int year = date.getYear(); // 从当前日期中获取当前年份 10 | System.out.println("year="+year); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chapter08/src/com/special/singleton/Plain.java: -------------------------------------------------------------------------------- 1 | package com.special.singleton; 2 | 3 | //普通类,未实现单例模式 4 | public class Plain { 5 | private static int count = 0; // 创建实例的次数 6 | 7 | // 构造方法。每调用一次构造方法,实例的创建次数就加一 8 | public Plain() { 9 | count++; 10 | } 11 | 12 | // 获取实例的创建次数 13 | public int getCount() { 14 | return count; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/annotation/Arithmetic.java: -------------------------------------------------------------------------------- 1 | package com.addition.annotation; 2 | 3 | //定义一个算术类 4 | public class Arithmetic { 5 | 6 | // 定义一个静态的计算方法,根据传入的计算器接口,对后面两个数字进行运算 7 | public static double calculate(Calculator calculator, double x, double y) { 8 | // 这里调用了计算器接口的运算方法 9 | return calculator.operate(x, y); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/exception/ArrayIsNullException.java: -------------------------------------------------------------------------------- 1 | package com.addition.exception; 2 | 3 | //定义一个数组为空异常。异常类必须由Exception派生而来 4 | public class ArrayIsNullException extends Exception { 5 | private static final long serialVersionUID = -1L; 6 | 7 | public ArrayIsNullException(String message) { 8 | super(message); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /NetServer/.idea/libraries/lib.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/nanyang/wanxian/Wancheng.java: -------------------------------------------------------------------------------- 1 | package com.donghan.nanyang.wanxian; // 东汉帝国南阳郡宛县 2 | 3 | public class Wancheng { 4 | 5 | public static void getIron() { 6 | System.out.println("从宛城得到了一大批的铸铁兵器。"); 7 | } 8 | 9 | public static void main(String[] args) { 10 | System.out.println("欢迎来到大汉的冶铁中心——宛城。"); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /chapter09/src/com/collect/algorithm/ArraySort.java: -------------------------------------------------------------------------------- 1 | package com.collect.algorithm; 2 | 3 | //定义一个数组排序的工具类 4 | public class ArraySort { 5 | 6 | // 定义了一个排序方法,支持给所有实现了Comparable接口的数组类型排序。 7 | // 第一个参数是待排序的数组,第二个参数是排序策略。 8 | public static > void sort(T[] array, SortInterface sorter) { 9 | sorter.sort(array); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/annotation/NotNull.java: -------------------------------------------------------------------------------- 1 | package com.addition.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Documented // 该注解纳入到Java开发手册 6 | @Target(ElementType.FIELD) // 该注解的作用目标是字段(属性) 7 | @Retention(RetentionPolicy.RUNTIME) // 该注解保留至运行阶段,这样能够通过反射机制调用 8 | //定义了一个注解,在interface前面加上符号“@”,表示这是个注解 9 | public @interface NotNull {} 10 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/reflect/Hen.java: -------------------------------------------------------------------------------- 1 | package com.addition.reflect; 2 | 3 | //定义一个继承自鸡类的母鸡类 4 | public class Hen extends Chicken { 5 | 6 | public Hen() { 7 | name = "母鸡"; 8 | // 母鸡的性别固定为雌性 9 | // sex = 1; 10 | sex = FEMALE; 11 | } 12 | 13 | // 重写了母鸡的叫唤方法 14 | public void call() { 15 | System.out.println("咯咯咯"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/nanjun/xiangyang/Xiangyang.java: -------------------------------------------------------------------------------- 1 | package com.donghan.nanjun.xiangyang; // 东汉帝国南郡襄阳县 2 | 3 | import com.donghan.nanyang.wanxian.Wancheng; // 准备从宛城进口商品 4 | 5 | public class Xiangyang { 6 | 7 | public static void main(String[] args) { 8 | System.out.println("这里是华夏第一城池——襄阳城。"); 9 | Wancheng.getIron(); // 从宛城进口铁器 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/Cock.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //定义一个继承自鸡类的公鸡类 4 | public class Cock extends Chicken { 5 | 6 | public Cock() { 7 | // 公鸡的性别固定为雄性 8 | sex = 0; 9 | //sex = MALE; 10 | } 11 | 12 | // 重写了公鸡的叫唤方法 13 | public void call() { 14 | super.call(); // 先调用鸡类的叫唤方法 15 | System.out.println("喔喔喔"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter14/src/com/javafx/ToastUtil.java: -------------------------------------------------------------------------------- 1 | package com.javafx; 2 | 3 | import javafx.scene.control.Alert; 4 | 5 | //定义提示框工具类 6 | public class ToastUtil { 7 | // 弹出提示框 8 | public static void show(String message) { 9 | Alert alert = new Alert(Alert.AlertType.INFORMATION); // 创建消息对话框 10 | alert.setContentText(message); // 设置对话框的内容文本 11 | alert.show(); // 显示对话框 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter16/src/com/network/ToastUtil.java: -------------------------------------------------------------------------------- 1 | package com.network; 2 | 3 | import javafx.scene.control.Alert; 4 | 5 | //定义提示框工具类 6 | public class ToastUtil { 7 | // 弹出提示框 8 | public static void show(String message) { 9 | Alert alert = new Alert(Alert.AlertType.INFORMATION); // 创建消息对话框 10 | alert.setContentText(message); // 设置对话框的内容文本 11 | alert.show(); // 显示对话框 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter17/src/com/database/ToastUtil.java: -------------------------------------------------------------------------------- 1 | package com.database; 2 | 3 | import javafx.scene.control.Alert; 4 | 5 | //定义提示框工具类 6 | public class ToastUtil { 7 | // 弹出提示框 8 | public static void show(String message) { 9 | Alert alert = new Alert(Alert.AlertType.INFORMATION); // 创建消息对话框 10 | alert.setContentText(message); // 设置对话框的内容文本 11 | alert.show(); // 显示对话框 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/reflect/Cock.java: -------------------------------------------------------------------------------- 1 | package com.addition.reflect; 2 | 3 | //定义一个继承自鸡类的公鸡类 4 | public class Cock extends Chicken { 5 | 6 | public Cock() { 7 | name = "公鸡"; 8 | // 公鸡的性别固定为雄性 9 | // sex = 0; 10 | sex = MALE; 11 | } 12 | 13 | // 重写了公鸡的叫唤方法 14 | public void call() { 15 | super.call(); // 先调用鸡类的叫唤方法 16 | System.out.println("喔喔喔"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter09/src/com/collect/algorithm/SortInterface.java: -------------------------------------------------------------------------------- 1 | package com.collect.algorithm; 2 | 3 | //定义排序接口 4 | public interface SortInterface> { 5 | 6 | // 声明一个排序操作的抽象方法 7 | public void sort(T[] array); 8 | 9 | // 定义一个交换数组元素的默认方法 10 | default void swap(T[] array, int i, int j) { 11 | T temp = array[i]; 12 | array[i] = array[j]; 13 | array[j] = temp; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/SortDescend.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | import java.util.Comparator; 4 | 5 | //定义一个整型数组的降序比较器 6 | public class SortDescend implements Comparator { 7 | 8 | @Override 9 | public int compare(Integer o1, Integer o2) { 10 | // return Integer.compare(o1, o2); // 默认的参数顺序是升序 11 | return Integer.compare(o2, o1); // 倒过来的参数顺序变成了降序 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/annotation/Cock.java: -------------------------------------------------------------------------------- 1 | package com.addition.annotation; 2 | 3 | //定义一个继承自鸡类的公鸡类 4 | public class Cock extends Chicken { 5 | 6 | public Cock() { 7 | // 公鸡的性别固定为雄性 8 | // sex = 0; 9 | sex = MALE; 10 | } 11 | 12 | // 该注解表示以下重写了父类的方法。 13 | // 如果父类找不到参数列表一致的同名方法,则编译器在编码阶段就会报错。 14 | @Override 15 | // 重写了公鸡的叫唤方法 16 | public void call() { 17 | System.out.println("喔喔喔"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/annotation/Hen.java: -------------------------------------------------------------------------------- 1 | package com.addition.annotation; 2 | 3 | //定义一个继承自鸡类的母鸡类 4 | public class Hen extends Chicken { 5 | 6 | public Hen() { 7 | // 母鸡的性别固定为雌性 8 | // sex = 1; 9 | sex = FEMALE; 10 | } 11 | 12 | // 该注解表示以下重写了父类的方法。 13 | // 如果父类找不到参数列表一致的同名方法,则编译器在编码阶段就会报错。 14 | @Override 15 | // 重写了母鸡的叫唤方法 16 | public void call() { 17 | System.out.println("咯咯咯"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /chapter14/src/com/javafx/mortgage/Repayment.java: -------------------------------------------------------------------------------- 1 | package com.javafx.mortgage; 2 | 3 | //还贷的数据结构 4 | public class Repayment { 5 | public double totalLoan; // 贷款总额 6 | public double monthRepay; // 每月还款金额 7 | public double monthMinus; // 等额本金方式的每月递减金额 8 | public double totalInterest; // 贷款总利息 9 | 10 | public Repayment() { 11 | totalLoan = 0; 12 | monthRepay = 0; 13 | monthMinus = 0; 14 | totalInterest = 0; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Chicken.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //演示抽象类的定义。这是一个抽象鸡类 4 | abstract public class Chicken { 5 | public String name; // 鸡的名称 6 | public int sex; // 鸡的性别 7 | 8 | // 定义一个抽象的叫唤方法。注意后面没有花括号,并且以分号结尾 9 | abstract public void call(); 10 | 11 | // 即使抽象类定义了构造方法,外部也无法创建它的实例 12 | public Chicken() { 13 | } 14 | 15 | // Java只有抽象类和抽象方法,没有抽象属性的说法 16 | // abstract public String cry; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/test/Number.java: -------------------------------------------------------------------------------- 1 | package com.donghan.test; 2 | 3 | public class Number { 4 | 5 | public static void main(String[] args) { 6 | int x = 8; // 8对应的二进制数为00001000 7 | int y = x << 2; // 00001000左移两位后变成00100000,左移结果转成十进制则为32 8 | int z = x >> 2; // 00001000右移两位后变成00000010,右移结果转成十进制则为2 9 | System.out.println("原始数字x="+x); 10 | System.out.println("x左移两位后="+y); 11 | System.out.println("x右移两位后="+z); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/Friend.java: -------------------------------------------------------------------------------- 1 | package com.network.im_client; 2 | 3 | //定义一个好友信息类 4 | public class Friend { 5 | public String device_id; // 好友的设备编号 6 | public String nick_name; // 好友的昵称 7 | public String login_time; // 好友的登录时间 8 | 9 | public Friend(String device_id, String nick_name, String login_time) { 10 | this.device_id = device_id; 11 | this.nick_name = nick_name; 12 | this.login_time = login_time; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/huainan/hefei/Hefei.java: -------------------------------------------------------------------------------- 1 | package com.donghan.huainan.hefei; // 东汉帝国淮南郡合肥县 2 | 3 | import java.util.Scanner; // 导入系统自带的Scanner工具 4 | 5 | public class Hefei { 6 | 7 | public static void main(String[] args) { 8 | System.out.print("这里是张辽镇守的合肥城,吴国谁来挑战?"); 9 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 10 | /* nextLine方法表示接收一行文字,以回车键结尾 */ 11 | System.out.println("吴国前来挑战的将领是:"+scan.nextLine()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /chapter08/src/com/special/function/Animal.java: -------------------------------------------------------------------------------- 1 | package com.special.function; 2 | 3 | //演示动物类的定义,其中midnight方法的输入参数为Behavior类型 4 | public class Animal { 5 | private String name; // 动物名称 6 | 7 | public Animal(String name) { 8 | this.name = name; 9 | } 10 | 11 | public String getName() { 12 | return this.name; 13 | } 14 | 15 | // 定义一个半夜行动的方法。具体的动作由输入行为的act方法执行 16 | public void midnight(Behavior behavior) { 17 | behavior.act(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /chapter02/src/com/arithmetic/numerical/Basic.java: -------------------------------------------------------------------------------- 1 | package com.arithmetic.numerical; 2 | 3 | //演示基本变量类型的用法 4 | public class Basic { 5 | 6 | public static void main(String[] args) { 7 | int zhumulanma; // 先声明变量 8 | // 8844是2005年中国测量得到的珠穆朗玛峰岩面高度,8848是冰雪高度 9 | zhumulanma = 8844; // 再对变量赋值 10 | System.out.println("珠穆朗玛峰的高度=" + zhumulanma); 11 | double yuanzhoulv = 3.1415926; // 在声明变量之时就初始化赋值 12 | System.out.println("圆周率=" + yuanzhoulv); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/TestAbstract.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //演示抽象类派生而来的子类用法 4 | public class TestAbstract { 5 | 6 | public static void main(String[] args) { 7 | // 不能创建抽象类的实例,因为抽象类是个尚未完工的类 8 | // Chicken chicken = new Chicken(); 9 | Cock cock = new Cock(); // 创建一个公鸡实例,公鸡类继承自抽象类Chicken 10 | cock.call(); // 调用公鸡实例的叫唤方法 11 | Hen hen = new Hen(); // 创建一个母鸡实例,母鸡类继承自抽象类Chicken 12 | hen.call(); // 调用母鸡实例的叫唤方法 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /chapter01/chapter01.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter02/chapter02.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter03/chapter03.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter04/chapter04.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter05/chapter05.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter06/chapter06.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter07/chapter07.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter08/chapter08.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter09/chapter09.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter10/chapter10.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter11/chapter11.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter12/chapter12.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter13/chapter13.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /chapter03/src/com/control/Geligaoli.java: -------------------------------------------------------------------------------- 1 | package com.control; 2 | 3 | //利用格里高利公式(又称格里高利级数)求圆周率 4 | //π=4*(1/1-1/3+1/5-1/7+1/9......) 5 | public class Geligaoli { 6 | 7 | public static void main(String[] arg) { 8 | double π = 0; // 圆周率 9 | double zhengfu = 1; // 正负标志 10 | for (int i=1; i<800000; i+=2) { // 使用循环语句计算有限次数的无穷级数 11 | π = π + zhengfu*4/i; // 通过无穷级数逼近圆周率 12 | zhengfu = -zhengfu; // 每次计算之后,翻转下次的正负号 13 | } 14 | System.out.println("圆周率="+π); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /chapter03/src/com/control/array/OneDimensional3.java: -------------------------------------------------------------------------------- 1 | package com.control.array; 2 | 3 | // 演示如何通过循环语句遍历并修改每个元素的数值 4 | public class OneDimensional3 { 5 | 6 | public static void main(String[] args) { 7 | // 以下是分配数组空间的第三种形式:赋值等号右边直接跟着花括号 8 | int[] numbers = { 2, 3, 5, 7 }; 9 | // 下面通过循环语句给数组的每个元素都加一 10 | for (int i = 0; i < numbers.length; i++) { 11 | // 给下标为i的数组元素加一 12 | numbers[i]++; 13 | // 打印下标为i的数组元素 14 | System.out.println("number = " + numbers[i]); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter09/src/com/collect/container/MobilePhone.java: -------------------------------------------------------------------------------- 1 | package com.collect.container; 2 | 3 | //定义一个手机类 4 | public class MobilePhone { 5 | 6 | private String brand; // 手机品牌 7 | private Integer price; // 手机价格 8 | 9 | public MobilePhone(String brand, int price) { 10 | this.brand = brand; 11 | this.price = price; 12 | } 13 | 14 | // 获取手机品牌 15 | public String getBrand() { 16 | return this.brand; 17 | } 18 | 19 | // 获取手机价格 20 | public int getPrice() { 21 | return this.price; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /chapter16/src/com/network/im_server/SocketBean.java: -------------------------------------------------------------------------------- 1 | package com.network.im_server; 2 | 3 | import java.net.Socket; 4 | 5 | //定义客户端的套接字详情 6 | public class SocketBean { 7 | public String id; // 客户端的服务编号,这是服务端给客户端分配的编号 8 | public Socket socket; // 客户端的套接字 9 | public String deviceId; // 客户端的设备编号,这是客户端给自己取的编号 10 | public String nickName; // 客户端的昵称 11 | public String loginTime; // 客户端的登录时间 12 | 13 | public SocketBean(String id, Socket socket) { 14 | this.id = id; 15 | this.socket = socket; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter08/src/com/special/builder/UserCommon.java: -------------------------------------------------------------------------------- 1 | package com.special.builder; 2 | 3 | //定义一个不能修改属性的用户类 4 | public class UserCommon { 5 | private final String name; // 姓名 6 | private final String password; // 密码 7 | 8 | public UserCommon(String name, String password) { 9 | this.name = name; 10 | this.password = password; 11 | } 12 | 13 | // 获取用户的姓名 14 | public String getName() { 15 | return this.name; 16 | } 17 | 18 | // 获取用户的密码 19 | public String getPassword() { 20 | return this.password; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/PrintUtils.java: -------------------------------------------------------------------------------- 1 | package com.concurrent; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | //定义了线程专用的日志打印工具 7 | public class PrintUtils { 8 | // 打印线程的运行日志,包括当前时间、当前线程名称、具体事件描述等信息 9 | public static void print(String threadName, String event) { 10 | SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); 11 | String dateTime = sdf.format(new Date()); 12 | String desc = String.format("%s %s %s", dateTime, threadName, event); 13 | System.out.println(desc); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chapter16/src/com/network/PrintUtils.java: -------------------------------------------------------------------------------- 1 | package com.network; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | //定义了线程专用的日志打印工具 7 | public class PrintUtils { 8 | // 打印线程的运行日志,包括当前时间、当前线程名称、具体事件描述等信息 9 | public static void print(String event) { 10 | SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); 11 | String dateTime = sdf.format(new Date()); 12 | String desc = String.format("%s %s %s", dateTime, Thread.currentThread().getName(), event); 13 | System.out.println(desc); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chapter03/src/com/control/array/ArrayFill.java: -------------------------------------------------------------------------------- 1 | package com.control.array; 2 | 3 | import java.util.Arrays; 4 | 5 | //演示如何使用Arrays工具的fill方法 6 | public class ArrayFill { 7 | 8 | public static void main(String[] args) { 9 | // 构造一个包含十个99的数组变量 10 | // int[] prices = {99, 99, 99, 99, 99, 99, 99, 99, 99, 99}; 11 | int[] prices = new int[10]; // 声明一个整型数组,数组大小为10 12 | Arrays.fill(prices, 99); // 给整型数组的每个元素全部填写99 13 | for (int price : prices) { // 循环遍历并打印整型数组的所有元素数值 14 | System.out.println("price = "+price); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter14/chapter14.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /chapter15/chapter15.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/ChickenFinal.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //定义一个鸡类,它内部定义了终态属性和终态方法 4 | public class ChickenFinal { 5 | 6 | // 定义一个名称属性 7 | public String name; 8 | // 定义一个性别属性 9 | public int sex; 10 | 11 | // 定义一个叫唤方法 12 | public void call() { 13 | System.out.println("半夜鸡叫"); 14 | } 15 | 16 | // 以下利用final修饰成员属性和成员方法 17 | public final int MALE = 0; // 雄性 18 | public final int FEMALE = 1; // 雌性 19 | 20 | // 定义一个能否游泳的方法 21 | public final boolean canSwim() { 22 | return false; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /chapter17/src/com/database/Utils.java: -------------------------------------------------------------------------------- 1 | package com.database; 2 | 3 | import java.net.URL; 4 | 5 | public class Utils { 6 | 7 | // 获取当前程序的本地路径。内部兼容了是否打成jar包的两种情况 8 | public static String getClassPath() { 9 | String class_path; 10 | URL url = Utils.class.getResource("/"); // 获取class文件的根目录 11 | if (url != null) { 12 | // class文件没被打成jar包时,采用下面办法 13 | class_path = url.getFile(); 14 | } else { 15 | // class文件被打进jar包之时,采用下面办法。同时要把配置文件放到jar包的同级目录 16 | class_path = System.getProperty("user.dir"); 17 | } 18 | return class_path; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chapter03/src/com/control/array/ColonErgodic.java: -------------------------------------------------------------------------------- 1 | package com.control.array; 2 | 3 | //演示如何利用冒号简化数组元素的遍历操作 4 | public class ColonErgodic { 5 | 6 | public static void main(String[] args) { 7 | int[] numbers = { 2, 3, 5, 7 }; 8 | // for (int i = 0; i < numbers.length; i++) { 9 | // int number = numbers[i]; // 获取下标为i的元素,并赋值给名为number的变量 10 | // System.out.println("number = " + number); 11 | // } 12 | // 在for循环中,可以利用“变量类型 变量名称 : 数组名称”的形式,直接把数组元素赋值给该变量 13 | for (int number : numbers) { 14 | System.out.println("number = " + number); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/TestChicken.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //演示类的多态性 4 | public class TestChicken { 5 | 6 | public static void main(String[] args) { 7 | Chicken chicken = new Cock(); // 鸡类的实例变成了一只公鸡 8 | chicken.call(); // 此时鸡类的叫声就变为公鸡的叫声 9 | chicken = new Hen(); // 鸡类的实例变成了一只母鸡 10 | chicken.call(); // 此时鸡类的叫声就变为母鸡的叫声 11 | 12 | call(new Cock()); // 公鸡叫 13 | call(new Hen()); // 母鸡叫 14 | } 15 | 16 | // 定义一个叫唤方法,传入什么鸡,就让什么鸡叫 17 | private static void call(Chicken chicken) { 18 | chicken.call(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Behavior.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义一个接口。接口主要声明一些特定的行为方法 4 | public interface Behavior { 5 | // 注意,接口内部的方法默认为抽象方法,所以不必添加abstract前缀 6 | // abstract public void fly(); // 这里的abstract可加可不加 7 | public void fly(); // 声明了一个抽象的飞翔方法 8 | public void swim(); // 声明了一个抽象的游泳方法 9 | public void run(); // 声明了一个抽象的奔跑方法 10 | 11 | // 接口内部的属性默认都是终态属性,所以不必添加final前缀 12 | public String TAG = "动物世界"; 13 | // public final String TAG = "动物世界"; // 这里的final可加可不加 14 | 15 | // 接口不允许定义构造方法。在Java8以前,接口内部的所有方法都必须是抽象方法 16 | 17 | } 18 | -------------------------------------------------------------------------------- /chapter09/src/com/collect/algorithm/SortBubble.java: -------------------------------------------------------------------------------- 1 | package com.collect.algorithm; 2 | 3 | //冒泡排序的算法实现 4 | public class SortBubble implements SortInterface { 5 | 6 | // 以下的sort方法实现了冒泡排序算法的升序排列 7 | @Override 8 | public void sort(Comparable[] array) { 9 | for (int i = 1; i < array.length; i++) { // 假设数组长度为n,则需要n-1个循环 10 | for (int j = 0; j < array.length - i; j++) { // 每个循环都把最大的元素挪到本区间的末尾 11 | if (array[j].compareTo(array[j + 1]) > 0) { // 前一个元素比后一个元素要大 12 | swap(array, j, j + 1); // 交换两个数组元素,也就是把更大的元素往后挪 13 | } 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter14/src/com/javafx/NumberField.java: -------------------------------------------------------------------------------- 1 | package com.javafx; 2 | 3 | import javafx.scene.control.TextField; 4 | 5 | //自定义数字输入框。只允许输入0到9,以及小数点 6 | public class NumberField extends TextField { 7 | 8 | @Override 9 | public void replaceText(int start, int end, String text) { 10 | if (text.matches("[0-9|.]")) { // 字符串由数字与小数点组成 11 | super.replaceText(start, end, text); 12 | } 13 | } 14 | 15 | @Override 16 | public void replaceSelection(String text) { 17 | if (text.matches("[0-9|.]")) { // 字符串由数字与小数点组成 18 | super.replaceSelection(text); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter16/src/com/network/DateUtil.java: -------------------------------------------------------------------------------- 1 | package com.network; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | public class DateUtil { 7 | 8 | // 获取当前时间的编号 9 | public static String getTimeId() { 10 | Date date = new Date(); 11 | SimpleDateFormat sdf = new SimpleDateFormat("HHmmss"); 12 | return sdf.format(date); 13 | } 14 | 15 | // 获取当前的日期时间 16 | public static String getNowTime() { 17 | Date date = new Date(); 18 | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 19 | return sdf.format(date); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /chapter03/src/com/control/Jitutonglong.java: -------------------------------------------------------------------------------- 1 | package com.control; 2 | 3 | //演示“鸡兔同笼”问题的解题过程 4 | public class Jitutonglong { 5 | 6 | public static void main(String[] arg) { 7 | // 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 8 | int chick, rabbit; // chick表示鸡的数量,rabbit表示兔子的数量 9 | int sum = 35; // 鸡和兔子加起来一共35只 10 | for (chick=0, rabbit=0; chick <= sum; chick++) { // 利用穷举法逐个尝试可能的鸡兔组合 11 | rabbit = sum - chick; // 计算兔子的数量 12 | if (chick * 2 + rabbit * 4 == 94) { // 满足鸡兔同笼的问题条件,则结束循环 13 | break; 14 | } 15 | } 16 | System.out.println("鸡的数量为" + chick + ",兔子的数量为" + rabbit); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/WhileLoop.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示while语句的用法 6 | public class WhileLoop { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("长夜漫漫,无心睡眠,请给他设定一个睡醒的年限"); 10 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 11 | int limit = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 12 | int year = 0; 13 | while (year < limit) { // 当条件满足时,在循环内部持续处理 14 | System.out.println("已经过去的年份:" + year); 15 | year++; 16 | } 17 | System.out.println("他足足睡了这么多年:" + year); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter04/src/com/method/function/Simple.java: -------------------------------------------------------------------------------- 1 | package com.method.function; 2 | 3 | //说明main方法的格式定义 4 | public class Simple { 5 | 6 | // 方法的定义格式为:“访问权限 可选的static 返回值的数据类型 方法名称(参数类型 参数名称)” 7 | // 其中多个参数之间以逗号分隔,如“参数1类型 参数1名称, 参数2类型 参数2名称” 8 | // 如果该方法无需返回任何数值,则返回值的数据类型填void 9 | public static void main(String[] args) { // String[]表示字符串数组 10 | if (args.length == 0) { 11 | System.out.println("您没有输入任何参数"); 12 | } 13 | for (int i=0; i 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/WhileLoop2.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示do-while的用法 6 | public class WhileLoop2 { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("长夜漫漫,无心睡眠,请给他设定一个睡醒的年限"); 10 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 11 | int limit = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 12 | int year = 0; 13 | do { // 开始循环处理 14 | System.out.println("已经过去的年份:" + year); 15 | year++; 16 | } while (year < limit); // 当条件满足时,在循环内部持续处理 17 | System.out.println("他足足睡了这么多年:" + year); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter08/src/com/special/singleton/SingletonHungry.java: -------------------------------------------------------------------------------- 1 | package com.special.singleton; 2 | 3 | //饿汉方式实现单例模式。在程序启动时就创建实例 4 | public class SingletonHungry { 5 | private static int count = 0; // 创建实例的次数 6 | // 声明一个当前类的实例。在程序启动之后,会自动给类的静态属性赋初始值 7 | private static final SingletonHungry instance = new SingletonHungry(); 8 | 9 | // 构造方法。每调用一次构造方法,实例的创建次数就加一 10 | private SingletonHungry() { 11 | count++; 12 | } 13 | 14 | // 获取当前类的实例 15 | public static SingletonHungry getInstance() { 16 | return instance; 17 | } 18 | 19 | // 获取实例的创建次数 20 | public int getCount() { 21 | return count; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chapter16/chapter16.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /chapter17/chapter17.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/Condition.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示if语句的用法 6 | public class Condition { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("凉风有信,秋月无边。打二字"); 10 | System.out.println("获取“凉风有信”的谜底请按1,获取“秋月无边”的谜底请按2"); 11 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 12 | int seq = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 13 | if (seq == 1) { // 按1时打印“凉风有信”的谜底 14 | System.out.println("凉风有信的谜底是“讽”"); 15 | } 16 | if (seq == 2) { // 按2时打印“秋月无边”的谜底 17 | System.out.println("秋月无边的谜底是“二”"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/Condition3.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示else语句的用法 6 | public class Condition3 { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("凉风有信,秋月无边。打二字"); 10 | System.out.println("获取“凉风有信”的谜底请按1,获取“秋月无边”的谜底请按2"); 11 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 12 | int seq = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 13 | if (seq == 1) { // 条件式子为真时,进入if分支处理 14 | System.out.println("凉风有信的谜底是“讽”"); 15 | } else { // 否则(条件式子为假),进入else分支处理 16 | System.out.println("秋月无边的谜底是“二”"); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter08/src/com/special/inner/SeasonCn.java: -------------------------------------------------------------------------------- 1 | package com.special.inner; 2 | 3 | //演示枚举类型的扩展定义 4 | public enum SeasonCn { 5 | // 在定义枚举变量的同时,调用该枚举变量的构造方法 6 | SPRING(1, "春天"), SUMMER(2, "夏天"), AUTUMN(3, "秋天"), WINTER(4, "冬天"); 7 | 8 | private int value; // 季节的数字序号 9 | private String name; // 季节的中文名称 10 | 11 | // 在构造方法中传入该季节的阿拉伯数字和中文名称 12 | private SeasonCn(int value, String name) { 13 | this.value = value; 14 | this.name = name; 15 | } 16 | 17 | // 获取季节的数字序号 18 | public int getValue() { 19 | return this.value; 20 | } 21 | 22 | // 获取季节的中文名称 23 | public String getName() { 24 | return this.name; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Frog.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义一个实现了接口Behavior和Behavior2的蛙类。类只能继承一个,但接口可以实现多个 4 | public class Frog implements Behavior, Behavior2 { 5 | 6 | // 实现了Behavior2接口的jump方法 7 | @Override 8 | public void jump() { 9 | System.out.println("青蛙跳跃的技能叫做“蛙跳”"); 10 | } 11 | 12 | // 实现了Behavior接口的fly方法。因为青蛙不会飞,所以fly方法留空 13 | @Override 14 | public void fly() {} 15 | 16 | // 实现了Behavior接口的swim方法 17 | @Override 18 | public void swim() { 19 | System.out.println("青蛙游泳的技能叫做“蛙泳”"); 20 | } 21 | 22 | // 实现了Behavior接口的run方法。因为青蛙不会跑,所以fly方法留空 23 | @Override 24 | public void run() {} 25 | 26 | } 27 | -------------------------------------------------------------------------------- /chapter08/src/com/special/behavior/Goose.java: -------------------------------------------------------------------------------- 1 | package com.special.behavior; 2 | 3 | //定义一个实现了接口Behavior的鹅类。注意鹅类需要实现Behavior接口的所有抽象方法 4 | public class Goose extends Bird implements Behavior { 5 | 6 | public Goose(String name, int sexType) { 7 | super(name, sexType); 8 | } 9 | 10 | // 实现了接口的fly方法 11 | @Override 12 | public void fly() { 13 | System.out.println("鹅飞不高,也飞不远。"); 14 | } 15 | 16 | // 实现了接口的swim方法 17 | @Override 18 | public void swim() { 19 | System.out.println("鹅,鹅,鹅,曲项向天歌。白毛浮绿水,红掌拨清波。"); 20 | } 21 | 22 | // 实现了接口的run方法 23 | @Override 24 | public void run() { 25 | System.out.println("槛外萧声轻荡漾,沙间鹅步满蹒跚。"); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /chapter07/src/com/object/polymorphic/TestFinal.java: -------------------------------------------------------------------------------- 1 | package com.object.polymorphic; 2 | 3 | //演示终类、终属性、终方法的用法 4 | public class TestFinal { 5 | 6 | public static void main(String[] args) { 7 | Chick chick = new Chick(); // 小鸡类是个终类,它不能被其它类继承 8 | chick.call(); 9 | ChickenFinal chicken = new ChickenFinal(); // 创建一个鸡类的实例 10 | // ChickenFinal类的MALE属性是个终态属性,首次初始化后就不能再做修改 11 | System.out.println("MALE=" + chicken.MALE); 12 | // ChickenFinal类的FEMALE属性是个终态属性,首次初始化后就不能再做修改 13 | System.out.println("FEMALE=" + chicken.FEMALE); 14 | // ChickenFinal类的canSwim方法是个终态方法,子类不能重写该方法 15 | System.out.println("Chicken canSwim=" + chicken.canSwim()); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter07/src/com/object/inherit/DuckProtected.java: -------------------------------------------------------------------------------- 1 | package com.object.inherit; 2 | 3 | // 演示关键字protected的用法 4 | public class DuckProtected extends Bird { 5 | 6 | public DuckProtected(String name, int sex) { 7 | super(name, sex, "嘎嘎"); 8 | } 9 | 10 | public void setSexType(int sexType) { 11 | super.setSexType(sexType); 12 | // 若想对父类的属性直接赋值,又不想对外开放该属性,可将父类的属性从private改为protected 13 | // 被protected修饰的成员,表示受保护,它允许子类访问,但不允许外部访问。 14 | // 倘若父类的属性被protected修饰,则子类可以直接读写该属性; 15 | // 倘若父类的方法被protected修饰,则子类可以直接读写该方法; 16 | // 所谓读方法,就是方法的调用操作;所谓写方法,就是方法的重载操作。 17 | sexName = (sexType == 0) ? "公" : "母"; 18 | // super.sexName = (sexType==0) ? "公" : "母"; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /chapter08/src/com/special/singleton/SingletonNest.java: -------------------------------------------------------------------------------- 1 | package com.special.singleton; 2 | 3 | //嵌套方式实现单例模式。在SingletonHolder类首次加载时创建实例 4 | public class SingletonNest { 5 | private static int count = 0; // 创建实例的次数 6 | 7 | // 定义一个嵌套类,并在嵌套类的内部声明当前类的实例 8 | private static class SingletonHolder { 9 | private static SingletonNest instance = new SingletonNest(); // 创建一个外层类的实例 10 | } 11 | 12 | // 构造方法。每调用一次构造方法,实例的创建次数就加一 13 | private SingletonNest() { 14 | count++; 15 | } 16 | 17 | // 获取当前类的实例 18 | public static SingletonNest getInstance() { 19 | return SingletonHolder.instance; 20 | } 21 | 22 | // 获取实例的创建次数 23 | public int getCount() { 24 | return count; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter03/src/com/control/Feibonaqi.java: -------------------------------------------------------------------------------- 1 | package com.control; 2 | 3 | // 演示利用数组求解斐波那契数列 4 | public class Feibonaqi { 5 | 6 | public static void main(String[] args) { 7 | int[] rabbitNumbers; // 声明一个兔子数量(多少对)的数组变量 8 | rabbitNumbers = new int[12]; // 一年有12个月,故兔子数组大小为12 9 | // 循环计算兔子数组在每个月的兔子对数 10 | for (int i = 0; i < rabbitNumbers.length; i++) { 11 | if (i < 2) { // 数列的头两个元素都是1 12 | rabbitNumbers[i] = 1; 13 | } else { // 从第三个元素开始,每个元素都等于它的前面两个元素之和 14 | rabbitNumbers[i] = rabbitNumbers[i - 2] + rabbitNumbers[i - 1]; 15 | } 16 | int month = i + 1; 17 | // 打印当前的月份和兔子对数 18 | System.out.println("第" + month + "个月,兔子对数=" + rabbitNumbers[i]); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter08/src/com/special/singleton/SingletonLazy.java: -------------------------------------------------------------------------------- 1 | package com.special.singleton; 2 | 3 | //懒汉方式实现单例模式。在调用getInstance方法时才创建实例 4 | public class SingletonLazy { 5 | private static int count = 0; // 创建实例的次数 6 | private static SingletonLazy instance; // 声明一个当前类的实例 7 | 8 | // 构造方法。每调用一次构造方法,实例的创建次数就加一 9 | private SingletonLazy() { 10 | count++; 11 | } 12 | 13 | // 获取当前类的实例 14 | public static SingletonLazy getInstance() { 15 | // 第一次调用getInstance方式时,instance变量是空的,需要给它创建新实例 16 | if (instance == null) { 17 | instance = new SingletonLazy(); // 创建当前类的实例 18 | } 19 | return instance; 20 | } 21 | 22 | // 获取实例的创建次数 23 | public int getCount() { 24 | return count; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter13/src/com/swing/window/TestFrame.java: -------------------------------------------------------------------------------- 1 | package com.swing.window; 2 | 3 | import javax.swing.JFrame; 4 | 5 | //演示框架的用法 6 | public class TestFrame { 7 | 8 | public static void main(String[] args) { 9 | JFrame frame = new JFrame("测试框架的窗口"); // 创建一个窗口对象 10 | frame.setSize(400, 200); // 必须设置宽高,否则没有窗体 11 | //frame.setTitle("222"); // 设置窗口标题,否则窗口无标题 12 | frame.setLocationRelativeTo(null);// 将窗口居中。若无该方法,窗口将位于屏幕左上角 13 | //frame.setResizable(false); // 禁止调整窗口大小。默认允许调整窗口尺寸 14 | //frame.setBackground(Color.GREEN); // JFrame不能直接设置背景色 15 | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认的关闭操作:退出程序 16 | frame.setVisible(true); // 必须设置为true,否则看不见 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter02/src/com/arithmetic/numerical/Prefix.java: -------------------------------------------------------------------------------- 1 | package com.arithmetic.numerical; 2 | 3 | //演示数字的前缀,主要是标明该数字的归属进制 4 | public class Prefix { 5 | 6 | public static void main(String[] args) { 7 | int binary = 0b11; // 二进制数,0b也可以写成0B 8 | System.out.println("binary=" + binary); 9 | int octonary = 011; // 以0开头,后面非bB非xX的就是八进制数 10 | System.out.println("octonary=" + octonary); 11 | int hexadecimal = 0x11; // 十六进制数,0x也可以写成0X 12 | System.out.println("hexadecimal=" + hexadecimal); 13 | int hexLetter = 0xff; // 十六进制数不区分大小写,如ff也可以写成FF 14 | System.out.println("hexadecimal=" + hexLetter); 15 | int decimal = 11; // 没有任何前缀,则默认为十进制数 16 | System.out.println("decimal=" + decimal); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/ForLoop2.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示for语句内部break-continue的用法 6 | public class ForLoop2 { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("长夜漫漫,无心睡眠,请给他设定一个睡醒的年限"); 10 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 11 | int limit = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 12 | for (int year = 0;; year++) { 13 | System.out.println("已经过去的年份:" + year); 14 | if (year >= limit) { // 这里判断能否跳出循环 15 | System.out.println("他足足睡了这么多年:" + year); 16 | break; // 跳出循环。即跳到for循环的右花括号之后 17 | } else { 18 | continue; // 继续下一次循环。此时先执行year++,再执行循环内部语句 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter07/src/com/object/account/TestAccount.java: -------------------------------------------------------------------------------- 1 | package com.object.account; 2 | 3 | // 演示各种账户类的使用 4 | public class TestAccount { 5 | 6 | public static void main(String[] args) { 7 | testBankAccount(); // 演示银行账户的操作 8 | } 9 | 10 | // 演示银行账户的操作 11 | private static void testBankAccount() { 12 | BankAccount bank = new BankAccount(); // 创建一个银行账户 13 | bank.saveCurrent(5000); // 活期账户存入5000元 14 | bank.saveDeposit(6, 5000); // 存入6个月定期的5000元 15 | System.out.println("第一次存款操作之后,"+bank.toString()); 16 | bank.takeCurrent(2000); // 活期账户取出2000元 17 | bank.takeDeposit(6); // 取出6个月定期存款 18 | bank.saveDeposit(12, 5000); // 存入12个月定期的5000元 19 | System.out.println("第二次存款操作之后,"+bank.toString()); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /chapter16/src/com/network/im_client/friend_list.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/Multipath.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示“else if”的用法 6 | public class Multipath { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("凉风有信,秋月无边。打二字"); 10 | System.out.println("获取“凉风有信”的谜底请按1,获取“秋月无边”的谜底请按2"); 11 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 12 | int seq = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 13 | if (seq == 1) { // 条件式子1为真时,进入第一个if分支处理 14 | System.out.println("凉风有信的谜底是“讽”"); 15 | } else if (seq == 2) { // 否则的话,继续判断条件式子2为真时,进入第二个if分支处理 16 | System.out.println("秋月无边的谜底是“二”"); 17 | } else { // 否则(前面的判断条件都不满足),进入else分支处理 18 | System.out.println("您的按键有误"); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter13/src/com/swing/window/TestPanel.java: -------------------------------------------------------------------------------- 1 | package com.swing.window; 2 | 3 | import java.awt.Color; 4 | 5 | import javax.swing.JFrame; 6 | import javax.swing.JPanel; 7 | 8 | //演示面板的用法 9 | public class TestPanel { 10 | 11 | public static void main(String[] args) { 12 | JFrame frame = new JFrame("测试面板的窗口"); // 创建一个窗口对象 13 | frame.setSize(400, 200); // 必须设置宽高,否则没有窗体 14 | frame.setLocationRelativeTo(null);// 将窗口居中。若无该方法,窗口将位于屏幕左上角 15 | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认的关闭操作:退出程序 16 | 17 | JPanel panel = new JPanel(); // 创建一个面板 18 | panel.setBackground(Color.GREEN); // 设置面板的背景 19 | frame.add(panel); // 在窗口上添加面板 20 | 21 | frame.setVisible(true); // 必须设置为true,否则看不见 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /chapter17/src/com/database/autocode/Student.java: -------------------------------------------------------------------------------- 1 | package com.database.autocode; 2 | 3 | import java.util.Date; 4 | 5 | //学生信息表 6 | public class Student { 7 | private int xuehao; // 学号 8 | private String name; // 姓名 9 | private Date birthday; // 生日 10 | 11 | public void setXuehao(int xuehao) { 12 | this.xuehao = xuehao; 13 | } 14 | 15 | public int getXuehao() { 16 | return this.xuehao; 17 | } 18 | 19 | public void setName(String name) { 20 | this.name = name; 21 | } 22 | 23 | public String getName() { 24 | return this.name; 25 | } 26 | 27 | public void setBirthday(Date birthday) { 28 | this.birthday = birthday; 29 | } 30 | 31 | public Date getBirthday() { 32 | return this.birthday; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/WhileLoop3.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示while语句内部break-continue的用法 6 | public class WhileLoop3 { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("长夜漫漫,无心睡眠,请给他设定一个睡醒的年限"); 10 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 11 | int limit = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 12 | int year = 0; 13 | while (true) { // 当条件满足时,在循环内部持续处理 14 | System.out.println("已经过去的年份:" + year); 15 | if (year < limit) { // 这里判断能否跳出循环 16 | year++; 17 | continue; // 继续下一次循环 18 | } else { 19 | break; // 跳出循环。即跳到while循环的右花括号之后 20 | } 21 | } 22 | System.out.println("他足足睡了这么多年:" + year); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chapter03/src/com/control/SunziDingli.java: -------------------------------------------------------------------------------- 1 | package com.control; 2 | 3 | import java.util.Arrays; 4 | 5 | //演示孙子定理的求解过程(西方称作“中国剩余定理”) 6 | public class SunziDingli { 7 | 8 | public static void main(String[] arg) { 9 | // 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何? 10 | int count = 0; // 数组的容量计数 11 | int[] numbers = new int[0]; // 符合条件的整数都放在这个数组 12 | for (int i = 1; i < 1000; i++) { // 查找一千之内所有符合要求的整数 13 | if (i%3==2 && i%5==3 && i%7==2) { // 找到了一个满足条件的整数 14 | count++; // 计数加一 15 | numbers = Arrays.copyOf(numbers, count); // 数组容量增大一个 16 | numbers[count-1] = i; // 往数组末尾填入刚才找到的整数 17 | } 18 | } 19 | for (int number : numbers) { // 遍历并打印所有找到的整数解 20 | System.out.println("符合孙子定理的整数number=" + number); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /chapter07/src/com/object/inherit/DuckPublic.java: -------------------------------------------------------------------------------- 1 | package com.object.inherit; 2 | 3 | //演示同名的父类属性、子类属性、输入参数三者的优先级顺序 4 | public class DuckPublic extends Bird { 5 | 6 | public DuckPublic(String name, int sex) { 7 | super(name, sex, "嘎嘎"); 8 | } 9 | 10 | public void setSexType(int sexType) { 11 | super.setSexType(sexType); 12 | // 若想对父类的属性直接赋值,则考虑把父类的属性从private改为public 13 | super.sexName = (sexType == 0) ? "公" : "母"; 14 | // 父类和子类拥有同名属性,则不带前缀的属性字段默认为子类属性 15 | // sexName = (sexType==0) ? "公" : "母"; 16 | // this.sexName = (sexType==0) ? "公" : "母"; 17 | } 18 | 19 | private String sexName; // 性别名称 20 | 21 | public void setSexName(String sexName) { 22 | // 输入参数与类的属性同名,则不带前缀的参数字段默认为输入参数 23 | this.sexName = sexName; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /chapter01/src/com/donghan/weijun/yexian/Yecheng.java: -------------------------------------------------------------------------------- 1 | package com.donghan.weijun.yexian; // 东汉帝国魏郡邺县 2 | 3 | // 此乃魏国首都邺城 4 | public class Yecheng { 5 | 6 | public static void tongquetai() { 7 | System.out.println("这里是铜雀台。"); 8 | } 9 | 10 | public static void jinhutai() { 11 | System.out.println("这里是金虎台。"); 12 | } 13 | 14 | public static void bingjingtai() { 15 | System.out.println("这里是冰井台。"); 16 | } 17 | 18 | public static void main(String[] args) { 19 | // System.out.print("欢迎来到魏国的都城——邺城。"); 20 | // System.out.print("这里是邺城的正南门——凤阳门。"); 21 | System.out.println("欢迎来到魏国的都城——邺城。"); 22 | System.out.println("这里是邺城的正南门——凤阳门。"); 23 | tongquetai(); // 参观朱雀台 24 | jinhutai(); // 参观金虎台 25 | bingjingtai(); // 参观冰井台 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /chapter02/src/com/arithmetic/math/Angle.java: -------------------------------------------------------------------------------- 1 | package com.arithmetic.math; 2 | 3 | //演示数学函数库中的三角函数用法 4 | public class Angle { 5 | 6 | public static void main(String[] args) { 7 | double angle = 60; // 三角函数的角度 8 | // 弧度=该角度对应的弧长/半径。数学函数库Math专门提供了常量PI表示圆周率π的粗略值 9 | double radian = angle * Math.PI / 180; 10 | double sin = Math.sin(radian); // 求某弧度的正弦。求反正弦要调用asin方法 11 | System.out.println("sin=" + sin); 12 | double cos = Math.cos(radian); // 求某弧度的余弦。求反余弦要调用acos方法 13 | System.out.println("cos=" + cos); 14 | double tan = Math.tan(radian); // 求某弧度的正切。求反正切要调用atan方法 15 | System.out.println("tan=" + tan); 16 | // 求某弧度的余切。Math库未提供求余切值的方法,其实余切值就是正切值的倒数 17 | double ctan = 1.0 / tan; 18 | System.out.println("ctan=" + ctan); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /chapter16/src/com/network/socket/TestTcpClient.java: -------------------------------------------------------------------------------- 1 | package com.network.socket; 2 | 3 | //演示Socket客户端的运行(TCP协议的可靠连接) 4 | public class TestTcpClient { 5 | 6 | public static void main(String[] args) { 7 | //testSendText(); // 发送文本消息 8 | testSendFile(); 9 | } 10 | 11 | // 发送文本消息 12 | private static void testSendText() { 13 | SendText task = new SendText(); // 创建一个文本发送任务 14 | new Thread(task).start(); // 为文本发送任务开启分线程 15 | task.sendText("你好呀"); // 命令该线程发送文本消息 16 | task.sendText("Hello World"); // 命令该线程发送文本消息 17 | } 18 | 19 | // 发送本地文件 20 | private static void testSendFile() { 21 | new Thread(new SendFile("E:/bliss.jpg")).start(); // 为文件发送任务开启分线程 22 | new Thread(new SendFile("E:/qq_qrcode.png")).start(); // 为文件发送任务开启分线程 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /chapter02/src/com/arithmetic/math/Science.java: -------------------------------------------------------------------------------- 1 | package com.arithmetic.math; 2 | 3 | //演示数学函数库中的科学函数用法 4 | public class Science { 5 | 6 | public static void main(String[] args) { 7 | double nine = 9; 8 | double sqrt = Math.sqrt(nine); // 开平方。对应数学符号√ ̄ 9 | System.out.println("sqrt=" + sqrt); 10 | // 求n次方。pow的第一个参数为幂运算的底数,第二个参数为幂运算的指数 11 | double pow = Math.pow(nine, 2); 12 | System.out.println("pow=" + pow); 13 | 14 | double five = 5; 15 | double exp = Math.exp(five); // 求自然常数e的n次方 16 | System.out.println("exp=" + exp); 17 | double log = Math.log(exp); // 求自然对数,为exp方法的逆运算。对应数学函数lnN 18 | System.out.println("log=" + log); 19 | double log10 = Math.log10(100); // 求底数为10的对数。对应数学函数logN 20 | System.out.println("log10=" + log10); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter08/src/com/special/inner/Tree.java: -------------------------------------------------------------------------------- 1 | package com.special.inner; 2 | 3 | //演示内部类的简单定义。这是一个树木类 4 | public class Tree { 5 | private String tree_name; // 树木名称 6 | 7 | public Tree(String tree_name) { 8 | this.tree_name = tree_name; 9 | } 10 | 11 | public void sprout() { 12 | System.out.println(tree_name + "发芽啦"); 13 | // 外部类访问它的内部类,就像访问其它类一样,都要先创建类的实例,再访问它的成员 14 | Flower flower = new Flower("花朵"); 15 | flower.bloom(); // 调用花儿对象的开花方法 16 | } 17 | 18 | // Flower类位于Tree类的内部,它是个内部类 19 | public class Flower { 20 | private String flower_name; // 花朵名称 21 | 22 | public Flower(String flower_name) { 23 | this.flower_name = flower_name; 24 | } 25 | 26 | public void bloom() { 27 | System.out.println(flower_name + "开花啦"); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /chapter03/src/com/control/array/OneDimensional.java: -------------------------------------------------------------------------------- 1 | package com.control.array; 2 | 3 | // 演示一维数组的简单用法 4 | public class OneDimensional { 5 | 6 | public static void main(String[] args) { 7 | // 以下是声明数组的第一种形式:“变量类型 数组名称[]” 8 | int numbers[]; 9 | // 以下是分配数组空间的第一种形式:在方括号内填入数字,表示数组有多大 10 | numbers = new int[4]; 11 | // 数组名称后面的“[数字]”,就是数组元素的下标,表示当前操作的是第几个数组元素 12 | numbers[0] = 2; // 给下标为0的数组元素赋值,下标0对应日常生活中的第一个 13 | numbers[1] = 3; // 给下标为1的数组元素赋值,下标1对应日常生活中的第二个 14 | numbers[2] = 5; // 给下标为2的数组元素赋值,下标2对应日常生活中的第三个 15 | numbers[3] = 7; // 给下标为3的数组元素赋值,下标3对应日常生活中的第四个 16 | // 下面通过循环语句依次读出数组中的所有元素,“数组名称.length”表示获取该数组的长度(数组大小) 17 | for (int i = 0; i < numbers.length; i++) { 18 | System.out.println("number = " + numbers[i]); // 打印下标为i的数组元素 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter03/src/com/control/process/ForLoop3.java: -------------------------------------------------------------------------------- 1 | package com.control.process; 2 | 3 | import java.util.Scanner; 4 | 5 | // 演示for语句在圆括号内全部留空的写法 6 | public class ForLoop3 { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("长夜漫漫,无心睡眠,请给他设定一个睡醒的年限"); 10 | Scanner scan = new Scanner(System.in); // 从控制台接收输入文本 11 | int limit = scan.nextInt(); // nextInt方法表示接收一个整数,以回车键结尾 12 | int year = 0; // 把式子A挪到整个循环的前面 13 | for (;;) { // for语句后面的三个位置全部留空 14 | System.out.println("已经过去的年份:" + year); 15 | if (year >= limit) { // 这里判断能否跳出循环 16 | System.out.println("他足足睡了这么多年:" + year); 17 | break; // 跳出循环。即跳到for循环的右花括号之后 18 | } else { 19 | year++; // 把式子C挪到continue之前 20 | continue; // 继续下一次循环。此时先执行year++,再执行循环内部语句 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chapter11/src/com/io/huffman/TestHuffman.java: -------------------------------------------------------------------------------- 1 | package com.io.huffman; 2 | 3 | //演示如何利用哈夫曼算法来压缩文件 4 | public class TestHuffman { 5 | 6 | public static void main(String[] args) { 7 | testCompress(); // 测试文件压缩的过程 8 | testDecompress(); // 测试文件解压的过程 9 | } 10 | 11 | // 测试文件压缩的过程 12 | private static void testCompress() { 13 | // 创建压缩工具 14 | Compress compress = new Compress(); 15 | // 压缩文件 16 | compress.compress("E:/test/aaa.java", "E:/test/aaa.hfm"); 17 | System.out.println("Compress Done"); 18 | } 19 | 20 | // 测试文件解压的过程 21 | private static void testDecompress() { 22 | // 创建解压工具 23 | Decompress decompress = new Decompress(); 24 | // 解压已压缩的目标文件 25 | decompress.decompress("E:/test/aaa.hfm", "E:/test/aaa2.java"); 26 | System.out.println("Decompress Done"); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /chapter16/src/log4j.properties: -------------------------------------------------------------------------------- 1 | #日志的根配置,等号后面第一个是日志级别,其后的文字标签指定了输出位置,例如Console代表控制台、LogFile代表日志文件等等 2 | log4j.rootLogger=DEBUG,Console,LogFile 3 | 4 | #Console控制台的配置 5 | log4j.appender.Console=org.apache.log4j.ConsoleAppender 6 | log4j.appender.Console.layout=org.apache.log4j.PatternLayout 7 | #每行日志的格式定义。%d代表时间,%t代表线程名称,%-5p代表日志等级,%c代表当前类的完整路径,%m代表日志文本,%n代表换行符 8 | log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 9 | 10 | #LogFile日志文件的配置 11 | log4j.appender.LogFile=org.apache.log4j.DailyRollingFileAppender 12 | #日志文件的保存路径 13 | log4j.appender.LogFile.File=${WORKDIR}/http.log 14 | log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout 15 | log4j.appender.LogFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n 16 | #设置输出日志文件编码(可以避免中文乱码) 17 | log4j.appender.LogFile.Encoding=UTF-8 18 | -------------------------------------------------------------------------------- /chapter03/src/com/control/array/TwoDimensional2.java: -------------------------------------------------------------------------------- 1 | package com.control.array; 2 | 3 | //演示二维数组的初始化赋值 4 | public class TwoDimensional2 { 5 | 6 | public static void main(String[] args) { 7 | // 以下是声明二维数组的第二种形式:“变量类型[][] 数组名称” 8 | // 其中“变量类型[][]”构成了数组类型,例如int[][]被称作二维整型数组 9 | // 以下是分配二维数组空间的第二种形式: 10 | // 方括号内留空,然后紧跟花括号,花括号内部是以逗号分隔的几个一维数组 11 | double[][] triangle = new double[][] { new double[] { -2.0, 0.0 }, 12 | new double[] { 0.0, -1.0 }, new double[] { 2.0, 1.0 } }; 13 | // 通过循环语句依次读出数组中的所有元素。 “二维数组名称.length”表示获取该数组的行数 14 | for (int i = 0; i < triangle.length; i++) { 15 | // “triangle[i].length”表示获取该数组第i行的列数 16 | for (int j = 0; j < triangle[i].length; j++) { 17 | // 打印第i行第j列的数组元素 18 | System.out.println("triangle[" + i + "][" + j + "]=" + triangle[i][j]); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter10/src/com/addition/reflect/Chicken.java: -------------------------------------------------------------------------------- 1 | package com.addition.reflect; 2 | 3 | //定义一个鸡类 4 | public class Chicken { 5 | 6 | // 定义一个名称属性 7 | protected String name; 8 | // 定义一个性别属性 9 | protected int sex; 10 | 11 | // 定义一个叫唤方法 12 | public void call() { 13 | System.out.println("半夜鸡叫"); 14 | } 15 | 16 | // 以下利用final修饰成员属性和成员方法 17 | public final int MALE = 0; // 雄性 18 | public final int FEMALE = 1; // 雌性 19 | 20 | // 定义一个能否游泳的方法 21 | public final boolean canSwim() { 22 | return false; 23 | } 24 | 25 | private void setName(String name) { // 设置名称 26 | this.name = name; 27 | } 28 | 29 | private String getName() { // 获取名称 30 | return this.name; 31 | } 32 | 33 | private void setSex(int sex) { // 设置性别 34 | this.sex = sex; 35 | } 36 | 37 | private int getSex() { // 获取性别 38 | return this.sex; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /chapter14/src/com/javafx/loan/Main.java: -------------------------------------------------------------------------------- 1 | package com.javafx.loan; 2 | 3 | import javafx.application.Application; 4 | import javafx.fxml.FXMLLoader; 5 | import javafx.scene.Parent; 6 | import javafx.scene.Scene; 7 | import javafx.stage.Stage; 8 | 9 | //房贷计算器的程序入口(FXML布局控件) 10 | public class Main extends Application { 11 | 12 | @Override 13 | public void start(Stage stage) throws Exception { // 应用程序开始运行 14 | stage.setTitle("房贷计算器"); // 设置舞台的标题 15 | // 从FXML资源文件中加载程序的初始界面 16 | Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 17 | Scene scene = new Scene(root, 400, 180); // 创建一个场景 18 | stage.setScene(scene); // 设置舞台的场景 19 | stage.setResizable(false); // 设置舞台的尺寸是否允许变化 20 | stage.show(); // 显示舞台 21 | } 22 | 23 | public static void main(String[] args) { 24 | launch(args); // 启动JavaFX应用,接下来会跳到start方法 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /chapter15/src/com/concurrent/mouse/hit_mouse.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 10 |