1.IDEA项目结构
层级关系:
project(工程)-module(模块)-package(包)-class(类)
具体的:
一个project中可以创建多个module
一个module可以创建多个package
一个package中可创建多个class

1.1.Project和Module的概念
在 IntelliJ IDEA 中,提出了Project和Module这两个概念。

在 IntelliJ IDEA 中Project是 最顶级的结构单元 ,然后就是Module。目前,主流的大型项目结构基本都是
多Module的结构,这类项目一般是 按功能划分 的,比如:user-core-module、user-facade-module和user-
hessian-module等等,模块之间彼此可以 相互依赖 ,有着不可分割的业务关系。因此,对于一个Project
来说:
- 当为单Module项目的时候,这个单独的Module实际上就是一个Project。
- 当为多Module项目的时候,多个模块处于同一个Project之中,此时彼此之间具有互相依赖的关联关系。
- 当然多个模块没有建立依赖关系的话,也可以作为单独一个“小项目”运行。
1.2.创建Module
建议创建“Empty空工程”,然后创建多模块,每一个模块可以独立运行,相当于一个小项目。JavaSE阶段
不涉及到模块之间的依赖。后期再学习模块之间的依赖。
步骤:
(1)选择创建模块

(2)选择模块类型:这里选择创建Java模块,给模块命名,确定存放位置

(4)模块声明在工程下面

1.3.删除模块
(1)移除模块


(2)彻底删除模块

1.4.导入老师的模块
(1)将老师的模块 teacher_chapter04 整个的复制到自己IDEA项目的路径下

接着打开自己IDEA的项目,会在项目目录下看到拷贝过来的module,只不过不是以模块的方式呈现。

(2)查看Project Structure,选择import module


(3)选择要导入的module:


(4)接着可以一路Next下去,最后选择Overwrite

最后点击ok即可了
1.5.同事打开两个IDEA项目工程
1、两个IDEA项目工程效果
有些同学想要把上课练习代码和作业代码分开两个IDEA项目工程。


2、新建一个IDEA项目
注意:第一次需要新建,之后直接打开项目工程即可



3、打开两个IDEA项目


1.6.导入前几章非IDEA工程代码
1、创建chapter01、chapter02、chapter03等章节的module
将相应章节的源文件粘贴到module的src下。


打开其中各个源文件,会发现有乱码。比如:

2、设置编码
当前项目是UTF-8。如果原来的.java文件都是GBK的(如果原来.java文件有的是GBK,有的是UTF-8就比较
麻烦了)。
可以单独把这两个模块设置为GBK编码的。

改为GBK,确认即可。如图:

2.代码模板的使用
2.1 查看Postfix Completion模板(后缀补全)

2.2 查看Live Templates模板(实时模板)

2.3 常用代码模板
1、非空判断
- 变量.null:if(变量 == null)变量.nn:
- if(变量 != null)变量.notnull:if(变量 != null)
- ifn:if(xx == null)
- inn:if(xx != null)
public class index { public static void main(String[] args) { //1.非空判断,定义一个str变量名,后缀补全 String str="hello"; int number=110; if(str==null){ } //str变量名.null if (str == null) { } //str变量名.nn if (str != null) { } //str变量名.notnull if (str != null) { } //ifn if (str == null) { } //inn if (str != null) { } } }
2、遍历数组和集合
- 数组或集合变量.fori:for循环
- 数组或集合变量.for:增强for循环
- 数组或集合变量.forr:反向for循环
- 数组或集合变量.iter:增强for循环遍历数组或集合
import java.util.ArrayList; public class index { public static void main(String[] args) { //遍历数组、集合 int[]arr=new int[]{2,10,20,30,40,50}; //创建数组 //一般的for循环:变量名arr.fori for (int i = 0; i < arr.length; i++) { } //增强的for循环:变量名arr.for for (int i : arr) { } //倒序的for循环:forr for (int i = arr.length - 1; i >= 0; i--) { } testArr(); //在main包下调用函数 //增强的for循环遍历数组或集合:arr.iter for (int i : arr) { } ArrayList list=new ArrayList(); //创建一个数组 //变量名list.fori for (int i = 0; i < list.size(); i++) { } //变量名list.for for (Object o : list) { } //变量名list.forr,倒序 for (int i = list.size() - 1; i >= 0; i--) { } //变量名list.iter for (Object o : list) { } } /* * 题目:提供一个数组int[] arr=new int[]{2,20,30,40,50,60}; * 遍历数组每一个元素,将数组每个位置的元素与第1个元素做除法,得到的结果作为该位置上的新值 * * */ public static void testArr(){ int[] arr=new int[]{2,20,30,40,50,60}; //错误的写法 // for (int i = 0; i < arr.length; i++) { // arr[i]=arr[i]/arr[0]; // } //解决方案:倒序的写法,会依次从60/2,50/2,40/2开始循环 for (int i = arr.length - 1; i >= 0; i--) { arr[i]=arr[i]/arr[0]; } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
3、输出语句
- sout:相当于System.out.println
- soutm:打印当前方法的名称
- soutp:打印当前方法的形参及形参对应的实参值
- soutv:打印方法中声明的最近的变量的值
- 变量.sout:打印当前变量值
- 变量.soutv:打印当前变量名及变量值
import java.util.Arrays; public class index { public static void main(String[] args) { //输出语句,简略写法:sout System.out.println(123); System.out.println("hello baby"); //简略写法:soutm System.out.println("index.main"); //打印当前的方法名称 //简略写法:soutp System.out.println("args = " + Arrays.toString(args)); //打印当前方法的形参对应的实参值 int num=10; System.out.println("num = " + num); //soutv:打印最近的变量 String str="baby"; System.out.println("str = " + str); //soutv:打印最近的变量 int arr=100; System.out.println("arr = " + arr); //soutv:打印最近的变量 System.out.println("baby"); //写法:"baby".sout System.out.println("100 = " + 100); //写法"100".outv } public void test1(int num,String str){ //简略写法:soutm System.out.println("index.test1"); //简略写法:soutp System.out.println("num = " + num ); //形参 System.out.println("num = " + num + ", str = " + str); //两个不同类型的形参 } }
4、对象操作
- 4.1、创建对象
- 1、Xxx.new .var :创建Xxx类的对象,并赋给相应的变量
- 2、Xxx.new .field:会将方法内刚创建的Xxx对象抽取为一个属性
- 4.2、强转
- 对象.cast:将对象进行强转
- 对象.castvar:将对象强转后,并赋给一个变量
public class index { private static String name; public static void main(String[] args) { //对象操作,Java一切皆对象 String str1=new String(); String name = new String(); //String().new创建一个对象,然后在.var复制给一个变量名:name index.name = new String(); //String().new创建一个对象,然后在.field会将方法内刚创建的name抽取为一个属性 Object obj=new String(); //创建一个对象 String obj1 = (String) obj; //写法obj.cast.var,使用创建的对象.cast,将obj进行强转成字符串,然后用在.var赋值给一个变量名obj1 String obj2 = (String) obj; //写法obj1.castvar,使用obj对象.castvar强转后赋值给一个变量名 } }
5、静态常量声明
- psf:public static final
- psfi:public static final int
- psfs:public static final String
- prsf:private static final
public class index { public static final int NUM=10; //写法:psf public static final int NUMBER=100; //写法:psfi public static final String NAME="彭于晏"; //写法:psfs private static final double PI=3.14; //写法:prsf public static void main(String[] args) { //静态常量声明 //注意需要在成员变量的位置 } }
3.自定义代码模板
3.1.自定义后缀补全模板


import java.util.ArrayList; public class TemplatesTest1 { public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); 写法很长 ArrayList<String> list = new ArrayList<>(); 简略写法:ArrayList.list按enter即可 ArrayList<Integer> arry1 =new ArrayList<>(); 简略写法:Integer.list按enter即可 ArrayList<Double> arry2 =new ArrayList<>(); 简略写法:Double.list按enter即可,这里我们设置了变量名可以自定义 } }
3.2.自定义Live Templates
例如:定义sop代表System.out.print();语句
①在Live Templates中增加模板

②先定义一个模板的组,这样方便管理所有自定义的代码模板

③在模板组里新建模板

④定义模板(以输出语句为例)

- Abbreviation:模板的缩略名称
- Description:模板的描述
- Template text:模板的代码片段
- 模板应用范围。比如点击Define。选择如下:应用在java代码中。
其它模板1:单元测试模板:(需要将@Tets用ALT+ENTER创建一个JUnit4包,必须在联网的情况下!)

其它模板2:创建多线程


浙公网安备 33010602011771号