Java语言是一种面向对象的程序设计语言,而面向对象思想(OOP)是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想(POP),强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
面向过程:POP: Process-Oriented Programming
以函数(方法)为最小单位
数据独立于函数之外
以过程,步骤为主,考虑怎么做
面向对象:OOP: Object Oriented Programming
以类/对象为最小单位,类包括:数据+方法
以对象(谁)为主,考虑谁来做,谁能做
程序员的角色:
面向过程:程序员是具体执行者
面向对象:程序员是指挥者
注意:面向对象仍然包含面向过程,只不过关注点变了,关注谁来做。面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。
面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
在 IntelliJ IDEA 中Project是最顶级的结构单元,然后就是Module,一个Project可以有多个Module。目前,主流的大型项目结构基本都是多Module的结构,这类项目一般是按功能划分的,比如:user-core-module、user-facade-module和user-hessian-module等等,模块之间彼此可以相互依赖。通过这些Module的命名可以看出,它们都是处于同一个项目中的模块,彼此之间是有着不可分割的业务关系。因此,我们可以大致总结出:一个Project是由一个或多个Module组成。
当为单Module项目的时候,这个单独的Module实际上就是一个Project;
当为多Module项目的时候,多个模块处于同一个Project之中,此时彼此之间具有互相依赖的关联关系;
当然多个模块没有建立依赖关系的话,也可以作为单独一个“小项目”运行。
此外, IntelliJ IDEA 的Project是一个不具备任何编码设置、构建等开发功能的概念,其主要作用就是起到一个项目定义、范围约束、规范类型的效果,或许,我们也可以简单地理解Project就是一个单纯的目录,只是这个目录在命名上必须有其代表性的意义。在缺省情况下,IntelliJ IDEA 是默认单Project单Module的,这时Project和Module合二为一,在没有修改存储路径的时候,显然Project对Module具有强约束作用!不过说实话,这里就是将Module的内容放在了Project的目录下,实际上还是Module自己约束自己。
创建一个新项目:
创建Java项目:
完成创建:
选择创建模块:
选择模块类型:这里选择创建Java模块:
给模块命名:
先从项目中remove:
彻底删除模块:
一个模块可以理解为相当于一个独立的小项目,但是它又区别于独立的项目,因为它们同属于一个工程,而且互相之间可以相互依赖,即一个模块可以使用另一个模块的类型。
例如:在class01_teacher_code02模块中需要使用class01_teacher_code01模块中的所有公共类,例如:Student类,可以通过如下操作。在Student stu = new Student();行按Alt +Enter,根据提示,点击Add dependency on module ‘class01_teacher_code01’:
如上操作会在class01_teacher_code02.iml文件中增加如下代码,表示依赖于class01_teacher_code01模块。此时class01_teacher_code01模块下所有公共的类在class01_teacher_code02模块下都可以使用了:
例如:在day18_teacher_code模块中需要使用day17_teacher_code模块中的com.drimwai.bean包中的公共类,而不是该模块下所有的公共类。因为我们面向对象的开发原则中有一个迪米特法则(Only talk to your immediate friends,翻译过来就是:只与直接的朋友通信)。那么,我们可以通过如下操作进行:
注意:以下操作仅限于Java9以及以上版本,Java8不支持。
在day17_teacher_code模块的src下建立module-info.java文件:
在module-info.java文件加如下代码:
module day17.teacher.code { exports com.drimwai.bean; }
当想要在当前项目中导入一个已存在的模块时,可以进行如下操作。
在所有调试中,调试一个Java程序是最简单的,主要有设置断点、启动调试、单步执行、结束调试几步。
设置断点:在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点:
启动调试:IDEA提供多种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)等等:
或
:Step Over(F8):进入下一步,如果当前行断点是调用一个方法,则不进入当前方法体内
:Step Into(F7):进入下一步,如果当前行断点是调用一个自定义方法,则进入该方法体内
:Force Step Into(Alt +Shift + F7):进入下一步,如果当前行断点是调用一个核心类库方法,则进入该方法体内
:Step Out(Shift + F8):跳出当前方法体
:Run to Cursor(Alt + F9):直接跳到下一个断点处继续调试
:Resume Program(F9):恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上
:Stop(Ctrl + F2):结束调试
:View Breakpoints(Ctrl + Shift + F8):查看所有断点
:Mute Breakpoints 使得当前代码后面所有的断点失效, 一下执行到底
IntelliJ IDEA 首次加载项目的时候,都会创建索引,而创建索引的时间跟项目的文件多少成正比。
在 IntelliJ IDEA 创建索引过程中即使你编辑了代码也是编译不了、运行不起来的,所以还是安安静静等 IntelliJ IDEA 创建索引完成。
IntelliJ IDEA 的缓存和索引主要是用来加快文件查询,从而加快各种查找、代码提示等操作的速度,所以 IntelliJ IDEA 的索引的重要性再强调一次也不为过。
但是,IntelliJ IDEA 的索引和缓存并不是一直会良好地支持 IntelliJ IDEA 的,某些特殊条件下,IntelliJ IDEA 的缓存和索引文件也是会损坏的,比如:断电、蓝屏引起的强制关机,当你重新打开 IntelliJ IDEA,很可能 IntelliJ IDEA 会报各种莫名其妙错误,甚至项目打不开,IntelliJ IDEA 主题还原成默认状态。即使没有断电、蓝屏,也会有莫名奇怪的问题的时候,也很有可能是 IntelliJ IDEA 缓存和索引出现了问题,这种情况还不少。遇到此类问题也不用过多担心。我们可以清理缓存和索引。如下:
一般建议点击 Invalidate and Restart,这样会比较干净。
上图警告:清除索引和缓存会使得 IntelliJ IDEA 的 Local History 丢失。所以如果你项目没有加入到版本控制,那你最好备份下你的 LocalHistory 目录。LocalHistory 目录在用户目录下,例如:C:\Users\Irene.IntelliJIdea2019.2\system。
通过上面方式清除缓存、索引本质也就是去删除 C 盘下的 system 目录下的对应的文件而已,所以如果你不用上述方法也可以手动删除整个 system。当 IntelliJ IDEA 再次启动项目的时候会重新创建新的 system 目录以及对应项目缓存和索引。
单击工具栏的打开项目设置。
选择Artifacts(打包部署),选择添加jar。
给导出的jar命名,确认导出的路径
确认创建或选择已有的Manifest.MF文件。单词“manifest”的意思是“显示” 。 这个 manifest 文件定义了与扩展和包相关的数据。
说明: 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息:
选择Manifest.MF文件存储目录:
如果需要可以填写jar的运行入口,main所在的类的全名称:(可选)
选择jar要包含的.class文件的目录,即哪些模块的out目录:
编译生成jar:
查看生成的jar:
在@Test后面按Alt + 回车,选择Add ‘JUnit4’ to classpath即可:
添加完成之后,在External Libraries中可以见到JUnit:
注意:如果Maven的本地仓库(例如:C:\Users\Irene.m2)中没有对应的library则需要联网从Maven的中央仓库中下载或从其他人那里拷贝对应的库。否则会报错:
如果目前无法联网,也无法拷贝对应maven仓库目录,但是你有JUnit的需要的jar包,那么也可以用如下方式指定:
将JUnit框架需要用到的jar包拷贝到当前项目(或模块)的libs目录中(没有libs目录的可以手动创建):
然后在项目代码中就可以使用JUnit了:
如果此时其他模块也想使用刚才添加的library怎么办?
例如:模块Class01想要使用刚才的JUnit的library,可以单击工具栏的
注意Scope:选择Complie,否则编译时,无法使用JUnit。
查看Class01模块的配置文件Class01.iml,发现多了一句配置。现在Class01模块中也可以使用JUnit了。
End! 感谢Drimwai的支持!!