开发工具IntelliJ IDEA
开发工具概述
IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE运行环境并配置好环境变量。它可以极大地提升我们的开发效率。可以自动编译,检查错误。在公司中,使用的就是IDEA进行开发。
IDEA软件安装
进入官网https://www.jetbrains.com/idea/download/#section=windows,下载我们需要的版本进行安装。此软件集成了32位和64位,双击下载好的版本ideaIU-2017.3.2.exe 进入安装。
- 1. 欢迎界面
- 2. 选择安装路径,路径中最好不要包括中文和空格。
- 3. 配置安装选项
- 4. 添加到开始菜单
- 5. 安装完毕
IDEA的项目结构
项目结构如下图所示
IDEA首次驱动
- 1. 选择不导入任何设置,点击 OK
- 2. 选择 Create New Project
- 3. 点击 new 按钮,配置安装的 JDK9 版本
- 4. 不使用模板
- 5. 为工程起名字 demo ,并存储到 d:\ideawork\demo 目录下,如果d盘没有这个目录,会自动创建。
- 6. 打开一个每日一帖对话框,勾掉每次启动显示,点击 close
- 7. IDEA的工作界面,我们的项目已经创建好了,如果再新建项目,点击 File->new->Project
创建包和类
- 1. 展开创建的工程,在源代码目录 src 上,鼠标右键,选择 new->package ,键入包名 com.itheima.demo ,点击确定。
- 2. 在创建好的包上,鼠标右键,选择 new->class 创建类,键入类名。
- 3. 在代码编辑区,键入主方法,并输出 HelloWorld 。
- 4. 运行程序,在代码编辑区鼠标右键,选择 Run HelloWorld 即可,或在菜单中选择 Run->Run HelloWorld 。
字体设置
IDEA工具的默认字体非常小,代码编辑器和控制台的输出字体都需要进行调整。
- 点击菜单栏上的 File->Settings->Editor->Font 修改字体
IDEA的项目目录
我们创建的项目,在d:\ideawork目录的demo下
- .idea 目录和 demo.iml 和我们开发无关,是IDEA工具自己使用的
- out 目录是存储编译后的.class文件
- src 目录是存储我们编写的.java源文件
IDEA常用快捷键
IDEA修改快捷键
在IDEA工具中, Ctrl+空格 的快捷键,可以帮助我们补全代码,但是这个快捷键和Windows中的输入法切换快捷键冲突,需要修改IDEA中的快捷键。
- File->Settings->keymap->Main menu->code->Completion->Basic
IDEA导入和关闭项目
- 关闭IDEA中已经存在的项目, File->Close Project
- File->Close Project 这时IDEA回到了刚启动界面,点击项目上的 X ,IDEA中就没有这个项目了
- 在IDEA的启动界面上,点击 OPEN ,选择项目目录即可
- 若想通过IDEA同时开启多个项目,点击OPEN打开项目时,点击New Window按钮
方法
概述
我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
定义方法的格式
格式详解:
- 修饰符:控制方法的访问权限和状态的关键字。现在我们一般使用public static修饰,以后根据需求来确定。
- 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
- 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处
- 参数类型:进入方法的数据是什么类型
- 参数名称:进入方法的数据对应的变量名称
- 参数如果有多个,使用逗号进行分隔
小贴士:
- return 结果; 这里的"结果"在开发中,我们正确的叫法成为方法的返回值
- return后面的“返回值”,必须和方法名称前面的“返回值类型”,保持对应。
定义方法的三个明确
- 明确返回值类型
- 明确参数列表
- 明确方法名称
举例
定义方法实现两个整数的求和计算
分析:
- 明确返回值类型:方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型。
- 明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义两个int类型的变量,由调用者调用方法时传递
- 明确方法名称:符合标识符的是规则就可以,最好是见名知意
代码实现
package demo01; public class Demo02Method { public static void main(String[] args) { /* 调用方法getSum,传递两个整数,这里传递的实际数据又称为实际参数 并接收方法计算后的结果,返回值 */ int sum = getSum(5, 6); System.out.println(sum);//11 } /* 定义计算两个整数和的方法 返回值类型和计算 参数:不确定数据求和,定义int参数.参数又称为形式参数 */ public static int getSum(int a, int b) { return a + b; } }
程序执行,主方法 main 调用 getSum 方法,传递了实际数据 5和6 ,两个变量 a和b 接收到的就是实际参数,并将计算后的结果返回,主方法 main 中的变量 sum 接收的就是方法的返回值。
调用方法的三种形式
- 直接调用:直接写方法名调用
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
- 输出语句调用:在输出语句中调用方法, System.out.println(方法名()) 。
注意事项:
- 对于有返回值的方法,可以使用单独调用、打印调用或者赋值调用。
- 但是对于无返回值的方法,只能使用单独调用,不能使用打印调用或者赋值调用。
举例
package demo01; /* 参数(原料):就是进入方法的数据。 返回值(产出物):就是从方法中出来的数据。 定义方法的完整格式: 修饰符 返回值类型 方法名称(参数类型 参数名称, ...) { 方法体 return 返回值; } 修饰符:现阶段的固定写法,public static 返回值类型:也就是方法最终产生的数据结果是什么类型 方法名称:方法的名字,规则和变量一样,小驼峰 参数类型:进入方法的数据是什么类型 参数名称:进入方法的数据对应的变量名称 PS:参数如果有多个,使用逗号进行分隔 方法体:方法需要做的事情,若干行代码 return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处 返回值:也就是方法执行后最终产生的数据结果 注意:return后面的“返回值”,必须和方法名称前面的“返回值类型”,保持对应。 定义一个两个int数字相加的方法。三要素: 返回值类型:int 方法名称:sum 参数列表:int a, int b 方法的三种调用格式。 1. 单独调用:方法名称(参数); 2. 打印调用:System.out.println(方法名称(参数)); 3. 赋值调用:数据类型 变量名称 = 方法名称(参数); 注意:此前学习的方法,返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。 */ public class Demo02MethodDefine { public static void main(String[] args) { // 单独调用 sum(10, 20); // 打印调用 System.out.println(sum(10, 20)); // 30 // 赋值调用 int number = sum(15, 25); number += 100; System.out.println("变量的值:" + number); // 变量的值:140 } public static int sum(int a, int b) { return a + b; } }
调用方法的流程图解
如何确定方法是否需要定义参数
package demo01; /* 有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。 例如两个数字相加,必须知道两个数字是各自多少,才能相加。 无参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。 例如定义一个方法,打印固定10次HelloWorld。 */ public class Demo03MethodParam { public static void main(String[] args) { //有参数的方法 method1(10, 20); //没有参数方法 method2(); } // 有参数,两个数字相乘,做乘法,必须知道两个数字各自是多少,否则无法进行计算 public static void method1(int a, int b) { int result = a * b; System.out.println("结果是:" + result); } // 例如打印输出固定10次文本字符串 public static void method2() { for (int i = 0; i < 10; i++) { System.out.println("Hello, World!" + i); } } }
如何确定方法是否有返回值
package demo01; /* 定义一个方法,用来【求出】两个数字之和。(你帮我算,算完之后把结果告诉我。) 定义一个方法,用来【打印】两个数字之和。(你来计算,算完之后你自己负责显示结果,不用告诉我。) */ public class Demo04MethodReturn { public static void main(String[] args) { // 我是main方法,我来调用你。 // 我调用你,你来帮我计算一下,算完了之后,把结果告诉我的num变量 int num = getSum(10, 20); System.out.println("返回值是:" + num);//返回值是:30 printSum(100, 200); } // 我是一个方法,我负责两个数字相加。 // 我有返回值int,谁调用我,我就把计算结果告诉谁 public static int getSum(int a, int b) { int result = a + b; return result; } // 我是一个方法,我负责两个数字相加。 // 我没有返回值,不会把结果告诉任何人,而是我自己进行打印输出。 public static void printSum(int a, int b) { int result = a + b; System.out.println("结果是:" + result);//结果是:300 } }
使用方法的时候,注意事项:
- 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
- 方法定义的前后顺序无所谓。
- 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
- 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
- return后面的返回值数据,必须和方法的返回值类型,对应起来。
- 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
- 对于void方法当中最后一行的return可以省略不写。
- 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
举例
public class Demo04MethodNotice { public static void method1() { // return 10; 错误的写法!方法没有返回值,return后面就不能写返回值。 return; // 没有返回值,只是结束方法的执行而已。 } public static void method2() { System.out.println("AAA"); // return; 最后一行的return可以省略不写。 } public static int getMax(int a, int b) { //一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。 if (a > b) { return a; } else { return b; } } }
方法重载
方法重载
- 指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表
- 个数不同,数据类型不同,顺序不同。
重载方法调用
- JVM通过方法的参数列表,调用不同的方法。
举例
package demo03; /* 对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。 方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。 好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。 方法重载与下列因素相关: 1. 参数个数不同 2. 参数类型不同 3. 参数的多类型顺序不同 方法重载与下列因素无关: 1. 与参数的名称无关 2. 与方法的返回值类型无关 */ public class Demo01MethodOverload { public static void main(String[] args) { //定义不同数据类型的变量 byte a = 10; byte b = 20; short c = 10; short d = 20; int e = 10; int f = 10; long g = 10; long h = 20; // 调用 System.out.println(compare(a, b));//false System.out.println(compare(c, d));//false System.out.println(compare(e, f));//true System.out.println(compare(g, h));//false } // 两个byte类型的 public static boolean compare(byte a, byte b) { return a == b; } // 两个short类型的 public static boolean compare(short a, short b) { return a == b; } // 两个int类型的 public static boolean compare(int a, int b) { return a == b; } // 两个long类型的 public static boolean compare(long a, long b) { return a == b; } }