From 8f5a63b7d46d308ff89ce322c15a45af45be1e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=95=E7=84=B6?= Date: Tue, 9 Aug 2022 09:52:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8D=95=E6=95=B4=E7=90=86=E4=BA=86ja?= =?UTF-8?q?va=E9=83=A8=E5=88=86=E7=9A=84=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Java面试原理 => JDK学习}/Arrays类.md | 0 .../Java云计算和微服务}/云计算和微服务简介.md | 0 Java基础教程/Java学习路线.md | 46 ++ .../Java工具教程}/2 idea教程.md | 0 .../Java工具教程}/maven教程/1 maven教程.md | 0 .../maven教程/image/2022-07-11-10-36-37.png | Bin .../maven教程/image/2022-07-11-11-40-25.png | Bin .../maven教程/image/2022-07-11-11-56-50.png | Bin .../maven教程/image/2022-07-11-13-20-18.png | Bin .../maven教程/project/project-maven/pom.xml | 0 .../project/project-maven/src/main/java/com/ykl/Demo.java | 0 .../project-maven/src/test/java/com/ykl/TestDemo.java | 0 .../Java性能优化}/性能优化简介.md | 0 Java基础教程/Java源代码/Lesson01/README.md | 3 + .../Lesson01/com/ykl}/Java01HelloWorld.java | 2 +- .../Lesson01/com/ykl/exceptions/ExceptionTest.java | 29 + .../Lesson01/com/ykl/innerclass/AnonymousClass.java | 28 + .../Java源代码}/Lesson02/.idea/.gitignore | 0 .../Java源代码/Lesson02/.idea}/basicLesson/pom.xml | 0 .../basicLesson/src/main/java/com/ykl/Application.java | 0 .../java/com/ykl/annotationtest/AnnotationTest.java | 0 .../src/main/java/com/ykl/annotationtest/Demo.java | 0 .../main/java/com/ykl/annotationtest/MyAnnotation.java | 0 .../main/java/com/ykl/eceptiontest/ExceptionTest.java | 0 .../Java源代码}/Lesson02/.idea/misc.xml | 0 .../Java源代码}/Lesson02/.idea/modules.xml | 0 .../Java源代码}/Lesson02/.idea/uiDesigner.xml | 0 .../Java源代码}/Lesson02/.idea/vcs.xml | 0 .../Lesson02/BasicLanguage/BasicLanguage.iml | 0 .../Lesson02/BasicLanguage/src/com/ykl/Demo5.java | 0 .../Lesson02/BasicLanguage/src/com/ykl/Demo6.java | 0 .../Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java | 0 .../Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java | 0 .../Java源代码/Lesson02}/Lesson03.iml | 0 Java基础教程/Java源代码/Lesson02/README.md | 3 + .../Java源代码/Lesson02}/demo01/demo01.iml | 0 .../Java源代码/Lesson02}/demo01/pom.xml | 0 .../Lesson02}/demo01/src/main/java/com/ykl/App01.java | 0 .../Lesson02}/demo01/src/main/java/com/ykl/App02.java | 0 .../Lesson02}/demo01/src/main/java/com/ykl/App03.java | 0 .../demo01/src/main/java/com/ykl/example01/Animal.java | 0 .../demo01/src/main/java/com/ykl/example01/Dog.java | 0 .../demo01/src/main/java/com/ykl/example01/Person.java | 0 .../demo01/src/main/java/com/ykl/example04/Outer.java | 0 .../Lesson02}/demo01/src/test/java/com/ykl/AppTest.java | 0 .../Java源代码/Lesson02}/web-project/pom.xml | 0 .../web-project/src/main/webapp/WEB-INF/web.xml | 0 .../Lesson02}/web-project/src/main/webapp/index.jsp | 0 .../Java网站开发}/DAO模式的理解.md | 0 .../Java网站开发}/JAVA中库的理解.md | 0 .../Java网站开发}/JAVA代码组织.md | 0 .../Java网站开发}/JSP代码作用.md | 0 .../Java网站开发}/JSP技术详解.md | 0 .../Java网站开发}/Lombok/Lombok.md | 0 .../Java网站开发}/computer.py | 0 .../Java网站开发}/java中@的作用.md | 0 .../Java网站开发}/jdbc标准范例.md | 0 .../media/033dc67bcd465edb89b52cc8d9bdd5c1.png | Bin .../media/0df06acb323561f7014fed6f60125206.jpeg | Bin .../media/4f52e7856884d1457ab7d1867caab247.jpeg | Bin .../media/896ddc649ace2c4d5b318d11c887ece9.jpeg | Bin .../Java网站开发}/关于JAVAEE非框架的理解.md | 0 .../Java网站开发}/关键字——transient.md | 0 .../Java网站开发}/移动自动测试工具appium.md | 0 .../Java网站开发}/简单的实验.md | 0 .../Java网站开发}/软件测试中的总结.md | 0 Java基础教程/Java语言基础/01 Java基础.md | 38 +- Java基础教程/Java语言基础/02 流程控制.md | 1 - .../Java语言基础/05 面向对象的类与对象.md | 297 ++++++++++ .../{05 面向对象.md => 06 面向对象的三大特征.md} | 153 +----- Java基础教程/Java语言基础/07 Java内部类.md | 13 - .../{06 接口和抽象类.md => 07 接口和抽象类.md} | 14 +- Java基础教程/Java语言基础/08 Java内部类.md | 517 ++++++++++++++++++ .../{08 Java反射.md => 09 Java反射.md} | 0 .../{09 Java泛型.md => 10 Java泛型.md} | 0 Java基础教程/Java语言基础/11 异常处理.md | 17 +- .../{10 Java注解.md => 12 Java注解.md} | 0 Java基础教程/Java语言基础/13 lambda表达式.md | 0 .../Java语言基础/image/2022-08-08-09-52-21.png | Bin 0 -> 127395 bytes Java基础教程/Java面试原理/03 关键字.md | 2 +- Java源代码/Lesson03/.idea/.gitignore | 10 - .../Lesson03/.idea/ConfPoetryConfig.xml | 13 - Java源代码/Lesson03/.idea/compiler.xml | 17 - Java源代码/Lesson03/.idea/encodings.xml | 7 - .../.idea/inspectionProfiles/Project_Default.xml | 33 -- Java源代码/Lesson03/.idea/jarRepositories.xml | 35 -- Java源代码/Lesson03/.idea/misc.xml | 18 - Java源代码/Lesson03/.idea/modules.xml | 8 - Java源代码/Lesson03/.idea/uiDesigner.xml | 124 ----- Java源代码/Lesson03/.idea/vcs.xml | 6 - Java源代码/lesson04/.idea/.gitignore | 10 - .../lesson04/.idea/ConfPoetryConfig.xml | 13 - Java源代码/lesson04/.idea/compiler.xml | 16 - Java源代码/lesson04/.idea/encodings.xml | 7 - .../.idea/inspectionProfiles/Project_Default.xml | 33 -- Java源代码/lesson04/.idea/jarRepositories.xml | 25 - Java源代码/lesson04/.idea/lesson04.iml | 9 - .../.idea/libraries/Maven__junit_junit_4_11.xml | 13 - .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 - Java源代码/lesson04/.idea/misc.xml | 11 - Java源代码/lesson04/.idea/modules.xml | 9 - Java源代码/lesson04/.idea/uiDesigner.xml | 124 ----- Java源代码/lesson04/.idea/vcs.xml | 6 - Junit/概述.md | 13 + 104 files changed, 988 insertions(+), 748 deletions(-) rename Java基础教程/{Java面试原理 => JDK学习}/Arrays类.md (100%) rename {Java云计算和微服务 => Java基础教程/Java云计算和微服务}/云计算和微服务简介.md (100%) create mode 100644 Java基础教程/Java学习路线.md rename {Java工具教程 => Java基础教程/Java工具教程}/2 idea教程.md (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/1 maven教程.md (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/image/2022-07-11-10-36-37.png (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/image/2022-07-11-11-40-25.png (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/image/2022-07-11-11-56-50.png (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/image/2022-07-11-13-20-18.png (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/project/project-maven/pom.xml (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/project/project-maven/src/main/java/com/ykl/Demo.java (100%) rename {Java工具教程 => Java基础教程/Java工具教程}/maven教程/project/project-maven/src/test/java/com/ykl/TestDemo.java (100%) rename {Java性能优化 => Java基础教程/Java性能优化}/性能优化简介.md (100%) create mode 100644 Java基础教程/Java源代码/Lesson01/README.md rename {Java源代码/Lesson01 => Java基础教程/Java源代码/Lesson01/com/ykl}/Java01HelloWorld.java (91%) create mode 100644 Java基础教程/Java源代码/Lesson01/com/ykl/exceptions/ExceptionTest.java create mode 100644 Java基础教程/Java源代码/Lesson01/com/ykl/innerclass/AnonymousClass.java rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/.idea/.gitignore (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/pom.xml (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/src/main/java/com/ykl/Application.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/src/main/java/com/ykl/annotationtest/AnnotationTest.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/src/main/java/com/ykl/annotationtest/Demo.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/src/main/java/com/ykl/annotationtest/MyAnnotation.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02/.idea}/basicLesson/src/main/java/com/ykl/eceptiontest/ExceptionTest.java (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/.idea/misc.xml (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/.idea/modules.xml (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/.idea/uiDesigner.xml (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/.idea/vcs.xml (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/BasicLanguage/BasicLanguage.iml (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/BasicLanguage/src/com/ykl/Demo5.java (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/BasicLanguage/src/com/ykl/Demo6.java (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java (100%) rename {Java源代码 => Java基础教程/Java源代码}/Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02}/Lesson03.iml (100%) create mode 100644 Java基础教程/Java源代码/Lesson02/README.md rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/demo01.iml (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/pom.xml (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/App01.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/App02.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/App03.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/example01/Animal.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/example01/Dog.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/example01/Person.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/main/java/com/ykl/example04/Outer.java (100%) rename {Java源代码/lesson04 => Java基础教程/Java源代码/Lesson02}/demo01/src/test/java/com/ykl/AppTest.java (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02}/web-project/pom.xml (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02}/web-project/src/main/webapp/WEB-INF/web.xml (100%) rename {Java源代码/Lesson03 => Java基础教程/Java源代码/Lesson02}/web-project/src/main/webapp/index.jsp (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/DAO模式的理解.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/JAVA中库的理解.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/JAVA代码组织.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/JSP代码作用.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/JSP技术详解.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/Lombok/Lombok.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/computer.py (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/java中@的作用.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/jdbc标准范例.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/media/033dc67bcd465edb89b52cc8d9bdd5c1.png (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/media/0df06acb323561f7014fed6f60125206.jpeg (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/media/4f52e7856884d1457ab7d1867caab247.jpeg (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/media/896ddc649ace2c4d5b318d11c887ece9.jpeg (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/关于JAVAEE非框架的理解.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/关键字——transient.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/移动自动测试工具appium.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/简单的实验.md (100%) rename {Java网站开发 => Java基础教程/Java网站开发}/软件测试中的总结.md (100%) create mode 100644 Java基础教程/Java语言基础/05 面向对象的类与对象.md rename Java基础教程/Java语言基础/{05 面向对象.md => 06 面向对象的三大特征.md} (67%) delete mode 100644 Java基础教程/Java语言基础/07 Java内部类.md rename Java基础教程/Java语言基础/{06 接口和抽象类.md => 07 接口和抽象类.md} (92%) create mode 100644 Java基础教程/Java语言基础/08 Java内部类.md rename Java基础教程/Java语言基础/{08 Java反射.md => 09 Java反射.md} (100%) rename Java基础教程/Java语言基础/{09 Java泛型.md => 10 Java泛型.md} (100%) rename Java基础教程/Java语言基础/{10 Java注解.md => 12 Java注解.md} (100%) create mode 100644 Java基础教程/Java语言基础/13 lambda表达式.md create mode 100644 Java基础教程/Java语言基础/image/2022-08-08-09-52-21.png delete mode 100644 Java源代码/Lesson03/.idea/.gitignore delete mode 100644 Java源代码/Lesson03/.idea/ConfPoetryConfig.xml delete mode 100644 Java源代码/Lesson03/.idea/compiler.xml delete mode 100644 Java源代码/Lesson03/.idea/encodings.xml delete mode 100644 Java源代码/Lesson03/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 Java源代码/Lesson03/.idea/jarRepositories.xml delete mode 100644 Java源代码/Lesson03/.idea/misc.xml delete mode 100644 Java源代码/Lesson03/.idea/modules.xml delete mode 100644 Java源代码/Lesson03/.idea/uiDesigner.xml delete mode 100644 Java源代码/Lesson03/.idea/vcs.xml delete mode 100644 Java源代码/lesson04/.idea/.gitignore delete mode 100644 Java源代码/lesson04/.idea/ConfPoetryConfig.xml delete mode 100644 Java源代码/lesson04/.idea/compiler.xml delete mode 100644 Java源代码/lesson04/.idea/encodings.xml delete mode 100644 Java源代码/lesson04/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 Java源代码/lesson04/.idea/jarRepositories.xml delete mode 100644 Java源代码/lesson04/.idea/lesson04.iml delete mode 100644 Java源代码/lesson04/.idea/libraries/Maven__junit_junit_4_11.xml delete mode 100644 Java源代码/lesson04/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml delete mode 100644 Java源代码/lesson04/.idea/misc.xml delete mode 100644 Java源代码/lesson04/.idea/modules.xml delete mode 100644 Java源代码/lesson04/.idea/uiDesigner.xml delete mode 100644 Java源代码/lesson04/.idea/vcs.xml create mode 100644 Junit/概述.md diff --git a/Java基础教程/Java面试原理/Arrays类.md b/Java基础教程/JDK学习/Arrays类.md similarity index 100% rename from Java基础教程/Java面试原理/Arrays类.md rename to Java基础教程/JDK学习/Arrays类.md diff --git a/Java云计算和微服务/云计算和微服务简介.md b/Java基础教程/Java云计算和微服务/云计算和微服务简介.md similarity index 100% rename from Java云计算和微服务/云计算和微服务简介.md rename to Java基础教程/Java云计算和微服务/云计算和微服务简介.md diff --git a/Java基础教程/Java学习路线.md b/Java基础教程/Java学习路线.md new file mode 100644 index 00000000..f990ec61 --- /dev/null +++ b/Java基础教程/Java学习路线.md @@ -0,0 +1,46 @@ +## Java学习路线 + +总共包括六个主要的部分。学完就能毕业啦。开始吧。 +* [ ] Java基础教程(Java的基本语法和使用及原理,晚上自学,第一周学完) + * [X] Java语言基础。语言语法。(分五个阶段完成把,当前第一阶段已经完成) + * [ ] Java高级操作。JDK IO操作/并发编程/网络编程 + * [ ] Javaweb开发。Servlet和JSP相关的老技术。知道就行 + * [ ] Java基本原理。JVM底层的原理和技术 + * [ ] Java架构模式。面向对象和设计模式 +* [ ] Java网站开发(JavaWeb相关的技术知识。) + * [ ] MySQL + * [ ] JDBC + * [ ] lombak + * [ ] mybatis +* [ ] Java工具教程(Java使用的关键工具,白天学习一下) + * [ ] maven教程 + * [ ] idea教程 +* [ ] Java框架教程(Spring全家桶,白天自学) + * [ ] Spring + * [ ] Springboot + * [ ] Spring MVC + * [ ] SpringCloud +* [ ] Java云计算和微服务 + * [ ] docker + * [ ] k8s + * [ ] servicemesh +* [ ] Java性能优化 + * [ ] 高可用 + * [ ] 双机架构 + * [ ] 异地多活 + * [ ] 高性能 + * [ ] 高性能缓存 + * [ ] PPC TPC + * [ ] 高并发 + * [ ] 分库分表 + * [ ] 消息队列 + * [ ] Java分布式基础 + * [ ] 负载均衡和调度 + * [ ] 分布式缓存 + * [ ] 分布式算法 + * [ ] 数据中间件 + * [ ] 数据库mysql + * [ ] redis + * [ ] mybatis + * [ ] 消息中间件 + * [ ] kfk消息队列 \ No newline at end of file diff --git a/Java工具教程/2 idea教程.md b/Java基础教程/Java工具教程/2 idea教程.md similarity index 100% rename from Java工具教程/2 idea教程.md rename to Java基础教程/Java工具教程/2 idea教程.md diff --git a/Java工具教程/maven教程/1 maven教程.md b/Java基础教程/Java工具教程/maven教程/1 maven教程.md similarity index 100% rename from Java工具教程/maven教程/1 maven教程.md rename to Java基础教程/Java工具教程/maven教程/1 maven教程.md diff --git a/Java工具教程/maven教程/image/2022-07-11-10-36-37.png b/Java基础教程/Java工具教程/maven教程/image/2022-07-11-10-36-37.png similarity index 100% rename from Java工具教程/maven教程/image/2022-07-11-10-36-37.png rename to Java基础教程/Java工具教程/maven教程/image/2022-07-11-10-36-37.png diff --git a/Java工具教程/maven教程/image/2022-07-11-11-40-25.png b/Java基础教程/Java工具教程/maven教程/image/2022-07-11-11-40-25.png similarity index 100% rename from Java工具教程/maven教程/image/2022-07-11-11-40-25.png rename to Java基础教程/Java工具教程/maven教程/image/2022-07-11-11-40-25.png diff --git a/Java工具教程/maven教程/image/2022-07-11-11-56-50.png b/Java基础教程/Java工具教程/maven教程/image/2022-07-11-11-56-50.png similarity index 100% rename from Java工具教程/maven教程/image/2022-07-11-11-56-50.png rename to Java基础教程/Java工具教程/maven教程/image/2022-07-11-11-56-50.png diff --git a/Java工具教程/maven教程/image/2022-07-11-13-20-18.png b/Java基础教程/Java工具教程/maven教程/image/2022-07-11-13-20-18.png similarity index 100% rename from Java工具教程/maven教程/image/2022-07-11-13-20-18.png rename to Java基础教程/Java工具教程/maven教程/image/2022-07-11-13-20-18.png diff --git a/Java工具教程/maven教程/project/project-maven/pom.xml b/Java基础教程/Java工具教程/maven教程/project/project-maven/pom.xml similarity index 100% rename from Java工具教程/maven教程/project/project-maven/pom.xml rename to Java基础教程/Java工具教程/maven教程/project/project-maven/pom.xml diff --git a/Java工具教程/maven教程/project/project-maven/src/main/java/com/ykl/Demo.java b/Java基础教程/Java工具教程/maven教程/project/project-maven/src/main/java/com/ykl/Demo.java similarity index 100% rename from Java工具教程/maven教程/project/project-maven/src/main/java/com/ykl/Demo.java rename to Java基础教程/Java工具教程/maven教程/project/project-maven/src/main/java/com/ykl/Demo.java diff --git a/Java工具教程/maven教程/project/project-maven/src/test/java/com/ykl/TestDemo.java b/Java基础教程/Java工具教程/maven教程/project/project-maven/src/test/java/com/ykl/TestDemo.java similarity index 100% rename from Java工具教程/maven教程/project/project-maven/src/test/java/com/ykl/TestDemo.java rename to Java基础教程/Java工具教程/maven教程/project/project-maven/src/test/java/com/ykl/TestDemo.java diff --git a/Java性能优化/性能优化简介.md b/Java基础教程/Java性能优化/性能优化简介.md similarity index 100% rename from Java性能优化/性能优化简介.md rename to Java基础教程/Java性能优化/性能优化简介.md diff --git a/Java基础教程/Java源代码/Lesson01/README.md b/Java基础教程/Java源代码/Lesson01/README.md new file mode 100644 index 00000000..161cce0c --- /dev/null +++ b/Java基础教程/Java源代码/Lesson01/README.md @@ -0,0 +1,3 @@ +## 文件说明 + +> 次目录是**Java语言基础**中的代码实例。 \ No newline at end of file diff --git a/Java源代码/Lesson01/Java01HelloWorld.java b/Java基础教程/Java源代码/Lesson01/com/ykl/Java01HelloWorld.java similarity index 91% rename from Java源代码/Lesson01/Java01HelloWorld.java rename to Java基础教程/Java源代码/Lesson01/com/ykl/Java01HelloWorld.java index 7ac08ca6..5144278e 100644 --- a/Java源代码/Lesson01/Java01HelloWorld.java +++ b/Java基础教程/Java源代码/Lesson01/com/ykl/Java01HelloWorld.java @@ -1,4 +1,4 @@ - +package com.ykl; public class Java01HelloWorld { public static void main(String[] args) { System.out.println("Hello"); diff --git a/Java基础教程/Java源代码/Lesson01/com/ykl/exceptions/ExceptionTest.java b/Java基础教程/Java源代码/Lesson01/com/ykl/exceptions/ExceptionTest.java new file mode 100644 index 00000000..27aa32bf --- /dev/null +++ b/Java基础教程/Java源代码/Lesson01/com/ykl/exceptions/ExceptionTest.java @@ -0,0 +1,29 @@ +// package com.ykl.exceptions; + +public class ExceptionTest{ + public static void main(String[] args) { + System.out.println("Hello World!"); + int a =0; + int b =1; + + try { + System.out.println(b/a); + } catch (ArithmeticException e) { + //TODO: handle exception + System.out.println("数学异常"); + System.out.println("e.toString"+e.toString()); + System.out.println("e.printStackTrace()"); + e.printStackTrace(); + // System.out.println(); + System.out.println("e.getMessage"+e.getMessage()); + System.out.println("e.getCause"+e.getCause()); + + System.out.println("e.fillInStackTrace()"+e.fillInStackTrace()); + } finally{ + System.out.println("finnaly清理工作"); + } + } +} + + + diff --git a/Java基础教程/Java源代码/Lesson01/com/ykl/innerclass/AnonymousClass.java b/Java基础教程/Java源代码/Lesson01/com/ykl/innerclass/AnonymousClass.java new file mode 100644 index 00000000..db36ad79 --- /dev/null +++ b/Java基础教程/Java源代码/Lesson01/com/ykl/innerclass/AnonymousClass.java @@ -0,0 +1,28 @@ +// package com.ykl.innerclass; +import java.lang.Thread; + /** + * AnonymousClass + */ + public class AnonymousClass { + + private int a; + + public static void main(String[] args){ + new AnonymousClass().test(2); + } + + //事实证明匿名内部类 + public void test(final int a){ + int b =10; + int c =11; + new Thread(){ + public void run() { + System.out.println(a); + System.out.println(b); + } + }.start(); + b = 12; + System.out.print(b); + } + + } \ No newline at end of file diff --git a/Java源代码/Lesson02/.idea/.gitignore b/Java基础教程/Java源代码/Lesson02/.idea/.gitignore similarity index 100% rename from Java源代码/Lesson02/.idea/.gitignore rename to Java基础教程/Java源代码/Lesson02/.idea/.gitignore diff --git a/Java源代码/Lesson03/basicLesson/pom.xml b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/pom.xml similarity index 100% rename from Java源代码/Lesson03/basicLesson/pom.xml rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/pom.xml diff --git a/Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/Application.java b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/Application.java similarity index 100% rename from Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/Application.java rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/Application.java diff --git a/Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/AnnotationTest.java b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/AnnotationTest.java similarity index 100% rename from Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/AnnotationTest.java rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/AnnotationTest.java diff --git a/Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/Demo.java b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/Demo.java similarity index 100% rename from Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/Demo.java rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/Demo.java diff --git a/Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/MyAnnotation.java b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/MyAnnotation.java similarity index 100% rename from Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/annotationtest/MyAnnotation.java rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/annotationtest/MyAnnotation.java diff --git a/Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/eceptiontest/ExceptionTest.java b/Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/eceptiontest/ExceptionTest.java similarity index 100% rename from Java源代码/Lesson03/basicLesson/src/main/java/com/ykl/eceptiontest/ExceptionTest.java rename to Java基础教程/Java源代码/Lesson02/.idea/basicLesson/src/main/java/com/ykl/eceptiontest/ExceptionTest.java diff --git a/Java源代码/Lesson02/.idea/misc.xml b/Java基础教程/Java源代码/Lesson02/.idea/misc.xml similarity index 100% rename from Java源代码/Lesson02/.idea/misc.xml rename to Java基础教程/Java源代码/Lesson02/.idea/misc.xml diff --git a/Java源代码/Lesson02/.idea/modules.xml b/Java基础教程/Java源代码/Lesson02/.idea/modules.xml similarity index 100% rename from Java源代码/Lesson02/.idea/modules.xml rename to Java基础教程/Java源代码/Lesson02/.idea/modules.xml diff --git a/Java源代码/Lesson02/.idea/uiDesigner.xml b/Java基础教程/Java源代码/Lesson02/.idea/uiDesigner.xml similarity index 100% rename from Java源代码/Lesson02/.idea/uiDesigner.xml rename to Java基础教程/Java源代码/Lesson02/.idea/uiDesigner.xml diff --git a/Java源代码/Lesson02/.idea/vcs.xml b/Java基础教程/Java源代码/Lesson02/.idea/vcs.xml similarity index 100% rename from Java源代码/Lesson02/.idea/vcs.xml rename to Java基础教程/Java源代码/Lesson02/.idea/vcs.xml diff --git a/Java源代码/Lesson02/BasicLanguage/BasicLanguage.iml b/Java基础教程/Java源代码/Lesson02/BasicLanguage/BasicLanguage.iml similarity index 100% rename from Java源代码/Lesson02/BasicLanguage/BasicLanguage.iml rename to Java基础教程/Java源代码/Lesson02/BasicLanguage/BasicLanguage.iml diff --git a/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo5.java b/Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo5.java similarity index 100% rename from Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo5.java rename to Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo5.java diff --git a/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo6.java b/Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo6.java similarity index 100% rename from Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo6.java rename to Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/Demo6.java diff --git a/Java源代码/Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java b/Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java similarity index 100% rename from Java源代码/Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java rename to Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/HelloWorld.java diff --git a/Java源代码/Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java b/Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java similarity index 100% rename from Java源代码/Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java rename to Java基础教程/Java源代码/Lesson02/BasicLanguage/src/com/ykl/ScannerTest.java diff --git a/Java源代码/Lesson03/Lesson03.iml b/Java基础教程/Java源代码/Lesson02/Lesson03.iml similarity index 100% rename from Java源代码/Lesson03/Lesson03.iml rename to Java基础教程/Java源代码/Lesson02/Lesson03.iml diff --git a/Java基础教程/Java源代码/Lesson02/README.md b/Java基础教程/Java源代码/Lesson02/README.md new file mode 100644 index 00000000..19ac8dc3 --- /dev/null +++ b/Java基础教程/Java源代码/Lesson02/README.md @@ -0,0 +1,3 @@ +## 文档说明 + +这是Springboot的实践教程 \ No newline at end of file diff --git a/Java源代码/lesson04/demo01/demo01.iml b/Java基础教程/Java源代码/Lesson02/demo01/demo01.iml similarity index 100% rename from Java源代码/lesson04/demo01/demo01.iml rename to Java基础教程/Java源代码/Lesson02/demo01/demo01.iml diff --git a/Java源代码/lesson04/demo01/pom.xml b/Java基础教程/Java源代码/Lesson02/demo01/pom.xml similarity index 100% rename from Java源代码/lesson04/demo01/pom.xml rename to Java基础教程/Java源代码/Lesson02/demo01/pom.xml diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/App01.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App01.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/App01.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App01.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/App02.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App02.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/App02.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App02.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/App03.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App03.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/App03.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/App03.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Animal.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Animal.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Animal.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Animal.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Dog.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Dog.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Dog.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Dog.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Person.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Person.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/example01/Person.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example01/Person.java diff --git a/Java源代码/lesson04/demo01/src/main/java/com/ykl/example04/Outer.java b/Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example04/Outer.java similarity index 100% rename from Java源代码/lesson04/demo01/src/main/java/com/ykl/example04/Outer.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/main/java/com/ykl/example04/Outer.java diff --git a/Java源代码/lesson04/demo01/src/test/java/com/ykl/AppTest.java b/Java基础教程/Java源代码/Lesson02/demo01/src/test/java/com/ykl/AppTest.java similarity index 100% rename from Java源代码/lesson04/demo01/src/test/java/com/ykl/AppTest.java rename to Java基础教程/Java源代码/Lesson02/demo01/src/test/java/com/ykl/AppTest.java diff --git a/Java源代码/Lesson03/web-project/pom.xml b/Java基础教程/Java源代码/Lesson02/web-project/pom.xml similarity index 100% rename from Java源代码/Lesson03/web-project/pom.xml rename to Java基础教程/Java源代码/Lesson02/web-project/pom.xml diff --git a/Java源代码/Lesson03/web-project/src/main/webapp/WEB-INF/web.xml b/Java基础教程/Java源代码/Lesson02/web-project/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from Java源代码/Lesson03/web-project/src/main/webapp/WEB-INF/web.xml rename to Java基础教程/Java源代码/Lesson02/web-project/src/main/webapp/WEB-INF/web.xml diff --git a/Java源代码/Lesson03/web-project/src/main/webapp/index.jsp b/Java基础教程/Java源代码/Lesson02/web-project/src/main/webapp/index.jsp similarity index 100% rename from Java源代码/Lesson03/web-project/src/main/webapp/index.jsp rename to Java基础教程/Java源代码/Lesson02/web-project/src/main/webapp/index.jsp diff --git a/Java网站开发/DAO模式的理解.md b/Java基础教程/Java网站开发/DAO模式的理解.md similarity index 100% rename from Java网站开发/DAO模式的理解.md rename to Java基础教程/Java网站开发/DAO模式的理解.md diff --git a/Java网站开发/JAVA中库的理解.md b/Java基础教程/Java网站开发/JAVA中库的理解.md similarity index 100% rename from Java网站开发/JAVA中库的理解.md rename to Java基础教程/Java网站开发/JAVA中库的理解.md diff --git a/Java网站开发/JAVA代码组织.md b/Java基础教程/Java网站开发/JAVA代码组织.md similarity index 100% rename from Java网站开发/JAVA代码组织.md rename to Java基础教程/Java网站开发/JAVA代码组织.md diff --git a/Java网站开发/JSP代码作用.md b/Java基础教程/Java网站开发/JSP代码作用.md similarity index 100% rename from Java网站开发/JSP代码作用.md rename to Java基础教程/Java网站开发/JSP代码作用.md diff --git a/Java网站开发/JSP技术详解.md b/Java基础教程/Java网站开发/JSP技术详解.md similarity index 100% rename from Java网站开发/JSP技术详解.md rename to Java基础教程/Java网站开发/JSP技术详解.md diff --git a/Java网站开发/Lombok/Lombok.md b/Java基础教程/Java网站开发/Lombok/Lombok.md similarity index 100% rename from Java网站开发/Lombok/Lombok.md rename to Java基础教程/Java网站开发/Lombok/Lombok.md diff --git a/Java网站开发/computer.py b/Java基础教程/Java网站开发/computer.py similarity index 100% rename from Java网站开发/computer.py rename to Java基础教程/Java网站开发/computer.py diff --git a/Java网站开发/java中@的作用.md b/Java基础教程/Java网站开发/java中@的作用.md similarity index 100% rename from Java网站开发/java中@的作用.md rename to Java基础教程/Java网站开发/java中@的作用.md diff --git a/Java网站开发/jdbc标准范例.md b/Java基础教程/Java网站开发/jdbc标准范例.md similarity index 100% rename from Java网站开发/jdbc标准范例.md rename to Java基础教程/Java网站开发/jdbc标准范例.md diff --git a/Java网站开发/media/033dc67bcd465edb89b52cc8d9bdd5c1.png b/Java基础教程/Java网站开发/media/033dc67bcd465edb89b52cc8d9bdd5c1.png similarity index 100% rename from Java网站开发/media/033dc67bcd465edb89b52cc8d9bdd5c1.png rename to Java基础教程/Java网站开发/media/033dc67bcd465edb89b52cc8d9bdd5c1.png diff --git a/Java网站开发/media/0df06acb323561f7014fed6f60125206.jpeg b/Java基础教程/Java网站开发/media/0df06acb323561f7014fed6f60125206.jpeg similarity index 100% rename from Java网站开发/media/0df06acb323561f7014fed6f60125206.jpeg rename to Java基础教程/Java网站开发/media/0df06acb323561f7014fed6f60125206.jpeg diff --git a/Java网站开发/media/4f52e7856884d1457ab7d1867caab247.jpeg b/Java基础教程/Java网站开发/media/4f52e7856884d1457ab7d1867caab247.jpeg similarity index 100% rename from Java网站开发/media/4f52e7856884d1457ab7d1867caab247.jpeg rename to Java基础教程/Java网站开发/media/4f52e7856884d1457ab7d1867caab247.jpeg diff --git a/Java网站开发/media/896ddc649ace2c4d5b318d11c887ece9.jpeg b/Java基础教程/Java网站开发/media/896ddc649ace2c4d5b318d11c887ece9.jpeg similarity index 100% rename from Java网站开发/media/896ddc649ace2c4d5b318d11c887ece9.jpeg rename to Java基础教程/Java网站开发/media/896ddc649ace2c4d5b318d11c887ece9.jpeg diff --git a/Java网站开发/关于JAVAEE非框架的理解.md b/Java基础教程/Java网站开发/关于JAVAEE非框架的理解.md similarity index 100% rename from Java网站开发/关于JAVAEE非框架的理解.md rename to Java基础教程/Java网站开发/关于JAVAEE非框架的理解.md diff --git a/Java网站开发/关键字——transient.md b/Java基础教程/Java网站开发/关键字——transient.md similarity index 100% rename from Java网站开发/关键字——transient.md rename to Java基础教程/Java网站开发/关键字——transient.md diff --git a/Java网站开发/移动自动测试工具appium.md b/Java基础教程/Java网站开发/移动自动测试工具appium.md similarity index 100% rename from Java网站开发/移动自动测试工具appium.md rename to Java基础教程/Java网站开发/移动自动测试工具appium.md diff --git a/Java网站开发/简单的实验.md b/Java基础教程/Java网站开发/简单的实验.md similarity index 100% rename from Java网站开发/简单的实验.md rename to Java基础教程/Java网站开发/简单的实验.md diff --git a/Java网站开发/软件测试中的总结.md b/Java基础教程/Java网站开发/软件测试中的总结.md similarity index 100% rename from Java网站开发/软件测试中的总结.md rename to Java基础教程/Java网站开发/软件测试中的总结.md diff --git a/Java基础教程/Java语言基础/01 Java基础.md b/Java基础教程/Java语言基础/01 Java基础.md index bed5112b..bc3fd061 100644 --- a/Java基础教程/Java语言基础/01 Java基础.md +++ b/Java基础教程/Java语言基础/01 Java基础.md @@ -17,12 +17,12 @@ - [基本类型](#基本类型) - [引用类型](#引用类型) - [包装类型](#包装类型) - - [字面值](#字面值) - - [转义字符](#转义字符) - - [3 类型转换](#3-类型转换) + - [字面值和转义字符](#字面值和转义字符) + - [3 基本类型转换](#3-基本类型转换) - [转换规则](#转换规则) - [float 与 double](#float-与-double) - [隐式类型转换](#隐式类型转换) + - [显示类型转换](#显示类型转换) - [4 变量常量](#4-变量常量) - [变量](#变量) - [变量作用域](#变量作用域) @@ -211,6 +211,10 @@ boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是 > //代码精简 > ``` +> 整数类型 +> 0b二进制 +> 0八进制 +> 0十六进制 ### 引用类型 由基本数据类型按照某种方式组合出来的类型。 @@ -240,24 +244,35 @@ int y = x; // 拆箱 调用了 X.intValue() - [Autoboxing and Unboxing](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) -### 字面值 - +### 字面值和转义字符 +* 不同进制的整数 ```java int i=10;//十进制 +int i =0b00101;//二进制 int i=010;//八进制 int i=0x10//十六进制 -"这是一个字符串"//字符串的字面值 ``` -### 转义字符 +* 不同编码的字符串 +```java +"这是一个字符串"//字符串的字面值 +"\u0061"//unnicode编码的字符 +``` + +* 不同的转移字符 ``` \t 制表位 \n 换行符 +\b 退格键 +\r 回车 +\' +\" +\\ ``` -## 3 类型转换 +## 3 基本类型转换 ### 转换规则 运算中不同类型的数据首先转换为同一类型然后进行运算。 * 默认转换规则 @@ -311,6 +326,9 @@ s1++; s1 = (short) (s1 + 1); ``` +### 显示类型转换 + + [StackOverflow : Why don't Java's +=, -=, *=, /= compound assignment operators require casting?](https://stackoverflow.com/questions/8710619/why-dont-javas-compound-assignment-operators-require-casting) ## 4 变量常量 @@ -488,9 +506,9 @@ System.out.println(a+b+""); ### 包机制 -1. 包是一种文件夹。利用公司域名倒置作为包名 +1. 包是一种文件夹。利用公司域名倒置作为包名package 2. 包是默认的作用域。当前类会自动导入当前包作用域中的类和变量。 -3. 通过导入包中的类,可以使用其他包中的类。 +3. 通过导入包中的类,可以使用其他包中的类。import diff --git a/Java基础教程/Java语言基础/02 流程控制.md b/Java基础教程/Java语言基础/02 流程控制.md index f386a46d..508595ee 100644 --- a/Java基础教程/Java语言基础/02 流程控制.md +++ b/Java基础教程/Java语言基础/02 流程控制.md @@ -216,4 +216,3 @@ public class Test { } } ``` -## 5 输入输出对象 diff --git a/Java基础教程/Java语言基础/05 面向对象的类与对象.md b/Java基础教程/Java语言基础/05 面向对象的类与对象.md new file mode 100644 index 00000000..89ce78e3 --- /dev/null +++ b/Java基础教程/Java语言基础/05 面向对象的类与对象.md @@ -0,0 +1,297 @@ +# 类与对象 +## 1 基本内容 +> 建模全宇宙,用有限的代码描述无限的世界 +### 类的定义 + +属性和方法(变量和函数),对象即实例。放到一起就是对象。面相对象的本质就是以类的方式组织代码,以对象组织封装数据。OOP:Object oriented programming + + +抽象,把共同的部分抽取出来,组成一个类。 + +一个项目应该只存在一个主启动类。 + +* 对象:对象是类的一个实例 +* 类:类是一个模板,它描述一类对象的行为和状态。 + +```java +public class Dog { + String breed; + int size; + String colour; + int age; + + void eat() { + } + + void run() { + } + + void sleep(){ + } + + void name(){ + } +} +``` + + + +### 五种成分 +类中有且仅有5大成分(五大金刚) + +- 成员变量Field:描述类或者对象的属性信息的。 +- 成员方法Method:描述类或者对象的行为的。 +- 构造器(构造方法,Constructor): 初始化类的一个对象返回。 +- 代码块:代码块按照有无static可以分为静态代码块和实例代码块。 +- 内部类:将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。 + + +### 访问权限修饰符 + +* 如果一个类的成员变量或成员方法被修饰为private,则只能在本类中使用,在子类中不可使用,并且在其他包的类中是不可见的。 +* 如果被修饰为public,则在子类和其他包的类中可以使用。 +* 如果被修饰为protect,则仅在子类中可以使用。 +* 如果没有权限修饰符,默认访问权限为整个包。 + +## 2 成员变量Field +### 变量类型 + +* 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 +* 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。只能通过实例化的对象进行访问 +* 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。只能通过类名进行访问 + +### 成员变量 + +在Java中对象的属性称为成员变量。为了了解成员变量,在下面的代码中首先定义一个图书类,成员变量对应于类**对象的属性**,在Book类中设置3个成员变量,分别为id,name和category,分别对应于图书编号,图书名称和图书类别3个图书属性。 + +```java +public class Book{ + private String name; //定义一个String类型的成员变量 + public String getName(){ //定义一个getName()方法 + int id=0; //局部变量 + setName=("java"); //调用类中其他方法 + return id+this.name; //设置方法返回值 + } + public void setName(String name){ //定义一个setName()方法 + this.name=name; //将参数赋值于类中的成员变量 + } + public Book getBook(){ + return this; //返回Book类引用 + } + } +``` + +成员变量可以设置初始值,也可以不设置,如果不设置初始值,则会有默认值。 + + +## 3 成员方法Method + +一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量。同时成员方法有返回值和不返回任何值的选择,如果需要返回值,可以在方法体中使用return关键字,返回值可以是计算结果,也可以是其他想要的数值和对象,无返回值可以使用void关键字表示。 + +在成员方法中可以调用其他成员方法和类成员变量,例如上述代码中getName()方法中就调用了setName()方法将图书名称赋予一个值。 + +## 4 构造方法Constructor + +### 构造方法 +用于返回一个类的对象,同时把对象的数据初始化好。 +1. 每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。一旦定义了有参构造,无参构造就需要显示定义。 +2. 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。 +3. 和类名相同,没有返回值,一般为public。 + +```java +public class Puppy{ + public Puppy(){ + } + + public Puppy(String name){ + // 这个构造器仅有一个参数:name + } +} +``` + +### 对象创建 +* 声明:声明一个对象,包括对象名称和对象类型。 +* 实例化:使用关键字 new 来创建一个对象。 +* 初始化:使用 new 创建对象时,会调用构造方法初始化对象。首先分配对象空间,然后使用构造函数,初始化一些列对象的值。 + +### 访问对象 + +1. 访问对象的成员变量(属性) +2. 访问对象的函数成员(方法) + +```java +/* 实例化对象 */ +Object referenceVariable = new Constructor(); +/* 访问类中的变量 */ +referenceVariable.variableName; +/* 访问类中的方法 */ +referenceVariable.methodName(); +``` + + +## 5 代码块 + +### 静态代码块 + +**静态代码块** +​ 必须有static修饰,必须放在类下。与类一起加载执行。 + +**格式** + +```java +static{ + // 执行代码 +} +``` + +**特点**: + +- 每次执行类,加载类的时候都会先执行静态代码块一次。 +- 静态代码块是自动触发执行的,只要程序启动静态代码块就会先执行一次。 +- 作用:在启动程序之前可以做资源的初始化,一般用于初始化静态资源。 + +**案例演示** + +```java +public class DaimaKuaiDemo01 { + public static String name ; + + // 1.静态代码块 + static { + // 初始化静态资源 + name = "张三"; + System.out.println("静态代码块执行!"); + } + + public static void main(String[] args) { + System.out.println("main方法执行"); + System.out.println(name); + } +} + +``` + +### 实例代码块 + +**实例代码块** +​ 没有static修饰,必须放在类下。与对象初始化一起加载。 + +**格式** + +```java +{ + // 执行代码 +} +``` + +**特点**: + +- 无static修饰。属于对象,与对象的创建一起执行的。 +- 每次调用构造器初始化对象,实例代码块都要自动触发执行一次。 +- 实例代码块实际上是提取到每一个构造器中去执行的。 +- 作用:实例代码块用于初始化对象的资源。 + +**案例演示** + +```java +public class DaimaKuaiDemo02 { + + private String name ; + + // 实例代码块。 无static修饰。 + { + System.out.println("实例代码块执行"); + name = "dl"; + } + + // 构造器 + public DaimaKuaiDemo02(){ + //System.out.println("实例代码块执行"); + } + + // 有参数构造器 + public DaimaKuaiDemo02(String name){ + //System.out.println("实例代码块执行"); + } + + public static void main(String[] args) { + // 匿名对象,创建出来没有给变量。 + new DaimaKuaiDemo02(); + new DaimaKuaiDemo02(); + new DaimaKuaiDemo02("xulei"); + } +} +// 输出三次:实例代码块执行 +``` + +## 6 内部类 +> 见内部类部分 + +## 7 关键字 +### final + +可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写 + +```java +final class 类名 {//类体} +``` +### this + + +**this关键字**:指向自己的引用。采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。访问当前对象的实例变量。调用重载的构造方法: +1. 可以在构造方法中,通过this调用本类的另一个构造方法,且必须置于第一行。 +2. 可以通过this调用本类中带参或无参构造方法,调用带参构造方法时,需要按顺序传入设定的参数。 +3. 在一个构造方法内只能调用一个构造方法。 +4. 不能在类中普通成员方法内通过this调用构造方法。 + + + + +### super +super关键字来实现对父类成员的访问,用来引用当前对象的父类。 +- 子类的构造函数会默认调用父类的无参构造函数。而且通过super()方法调用父类的构造器,必须放在子类构造器的第一行。 +- 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。应该注意到,子类一定会调用父类的构造函数来完成初始化工作,一般是调用父类的默认构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数。 +- 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。 + +```java +public class SuperExample { + + protected int x; + protected int y; + + public SuperExample(int x, int y) { + this.x = x; + this.y = y; + } + + public void func() { + System.out.println("SuperExample.func()"); + } +} +``` + +```java +public class SuperExtendExample extends SuperExample { + + private int z; + + public SuperExtendExample(int x, int y, int z) { + super(x, y); + this.z = z; + } + + @Override + public void func() { + super.func(); + System.out.println("SuperExtendExample.func()"); + } +} +``` + +### static + +static方法和static变量和类加载器同时加载到内存中,存储在静态方法区。 + +### instanceof + +运算符 对象运算符(instanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false) diff --git a/Java基础教程/Java语言基础/05 面向对象.md b/Java基础教程/Java语言基础/06 面向对象的三大特征.md similarity index 67% rename from Java基础教程/Java语言基础/05 面向对象.md rename to Java基础教程/Java语言基础/06 面向对象的三大特征.md index cce96042..20e5514b 100644 --- a/Java基础教程/Java语言基础/05 面向对象.md +++ b/Java基础教程/Java语言基础/06 面向对象的三大特征.md @@ -1,148 +1,5 @@ -## 1 类和对象 -> 建模全宇宙,用有限的代码描述无限的世界 -### 类的定义 - -属性和方法(变量和函数),对象即实例。放到一起就是对象。面相对象的本质就是以类的方式组织代码,以对象组织封装数据。OOP:Object oriented programming - - -抽象,把共同的部分抽取出来,组成一个类。 - -一个项目应该只存在一个主启动类。 - -* 对象:对象是类的一个实例 -* 类:类是一个模板,它描述一类对象的行为和状态。 - -```java -public class Dog { - String breed; - int size; - String colour; - int age; - - void eat() { - } - - void run() { - } - - void sleep(){ - } - - void name(){ - } -} -``` - -* **final关键字** 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写 - -```java -final class 类名 {//类体} -``` - - - -### 变量类型 - -* 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 -* 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。只能通过实例化的对象进行访问 -* 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。只能通过类名进行访问 - - -### 构造方法 -1. 每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。一旦定义了有参构造,无参构造就需要显示定义。 -2. 在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。 -3. 和类名相同,没有返回值,一般为public。 - -```java -public class Puppy{ - public Puppy(){ - } - - public Puppy(String name){ - // 这个构造器仅有一个参数:name - } -} -``` - -### 对象创建 -* 声明:声明一个对象,包括对象名称和对象类型。 -* 实例化:使用关键字 new 来创建一个对象。 -* 初始化:使用 new 创建对象时,会调用构造方法初始化对象。 - -### 访问对象 - -1. 访问对象的成员变量(属性) -2. 访问对象的函数成员(方法) -3. **this关键字**:指向自己的引用。采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。访问当前对象的实例变量。 -4. **super关键字**:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。 - -```java -/* 实例化对象 */ -Object referenceVariable = new Constructor(); -/* 访问类中的变量 */ -referenceVariable.variableName; -/* 访问类中的方法 */ -referenceVariable.methodName(); - -​ -public void setName(String name){ - this.name = name; -} -``` - -### this - -调用重载的构造方法: -1. 可以在构造方法中,通过this调用本类的另一个构造方法,且必须置于第一行。 -2. 可以通过this调用本类中带参或无参构造方法,调用带参构造方法时,需要按顺序传入设定的参数。 -3. 在一个构造方法内只能调用一个构造方法。 -4. 不能在类中普通成员方法内通过this调用构造方法。 - -### super -- 子类的构造函数会默认调用父类的无参构造函数。而且通过super()方法调用父类的构造器,必须放在子类构造器的第一行。 -- 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。应该注意到,子类一定会调用父类的构造函数来完成初始化工作,一般是调用父类的默认构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数。 -- 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。 - -```java -public class SuperExample { - - protected int x; - protected int y; - - public SuperExample(int x, int y) { - this.x = x; - this.y = y; - } - - public void func() { - System.out.println("SuperExample.func()"); - } -} -``` - -```java -public class SuperExtendExample extends SuperExample { - - private int z; - - public SuperExtendExample(int x, int y, int z) { - super(x, y); - this.z = z; - } - - @Override - public void func() { - super.func(); - System.out.println("SuperExtendExample.func()"); - } -} -``` - -### static - -static方法和static变量和类加载器同时加载到内存中,存储在静态方法区。 - -## 2 三大特性——封装 +# 面相对象的三大特征 +## 1封装 高内聚、低耦合。属性私有。 1. 隐藏实现的细节。将抽象性函式接口的实现细节部分包装、隐藏起来的方法。 @@ -156,7 +13,7 @@ static方法和static变量和类加载器同时加载到内存中,存储在 1. 修改属性的可见性来限制对属性的访问(一般限制为private) 2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问。get/set方法 -## 3 三大特性——继承 +## 2 继承 **继承的定义** 1. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 @@ -243,7 +100,7 @@ public class TestSuperSub{ } } ``` -## 4 三大特性——多态 +## 3 多态 **多态的定义** 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。 @@ -353,7 +210,7 @@ class Dog extends Animal { 3. 抽象类和抽象方法 -## 6 重写与重载 +## 4 重写、重载、重定义 ### 定义 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! diff --git a/Java基础教程/Java语言基础/07 Java内部类.md b/Java基础教程/Java语言基础/07 Java内部类.md deleted file mode 100644 index 664239e0..00000000 --- a/Java基础教程/Java语言基础/07 Java内部类.md +++ /dev/null @@ -1,13 +0,0 @@ -# Java 内部类 - -## 概述 - -### 基本概念 - -内部类就是在一个类的内部定义一个类。 - -* 成员内部类 -* 静态内部类 -* 局部内部类 -* 匿名内部类 - diff --git a/Java基础教程/Java语言基础/06 接口和抽象类.md b/Java基础教程/Java语言基础/07 接口和抽象类.md similarity index 92% rename from Java基础教程/Java语言基础/06 接口和抽象类.md rename to Java基础教程/Java语言基础/07 接口和抽象类.md index f59d57ae..43ffcced 100644 --- a/Java基础教程/Java语言基础/06 接口和抽象类.md +++ b/Java基础教程/Java语言基础/07 接口和抽象类.md @@ -34,19 +34,15 @@ public class AbstractExtendClassExample extends AbstractClassExample { ## 2 接口 * 接口规范、定义规则、本质上是契约。 -implements关键字 -* 使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔) + +* 接口不能被实例化,接口中没有构造方法。必须重写接口中的方法。接口必须有实现类,才能进行实例化。实现了接口中的类,就必须实现接口中的方法。 -* 接口不能被实例化,接口中没有构造方法。必须重写接口中的方法。 +* 接口的成员(字段 + 方法)默认都是 **public abstract**的,并且不允许定义为 private 或者 protected。接口的字段默认都是 **public static final** 的。接口中一般不会定义常量。 + +* 使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔) -* 接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。 - - -* 接口的成员(字段 + 方法)默认都是 **public abstract**的,并且不允许定义为 private 或者 protected。 - -* 接口的字段默认都是 **static 和 final** 的。 ```java public interface InterfaceExample { diff --git a/Java基础教程/Java语言基础/08 Java内部类.md b/Java基础教程/Java语言基础/08 Java内部类.md new file mode 100644 index 00000000..fdcab52b --- /dev/null +++ b/Java基础教程/Java语言基础/08 Java内部类.md @@ -0,0 +1,517 @@ +# Java 内部类 + +## 1 概述 + +### 基本概念 + +内部类就是在一个类的内部定义一个类。 + +* 成员内部类 +* 静态内部类 +* 局部内部类 +* 匿名内部类 + + +### 基本作用 + +* 每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整。 +* 方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。 +* 方便编写事件驱动程序。 +* 方便编写线程代码。 + + +## 2 使用 + +### 成员内部类 + +在类的内部方法的外部编写的类就是成员内部类。 + + +* 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。 +* 成员内部类可以使用四种权限修饰符进行修饰。成员内部类中不能书写静态变量和方法 +* 同名属性名方法名时访问外部类 外部类.this.成员名。 +* 成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。所以在外部类访问内部类的时候必须先实例化外部类对象。 + +```java +public class MemberDemo { + String name = "王五"; + static int age = 10; + + public static void show() { + System.out.println("掉用外部类中的show方法"); + + } + + public void printf() { + System.out.println("调用外部类中的打印方法"); + } + + //成员内部类 可以使用权限修饰符进行修饰 + public class Inner{ + //static double height=1.8; 成员内部类中不能使用static修饰变量和方法 + + String name="张三"; + //成员内部类可以直接访问外部类的属性和方法 + public void innerShow() { + show(); + printf(); + System.out.println(age); + System.out.println("我是:"+name); + System.out.println("我是:"+MemberDemo.this.name);//进行特指访问时 使用类名.this.变量名进行访问 + } + } + + + public static void main(String[] args) { + //成员内部类对象的创建步骤 + //第一步需要实例化外部类对象 + //第二步正常实例化内部类对象 但是new关键字要改成 外部类对象名.new + MemberDemo member = new MemberDemo(); + Inner ineer = member.new Inner(); + ineer.innerShow(); + } + +} +``` + +### 静态内部类 +在类中编写的以static修饰的类称为静态内部类 + +* 静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。 +* 静态内部类是不需要依赖于外部类的,这点和类的**静态成员属性**有点类似,并且它不能使用外部类的非static成员变量或者方法。 +* 静态内部类中即能声明静态成员也可以声明非静态成员。 + +```java +public class StaticDemo { + static String name="王五"; + + public static class Inner{//四种权限修饰符可以修饰静态内部类 + //静态内部类中不能访问外部类非静态成员 + String name="张三"; + static int age=18; + double height=1.8; + public void show() { + //重名时 访问外部类的静态变量使用类名.属性名访问 + System.out.println("这是"+name); + System.out.println("这是"+StaticDemo.name); + System.out.println(age); + System.out.println(height); + } + + + } + + public static void main(String[] args) { + //静态内部类可以直接实例化 不需要依附于外部类 + Inner inner = new Inner(); + inner.show(); + + } + +} +``` + + +```java +public class Test { + public static void main(String[] args) { + Outter.Inner inner = new Outter.Inner(); + } +} + +class Outter { + public Outter() { + + } + + static class Inner { + public Inner() { + + } + } +} +``` + +### 局部内部类 + +编写在方法的内部的类称之为局部内部类 + + +* 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。 +* 局部内部类不可使用权限修饰符 静态修饰符进行修饰 同局部变量相同。 +* 局部内部类可以直接访问方法中的属性,可以直接访问方法外部类中属性和方法。局部内部类 创建对象 要在方法内部 局部内部类的外部声明 + +```java +public class PartialDemo { + String name = "王五"; + static int age = 10; + + public static void show() { + System.out.println("掉用外部类中的show方法"); + + } + + public void printf() { + System.out.println("调用外部类中的打印方法"); + } + + public void demo() { + String name = "张三"; + double height = 1.8; + //编写在方法的内部的类称之为局部内部类 + //局部内部类不可使用权限修饰符 静态修饰符进行修饰 同局部变量相同 + //局部内部类与局部变量使用范围一样 在此方法内部 + //局部内部类可以直接访问方法中的属性 重名时使用参数传递完成访问 + + //局部内部类 可以访问方法外部类中属性和方法 + + class Inner{ + String name = "李四"; + public void showInner(String name) { + show(); + printf(); + System.out.println(age); + System.out.println(height); + System.out.println("这是:"+PartialDemo.this.name); + System.out.println("这是:"+name); + System.out.println("这是:"+this.name); + + } + } + //局部内部类 创建对象 要在方法内部 局部内部类的外部声明 + Inner inner=new Inner(); + inner.showInner(name); + + } + + public static void main(String[] args) { + PartialDemo partialDemo = new PartialDemo(); + partialDemo.demo(); + + } + + + +} +``` + +### 匿名内部类 + +匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 + +* 首先有一个接口,然后在使用的类中编写了一个方法(参数类型是接口对象),并使用接口中未实现的方法。我们调用此方法直接构造一个接口对象传入,此时会自动生成一个此接口的子类(匿名内部类)实现接口中的方法。本质传入的类便是此时的匿名内部类。 +* 不需要把对象保存到实例当中。 +```java +interface A{ + void show(); +} + +public class AnonymousDemo { + //编写回调方法 参数类型为接口A + public void calllnner(A a) { + a.show(); + } + + + public static void main(String[] args) { + AnonymousDemo anonymousDemo = new AnonymousDemo(); + + //匿名内部类 监听事件使用较多 + anonymousDemo.calllnner(new A() {//接口回调 + + //实现子类 但是没有名字 所以叫匿名内部类 + @Override + public void show() { + // TODO Auto-generated method stub + System.out.println("show"); + } + + }); + + } + +} +``` + + +### 一次输出ABC的答案 + +```java +package com.qingsu.test; + + + +class Bean{ + public void Demo() { + class BeanC{ + String C = "BeanC"; + } + //实例化C + BeanC beanC = new BeanC(); + System.out.println(beanC.C); + } +} + +public class InterviewDemo { + + + class BeanA{ + String A = "BeanA"; + } + + static class BeanB{ + String B = "BeanB"; + } + + + //实例化BeanA BeanB BeanC 对象 + + public static void main(String[] args) { + + + //实例化A + InterviewDemo interviewDemo =new InterviewDemo(); + BeanA beanA = interviewDemo.new BeanA(); + System.out.println(beanA.A); + + //实例化B + BeanB beanB = new BeanB(); + System.out.println(beanB.B); + + //实例化bean + Bean bean = new Bean(); + bean.Demo(); + } + +} +``` + + +### 重名变量的引用 +以非静态变量为例 +* 外部类.this.属性名 可以访问到外部类属性 +* this.属性名 可以访问到本类属性 +* 方法中参数传递可以访问到类外部方法中的的属性 +* 静态内部类中对象名.属性名可以访问到外部类中的的静态属性 + +```java +public class PartialDemo { + static String name = "王五"; + + public void demo() { + String name = "张三"; + class Inner{ + String name = "李四"; + public void showInner(String name) { + System.out.println("这是外部类变量:"+PartialDemo.this.name); + System.out.println("这是外部类变量(静态变量可以):"+PartialDemo.name); + System.out.println("这是方法中局部变量变量:"+name); + System.out.println("这是局部内部类中的变量:"+this.name); + + } + } + Inner inner=new Inner(); + inner.showInner(name); + } + + public static void main(String[] args) { + PartialDemo partialDemo = new PartialDemo(); + partialDemo.demo(); + } + +} +``` + +## 3 原理 + +### 成员内部类无条件访问外部类的私有变量 + +在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟。事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面是Outter.java的代码: + +```java +public class Outter { + private Inner inner = null; + public Outter() { + + } + + public Inner getInnerInstance() { + if(inner == null) + inner = new Inner(); + return inner; + } + + protected class Inner { + public Inner() { + + } + } +} +``` + +编译之后,出现了两个字节码文件: + +![img](https://images0.cnblogs.com/i/288799/201407/021630063402064.jpg) + + + +反编译Outter$Inner.class文件得到下面信息: + +```java +javap -v Outter$Inner +Compiled from "Outter.java" +public class com.cxh.test2.Outter$Inner extends java.lang.Object + SourceFile: "Outter.java" + InnerClass: + #24= #1 of #22; //Inner=class com/cxh/test2/Outter$Inner of class com/cxh/tes +t2/Outter + minor version: 0 + major version: 50 + Constant pool: +const #1 = class #2; // com/cxh/test2/Outter$Inner +const #2 = Asciz com/cxh/test2/Outter$Inner; +const #3 = class #4; // java/lang/Object +const #4 = Asciz java/lang/Object; +const #5 = Asciz this$0; +const #6 = Asciz Lcom/cxh/test2/Outter;; +const #7 = Asciz ; +const #8 = Asciz (Lcom/cxh/test2/Outter;)V; +const #9 = Asciz Code; +const #10 = Field #1.#11; // com/cxh/test2/Outter$Inner.this$0:Lcom/cxh/t +est2/Outter; +const #11 = NameAndType #5:#6;// this$0:Lcom/cxh/test2/Outter; +const #12 = Method #3.#13; // java/lang/Object."":()V +const #13 = NameAndType #7:#14;// "":()V +const #14 = Asciz ()V; +const #15 = Asciz LineNumberTable; +const #16 = Asciz LocalVariableTable; +const #17 = Asciz this; +const #18 = Asciz Lcom/cxh/test2/Outter$Inner;; +const #19 = Asciz SourceFile; +const #20 = Asciz Outter.java; +const #21 = Asciz InnerClasses; +const #22 = class #23; // com/cxh/test2/Outter +const #23 = Asciz com/cxh/test2/Outter; +const #24 = Asciz Inner; + +{ +final com.cxh.test2.Outter this$0; + +public com.cxh.test2.Outter$Inner(com.cxh.test2.Outter); + Code: + Stack=2, Locals=2, Args_size=2 + 0: aload_0 + 1: aload_1 + 2: putfield #10; //Field this$0:Lcom/cxh/test2/Outter; + 5: aload_0 + 6: invokespecial #12; //Method java/lang/Object."":()V + 9: return + LineNumberTable: + line 16: 0 + line 18: 9 + + LocalVariableTable: + Start Length Slot Name Signature + 0 10 0 this Lcom/cxh/test2/Outter$Inner; + + +} +``` + +第11行到35行是常量池的内容,第38行的内容: + +```java +final com.cxh.test2.Outter this$0; +``` + +这行是一个指向外部类对象的指针,看到这里想必大家豁然开朗了。也就是说编译器会默认为成员内部类添加了一个指向外部类对象的引用,那么这个引用是如何赋初值的呢?下面接着看内部类的构造器: + +```java +public com.cxh.test2.Outter$Inner(com.cxh.test2.Outter); +``` + +从这里可以看出,虽然我们在定义的内部类的构造器是无参构造器,编译器还是会默认添加一个参数,该参数的类型为指向外部类对象的一个引用,所以成员内部类中的Outter this&0 指针便指向了外部类对象,因此可以在成员内部类中随意访问外部类的成员。从这里也间接说明了成员内部类是依赖于外部类的,如果没有创建外部类的对象,则无法对Outter this&0引用进行初始化赋值,也就无法创建成员内部类的对象了。、 + + +### 局部内部类和匿名内部类只能访问局部final变量 + + + +![](image/2022-08-08-09-52-21.png) + +* 局部内部类和匿名内部类只能访问局部final变量或者实际上的final变量。因为防止内部类和外部类处于不同线程时,引起数据不一致的情况。 + + +```java +public class Test { + public static void main(String[] args) { + + } + + public void test(final int b) { + final int a = 10; + new Thread(){ + public void run() { + System.out.println(a); + System.out.println(b); + }; + }.start(); + } +} +``` + +这段代码会被编译成两个class文件:Test.class和Test1.class。默认情况下,编译器会为匿名内部类和局部内部类起名为Outter1.class。默认情况下,编译器会为匿名内部类和局部内部类起名为Outterx.class(x为正整数)。 + +![img](https://images0.cnblogs.com/i/288799/201407/021900556994393.jpg) + +根据上图可知,test方法中的匿名内部类的名字被起为 Test$1。 + +上段代码中,如果把变量a和b前面的任一个final去掉,这段代码都编译不过。我们先考虑这样一个问题: + +当test方法执行完毕之后,变量a的生命周期就结束了,而此时Thread对象的生命周期很可能还没有结束,那么在Thread的run方法中继续访问变量a就变成不可能了,但是又要实现这样的效果,怎么办呢?Java采用了 复制 的手段来解决这个问题。将这段代码的字节码反编译可以得到下面的内容: + +![](https://gitee.com/krislin_zhao/IMGcloud/raw/master/img/20200521140922.png) + +我们看到在run方法中有一条指令: + +```shell +bipush 10 +``` + +这条指令表示将操作数10压栈,表示使用的是一个本地局部变量。这个过程是在编译期间由编译器默认进行,如果这个变量的值在编译期间可以确定,则编译器默认会在匿名内部类(局部内部类)的常量池中添加一个内容相等的字面量或直接将相应的字节码嵌入到执行字节码中。这样一来,匿名内部类使用的变量是另一个局部变量,只不过值和方法中局部变量的值相等,因此和方法中的局部变量完全独立开。 + + + +这条指令表示将操作数10压栈,表示使用的是一个本地局部变量。这个过程是在编译期间由编译器默认进行,如果这个变量的值在编译期间可以确定,则编译器默认会在匿名内部类(局部内部类)的常量池中添加一个内容相等的字面量或直接将相应的字节码嵌入到执行字节码中。这样一来,匿名内部类使用的变量是另一个局部变量,只不过值和方法中局部变量的值相等,因此和方法中的局部变量完全独立开。 + +下面再看一个例子: + +```java +public class Test { + public static void main(String[] args) { + + } + + public void test(final int a) { + new Thread(){ + public void run() { + System.out.println(a); + }; + }.start(); + } +} +``` + +反编译得到: + +![](https://gitee.com/krislin_zhao/IMGcloud/raw/master/img/20200521141110.png) + +我们看到匿名内部类Test$1的构造器含有两个参数,一个是指向外部类对象的引用,一个是int型变量,很显然,这里是将变量test方法中的形参a以参数的形式传进来对匿名内部类中的拷贝(变量a的拷贝)进行赋值初始化。 + +从上面可以看出,在run方法中访问的变量a根本就不是test方法中的局部变量a。这样一来就解决了前面所说的 生命周期不一致的问题。但是新的问题又来了,既然在run方法中访问的变量a和test方法中的变量a不是同一个变量,当在run方法中改变变量a的值的话,会出现什么情况? + +对,会造成数据不一致性,这样就达不到原本的意图和要求。为了解决这个问题,java编译器就限定必须将变量a限制为final变量,不允许对变量a进行更改(对于引用类型的变量,是不允许指向新的对象),这样数据不一致性的问题就得以解决了。 + + + +> 如果局部变量的值在编译期间就可以确定,则直接在匿名内部里面创建一个拷贝。如果局部变量的值无法在编译期间确定,则通过构造器传参的方式来对拷贝进行初始化赋值。 diff --git a/Java基础教程/Java语言基础/08 Java反射.md b/Java基础教程/Java语言基础/09 Java反射.md similarity index 100% rename from Java基础教程/Java语言基础/08 Java反射.md rename to Java基础教程/Java语言基础/09 Java反射.md diff --git a/Java基础教程/Java语言基础/09 Java泛型.md b/Java基础教程/Java语言基础/10 Java泛型.md similarity index 100% rename from Java基础教程/Java语言基础/09 Java泛型.md rename to Java基础教程/Java语言基础/10 Java泛型.md diff --git a/Java基础教程/Java语言基础/11 异常处理.md b/Java基础教程/Java语言基础/11 异常处理.md index a60e1a64..e090b839 100644 --- a/Java基础教程/Java语言基础/11 异常处理.md +++ b/Java基础教程/Java语言基础/11 异常处理.md @@ -1,4 +1,4 @@ -## 1 异常概述 +## 1 异常机制 ### 异常与错误 异常是程序中的一些错误。 @@ -32,7 +32,14 @@ Throwable 可以用来表示任何可以作为异常抛出的类,分为两种 ## 2 异常使用 -### 异常中的方法 +### 异常处理机制的关键字 +* try +* catch +* finally +* throw +* throws + +### 异常类中的方法 * public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。 @@ -49,7 +56,7 @@ Throwable 可以用来表示任何可以作为异常抛出的类,分为两种 ### 捕获异常 * 使用 try 和 catch 关键字可以捕获异常。 -* Catch 语句包含要捕获异常类型的声明。 +* Catch 语句包含要捕获异常类型的声明。可以是Exception类型也可以是Error类型,还可以是Throwable类型。 ```java try { @@ -78,7 +85,7 @@ public class ExcepTest{ ### 多重捕获结构 * 没有发生异常,会通过所有的捕获语句,不会进入catch -* 发生异常,则进入捕获语句,并且不再执行其他捕获语句。执行完成后跳出try-catch语句块,然后执行后续内容。不会终端程序执行。 +* 发生异常,则进入捕获语句,并且不再执行其他捕获语句。执行完成后跳出try-catch语句块,然后执行后续内容。不会终端程序执行。所以需要从小到大进行捕获。 ```java try{ // 程序代码 @@ -270,7 +277,7 @@ public class CheckingAccount ### 处理自定义的异常 -``` +```java //文件名称 BankDemo.java public class BankDemo { diff --git a/Java基础教程/Java语言基础/10 Java注解.md b/Java基础教程/Java语言基础/12 Java注解.md similarity index 100% rename from Java基础教程/Java语言基础/10 Java注解.md rename to Java基础教程/Java语言基础/12 Java注解.md diff --git a/Java基础教程/Java语言基础/13 lambda表达式.md b/Java基础教程/Java语言基础/13 lambda表达式.md new file mode 100644 index 00000000..e69de29b diff --git a/Java基础教程/Java语言基础/image/2022-08-08-09-52-21.png b/Java基础教程/Java语言基础/image/2022-08-08-09-52-21.png new file mode 100644 index 0000000000000000000000000000000000000000..09a99f16b23b57eb8f52a5404f6746a2b987537b GIT binary patch literal 127395 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%0DHVQHn!GwQOr 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

~N(2XY``b@k0&4I%)_wnrxyT2H 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Ȍ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�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 literal 0 HcmV?d00001 diff --git a/Java基础教程/Java面试原理/03 关键字.md b/Java基础教程/Java面试原理/03 关键字.md index ec1039a1..866d3ea9 100644 --- a/Java基础教程/Java面试原理/03 关键字.md +++ b/Java基础教程/Java面试原理/03 关键字.md @@ -277,7 +277,7 @@ public abstract class A { } ``` -只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字,因此这两个关键字与具体对象关联。 +只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字,因为这两个关键字与具体对象关联。 ```java public class A { diff --git a/Java源代码/Lesson03/.idea/.gitignore b/Java源代码/Lesson03/.idea/.gitignore deleted file mode 100644 index 0a8642fa..00000000 --- a/Java源代码/Lesson03/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Zeppelin ignored files -/ZeppelinRemoteNotebooks/ diff --git a/Java源代码/Lesson03/.idea/ConfPoetryConfig.xml b/Java源代码/Lesson03/.idea/ConfPoetryConfig.xml deleted file mode 100644 index a492c89d..00000000 --- a/Java源代码/Lesson03/.idea/ConfPoetryConfig.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/compiler.xml b/Java源代码/Lesson03/.idea/compiler.xml deleted file mode 100644 index 1d7da6f1..00000000 --- a/Java源代码/Lesson03/.idea/compiler.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/encodings.xml b/Java源代码/Lesson03/.idea/encodings.xml deleted file mode 100644 index 4bedd850..00000000 --- a/Java源代码/Lesson03/.idea/encodings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/inspectionProfiles/Project_Default.xml b/Java源代码/Lesson03/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index c6bd9f3d..00000000 --- a/Java源代码/Lesson03/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/jarRepositories.xml b/Java源代码/Lesson03/.idea/jarRepositories.xml deleted file mode 100644 index 74cbb213..00000000 --- a/Java源代码/Lesson03/.idea/jarRepositories.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/misc.xml b/Java源代码/Lesson03/.idea/misc.xml deleted file mode 100644 index 562d1e81..00000000 --- a/Java源代码/Lesson03/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/modules.xml b/Java源代码/Lesson03/.idea/modules.xml deleted file mode 100644 index 123d848f..00000000 --- a/Java源代码/Lesson03/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/uiDesigner.xml b/Java源代码/Lesson03/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946d..00000000 --- a/Java源代码/Lesson03/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/Lesson03/.idea/vcs.xml b/Java源代码/Lesson03/.idea/vcs.xml deleted file mode 100644 index b2bdec2d..00000000 --- a/Java源代码/Lesson03/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/.gitignore b/Java源代码/lesson04/.idea/.gitignore deleted file mode 100644 index 0a8642fa..00000000 --- a/Java源代码/lesson04/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Zeppelin ignored files -/ZeppelinRemoteNotebooks/ diff --git a/Java源代码/lesson04/.idea/ConfPoetryConfig.xml b/Java源代码/lesson04/.idea/ConfPoetryConfig.xml deleted file mode 100644 index a492c89d..00000000 --- a/Java源代码/lesson04/.idea/ConfPoetryConfig.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/compiler.xml b/Java源代码/lesson04/.idea/compiler.xml deleted file mode 100644 index 72d6de28..00000000 --- a/Java源代码/lesson04/.idea/compiler.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/encodings.xml b/Java源代码/lesson04/.idea/encodings.xml deleted file mode 100644 index 46abb559..00000000 --- a/Java源代码/lesson04/.idea/encodings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/inspectionProfiles/Project_Default.xml b/Java源代码/lesson04/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index c6bd9f3d..00000000 --- a/Java源代码/lesson04/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/jarRepositories.xml b/Java源代码/lesson04/.idea/jarRepositories.xml deleted file mode 100644 index 54f518fe..00000000 --- a/Java源代码/lesson04/.idea/jarRepositories.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/lesson04.iml b/Java源代码/lesson04/.idea/lesson04.iml deleted file mode 100644 index d6ebd480..00000000 --- a/Java源代码/lesson04/.idea/lesson04.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/libraries/Maven__junit_junit_4_11.xml b/Java源代码/lesson04/.idea/libraries/Maven__junit_junit_4_11.xml deleted file mode 100644 index f33320d8..00000000 --- a/Java源代码/lesson04/.idea/libraries/Maven__junit_junit_4_11.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/Java源代码/lesson04/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml deleted file mode 100644 index f58bbc11..00000000 --- a/Java源代码/lesson04/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/misc.xml b/Java源代码/lesson04/.idea/misc.xml deleted file mode 100644 index 75a7c22b..00000000 --- a/Java源代码/lesson04/.idea/misc.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/modules.xml b/Java源代码/lesson04/.idea/modules.xml deleted file mode 100644 index abbcab88..00000000 --- a/Java源代码/lesson04/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/uiDesigner.xml b/Java源代码/lesson04/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946d..00000000 --- a/Java源代码/lesson04/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Java源代码/lesson04/.idea/vcs.xml b/Java源代码/lesson04/.idea/vcs.xml deleted file mode 100644 index b2bdec2d..00000000 --- a/Java源代码/lesson04/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Junit/概述.md b/Junit/概述.md new file mode 100644 index 00000000..69289e35 --- /dev/null +++ b/Junit/概述.md @@ -0,0 +1,13 @@ +## 概述 + + + +## 关键点 + + +1. 导入Springboot相关的依赖,spring-boot-starter +2. 写测试类,添加@SpringbootTest。该注解能够增加Spring的上下文,及@Autowire进行bean的注入。 +3. 写测试方法,添加@Test注解,填写测试用例。通过Assertions方法,进行断言。 +4. @BeforeEach、@BeforeAll、@AfterEach、@AfterAll。能够在不同阶段执行相关的操作。 +5. 通过MockBean添加mock规则。使用when().thenReturn()方法进行mock掉一个bean的所有方法。可以在@BeforeEach中执行mock方法,或者@BeforeAll中执行。没配置的规则,返回默认值。 +6. 通过Spybean进行部分注Mock。首先注入bean,只mock配置规则的部分,没有配置规则的部分使用原来的方法。 \ No newline at end of file