第一章 开发工具IntelliJ IDEA
1.1 概述
IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE运行环境并配置好环境变量。 它可以极大地提升我们的开发效率。可以自动编译,检查错误。
1.2 安装
双击安装包进行安装
欢迎界面
无脑Next选择安装路径
不要装在C盘配置安装选项
建议只勾选64快捷启动方式开始菜单
无脑Next安装完毕
1.3首次启动
不导入任何设置
- 选择第二个,ok
创建一个项目
项目结构点击 new 按钮,配置安装的 JDK9 版本
不使用模板
为工程起名字 demo ,并存储到 d:\ideawork\demo 目录下,如果d盘没有这个目录,会自动创建
1.4idea常用快捷键
=========================================================================================================
Alt+回车 | 导入包,自动修正 |
---|---|
Ctrl+N | 查找类 |
Ctrl+Shift+N | 查找文件 |
Ctrl+Alt+L | 格式化代码 |
Ctrl+Alt+O | 优化导入的类和包 |
Alt+Insert | 生成代码(如get,set方法,构造函数等) |
Ctrl+E或者Alt+Shift+C | 最近更改的代码 |
Ctrl+R | 替换文本 |
Ctrl+F | 查找文本 |
Ctrl+Shift+Space | 自动补全代码 |
Ctrl+空格 | 代码提示 |
Ctrl+Alt+Space | 类名或接口名提示 |
Ctrl+P | 方法参数提示 |
Ctrl+Shift+Alt+N | 查找类中的方法或变量 |
Alt+Shift+C | 对比最近修改的代码 |
Shift+F6 | 重构-重命名 |
Ctrl+X | 删除行 |
Ctrl+D | 复制行 |
Ctrl+/ 或 Ctrl+Shift+/ | 注释(// 或者/…/ ) |
Ctrl+J | 自动代码 |
Ctrl+E | 最近打开的文件 |
Ctrl+H | 显示类结构图 |
Ctrl+Q | 显示注释文档 |
Alt+F1 | 查找代码所在位置 |
Alt+1 | 快速打开或隐藏工程面板 |
Ctrl+Alt+ left/right | 返回至上次浏览的位置 |
Alt+ left/right | 切换代码视图 |
Alt+ Up/Down | 在方法间快速移动定位 |
Ctrl+Shift+Up/Down | 代码向上/下移动。 |
F2 或Shift+F2 | 高亮错误或警告快速定位 |
代码标签输入完成后 | 按Tab,生成代码。 |
选中文本,按Ctrl+Shift+F7 | 高亮显示所有该文本,按Esc高亮消失。 |
Ctrl+W | 选中代码,连续按会有其他效果 |
选中文本,按Alt+F3 | 逐个往下查找相同文本,并高亮显示。 |
Ctrl+Up/Down | 光标跳转到第一行或最后一行下 |
Ctrl+B | 快速打开光标处的类或方法 |
第二章 方法
2.1回顾—方法的定义与调用
前面的课程中,使用过嵌套循环输出矩形,控制台打印出矩形就可以了,因此将方法定义为 void ,没有返回值。 在主方法 main 中直接被调用。
/*
* 方法入门基础知识
*
* 定义格式:
* public static void 方法名称() {
* 方法体;
* }
*
* 调用格式:
* 方法名称();
*
* 注意事项:
* 1,方法定义先后顺序无所谓
* 2,方法定义必须是挨着的,不能在一个方法内定义另一个方法
* 3,方法定义之后,自己不会执行,只有在调用后才会执行
*/
public class Demo01Method {
public static void main(String[] args) {
printMenthod();
}
public static void printMenthod() {
for (int i = 0; i < 5; i++) {
for (int i1 = 0; i1 < 20; i1++) {
System.out.print("*");
}
System.out.println();
}
}
}
print 方法被 main 方法调用后直接输出结果,而 main 方法并不需要 print 方法的执行结果,不需要返回值,所以被定义为 void 。
2.2方法的格式及含义
格式:
修饰符 返回值类型 方法名称(参数类型 参数名称,...) {
方法体;
return 返回值;
}
格式含义:
修饰符:现阶段的固定写法:public static
返回值类型:就是方法最终产生的数据结果的类型
方法名称:方法的名字,规则和变量一样,小驼峰
参数类型:进入方法的参数的数据类型
- PS:如果有多个参数,使用逗号进行分割
方法体:方法需要做的事情,若干行代码
return:两个作用,一是停止当前方法,二是将后面的返回值还给调用处
返回值:也就是方法执行后最终产生的数据
- 注意:return后面的“返回值”,必须和方法名称前面的“返回值类型”保持对应
方法的三要素:
- 返回数据类型
- 方法名称
- 参数列表
2.3方法的调用
方法的三种调用格式:
1,单独调用:方法名称(参数)
2,输出调用:System.out.println(方法名称(参数));
3,赋值调用:数据类型 变量名称 = 方法名称(参数);
注意:此前学习的方法,返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或则赋值调用
2.4调用方法的流程
1,找到方法
2,参数传递
3,执行方法体
4,带着返回值回到方法的调用处
package JavaRumen.Java04.demo02;
/*
* 方法其实就是若干语句的功能集合
*
* 方法好比是一个工厂
* 蒙牛工厂 原料:奶牛、饲料、水
* 产出物:奶制品
*
* 钢铁工厂 原料:铁矿石】煤炭
* 产出物:钢铁建材
*
* 参数(原料):就是进入方法的数据
* 返回值(产出物):就是从方法中出来的数据
*
* 定义方法的完整格式:
* 修饰符 返回值类型 方法名称(参数类型 参数名称,...) {
* 方法体;
* return 返回值;
* }
*
* 修饰符:现阶段的固定写法:public static
* 返回值类型:就是方法最终产生的数据结果的类型
* 方法名称:方法的名字,规则和变量一样,小驼峰
* 参数类型:进入方法的参数的数据类型
* PS:如果有多个参数,使用逗号进行分割
* 方法体:方法需要做的事情,若干行代码
* return:两个作用,一是停止当前方法,二是将后面的返回值还给调用处
* 返回值:也就是方法执行后最终产生的数据
* 注意:return后面的“返回值”,必须和方法名称前面的“返回值类型”保持对应
*
* 定义一个两个int数字相加的方法,三要素
* 返回数据类型:int
* 方法名称:sum
* 参数列表:int a, int b;
*
* 方法的三种调用格式:
* 1,单独调用:方法名称(参数)
* 2,输出调用:System.out.println(方法名称(参数));
* 3,赋值调用:数据类型 变量名称 = 方法名称(参数);
*
* 注意:此前学习的方法,返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或则赋值调用
*
* 方法调用的流程
* 1,找到方法
* 2,参数传递
* 3,执行方法体
* 4,带着返回值回到方法的调用处
* */
public class Demo02MethodDefine {
public static void main(String[] args) {
// 单独调用
sum(10, 20);
System.out.println("=============");
// 输出调用
System.out.println(sum(11, 22));
System.out.println("=============");
// 赋值调用
int number= sum(3, 7);
System.out.println("变量的值" + number);
}
public static int sum(int a, int b){
System.out.println("方法执行了!");
// int result = a + b;
// return result; // 变量声明和赋值占用了内存,造成了冗余,建议使用精简版
return a + b; // 精简版
}
}
2.5方法参数的有无
有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数
- 例如:两个数子相加,必须知道数字的值是多少,才能相加
无参数:小括号当中留空,一个方法不需要任何数据条件,自己就能完成任务,就是无参数
- 例如:定义一个方法,打印固定10此HelloWorld!
package JavaRumen.Java04.demo02;
/*
* 有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数
* 例如:两个数子相加,必须知道数字的值是多少,才能相加
* 无参数:小括号当中留空,一个方法不需要任何数据条件,自己就能完成任务,就是无参数
* 例如:定义一个方法,打印固定10此HelloWorld!
* */
public class Demo03MethodParam {
public static void main(String[] args) {
method1(10, 7);
System.out.println("=============");
method02();
}
// 两个数字相乘,做乘法,必须知道数据的值,否者无法计算
// 有参数
public static void method1(int a, int b){
int result = a * b;
System.out.println("结果是" + result);
}
// 打印输出10此文本字符串,不需要参数,可以自己完成
// 无参数
public static void method02(){
for (int i = 0; i < 10; i++) {
System.out.println("Hello world!" + i);
}
}
}
2.6方法返回值的有无
有:对于有返回值的方法,可以使用单独调用、打印调用和赋值调用【必须写返回值】
无:但是对于无返回值的方法,只能使用单独调用,不呢个使用打印调用或则赋值调用【必须不写返回值】
package JavaRumen.Java04.demo02;
/*
* 题目要求:定义一个方法,用来【求出】两个数据之和,(你帮我算,算完之后把结果告诉我)
* 题目变形:定义一个方法,用来【打印】两个数据之和。(你来计算,算完之后你自己负责显示结果,不用告诉我)
*
* 注意事项:
* 对于有返回值的方法,可以使用单独调用、打印调用和赋值调用(必须写返回值)
* 但是对于无返回值的方法,只能使用单独调用,不呢个使用打印调用或则赋值调用(必须不屑返回值)
* */
public class Demo04MethodReturn {
public static void main(String[] args) {
// 我是main方法,我来调用你
// 我调用你,你来帮我计算一下,算完之后,把结果告诉我的num变量
int num = getSum(10, 20);
System.out.println("返回值是" + num);
System.out.println("==============");
printSum(100, 200);
System.out.println("==============");
System.out.println(getSum(2, 3)); // 正确写法
getSum(3, 5); // 正确写法,但是没有用到返回值
System.out.println("==============");
// 对于void没有返回值的方法,只能单独,不能打印或者赋值
// System.out.println(printSum(2, 3)); // 错误写法
// int num2 = printSum(2, 3); // 错误写法
}
// 我是一个方法,我负责两个数字相加
// 我有返回值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);
}
}
2.7方法的练习
1,定义一个方法,用来判断两个数字是否相同
package JavaRumen.Java04.demo03;
/*
* 题目要求:
* 定义一个方法,用来判断两个数字是否相同
* */
public class Demo01MethodSame {
public static void main(String[] args) {
// if (isSame(10, 10)) {
// System.out.println("两个数字的值相等");
// }else {
// System.out.println("两个数字不相等");
// }
System.out.println(isSame(10, 20)); // false
System.out.println(isSame(10, 10)); // true
}
/*
* 三要素:
* 返回值类型:boolean
* 方法名称:isSame
* 参数列表:int a, int b
* */
public static boolean isSame(int a, int b){
// boolean same;
// if (a == b) {
// same = true;
// }else {
// same = false;
// }
// boolean same = a == b ? true: false;
// boolean same = a == b;
return a == b;
}
}
2,定义一个方法,用来求出1-100的累加和
package JavaRumen.Java04.demo03;
/*
* 定义一个方法,用来求出1-100的累加和
* */
public class Demo02MethodSum {
public static void main(String[] args) {
sum1();
System.out.println("===================");
System.out.println("1-100的累加和是" + sum2());
}
/*
* 三要素
* 返回值:有返回值,计算结果是个int
* 方法名称:getSum
* 参数列表:数据范围已确定,为固定,不需要数据条件,无参数
* */
public static void sum1(){
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1-100的累加和是" + sum);
}
public static int sum2(){
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
3,定义一个方法用来打印指定要求的HelloWorld
package JavaRumen.Java04.demo03;
/*
* 题目要求:
* 定义一个方法用来打印指定要求的HelloWorld
* */
public class Demo03MethodPrint {
public static void main(String[] args) {
printCount(10);
}
/*
* 三要素:
* 返回值:只是打印操作,无计算,无结果,不需要返回值
* 参数名称:printCount
* 参数列表:打印次数
* */
public static void printCount(int num ) {
for (int i = 1; i <= num; i++) {
System.out.println("Hello World!" + i);
}
}
}
2.8 方法的注意事项
1,方法应该定义在类中,但是不能在方法中再定义方法。不能嵌套
2,方法定义的前后顺序无所谓
3,方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用
4,如果方法有返回值,那么必须写上“return 返回值”,不能没有
5,return后面的返回值数据,必须和方法的返回值类型对应
6,对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己
7,对于void方法当中的最后一行的return可以省略不写
8,一个方法中可以有多个return语句,但是必须保证同时只有一个return会被执行到,两个return不能连写
package JavaRumen.Java04.demo03;
/*
* 使用方法时的注意事项:
* 1,方法应该定义在类中,但是不能在方法中再定义方法。不能嵌套
* 2,方法定义的前后顺序无所谓
* 3,方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用
* 4,如果方法有返回值,那么必须写上“return 返回值”,不能没有
* 5,return后面的返回值数据,必须和方法的返回值类型对应
* 6,对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己
* 7,对于void方法当中的最后一行的return可以省略不写
* 8,一个方法中可以有多个return语句,但是必须保证同时只有一个return会被执行到,两个return不能连写
*
* */
public class Demo04MethodNotice {
public static void main(String[] args) {
System.out.println(getMax(10, 20));
}
public static int method1() {
return 10;
}
public static void method2() {
// return 10; // 错误写法! void方法没有返回值,return后面不能写返回值
return; // 没有返回值,作用:结束方法执行
}
public static void method3() {
System.out.println("AAA");
System.out.println("BBB");
// return; // void方法的最后一行的return可以不写
}
public static int getMax(int a, int b) {
// int max;
// if (a > b) {
// max = a;
// }else {
// max = b;
// }
// return max;
if (a > b) {
return a;
// return a;
}else {
return b;
}
// return a > b ? a : b;
}
}
2.9 方法的重载
概念
方法的重载(Overload):多个方法名称一样,但是参数列表不一样
重载的相关因素
不同时,可以建立重载
1,参数个体不同
2,参数类型不同
3,参数的多类型顺序不同
重载的无关因素
不同时,无法建立重载,会报错
1,与参数的名称无关
2,与方法返回值类型无关
package JavaRumen.Java04.demo04;
/*
* 对于功能类似的方法来说,因为参数列表的不一样,却要记住很多不同的方法名称,太麻烦
*
* 方法的重载(Overload):多个方法名称一样,但是参数列表不一样
* 好处:只要记住一个方法名称就可以实现类似的多个功能
*
* 方法的重载与下列因素相关(不同时,可以建立重载)
* 1,参数个体不同
* 2,参数类型不同
* 3,参数的多类型顺序不同
*
* 方法的重载与下列因素相关(不同时,无法建立重载,会报错)
* 1,与参数的名称无关
* 2,与方法返回值类型无关
* */
public class Demo01MethodOverload {
public static void main(String[] args) {
/*System.out.println(sumTwo(10, 20)); // 30
System.out.println(sumThree(10, 20,30)); // 60
System.out.println(sumFour(10, 20, 30, 40)); // 100*/
System.out.println(sum(10, 20)); // 两个参数的方法
System.out.println(sum(10, 20, 30)); // 三个参数的方法
System.out.println(sum(10, 20, 30, 40)); // 四个参数的方法
// System.out.println(sum(10, 20, 30, 40, 50)); // 找不到任何方法来匹配,所以错误
}
public static int sum(int a , double b) {
return (int) (a + b);
}
public static int sum(double a , int b) {
return (int) (a + b);
}
public static int sum(int a, int b) {
System.out.println("有2个参数的方法在执行");
return a + b ;
}
// 错误写法!重载与返回值数据类型无关
// public static double sum(int a, int b) {
// return (a + b + 0.0) ;
// }
// 错误写法,重载与参数名称无关
// public static int sum(int x, int y) {
// return x + y ;
// }
public static int sum(int a, int b, int c) {
System.out.println("有3个参数的方法在执行");
return a + b + c ;
}
public static int sum(int a, int b, int c, int d) {
System.out.println("有4个参数的方法在执行");
return a + b + c + d;
}
}
重载的练习
1,比较两个数据是否相等
package JavaRumen.Java04.demo04;
/*
* 题目要求:
* 比较两个数据是否相等
* 参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,
* 并在main方法中进行测试
* */
public class Demo02MethodOverloadSame {
public static void main(String[] args) {
byte num1 = 10, num2 = 20;
System.out.println( isSame(num1, num2) );
System.out.println( isSame( (byte)20, (byte)20) );
short num3 = 20, num4 = 20;
System.out.println( isSame(num3, num4) );
System.out.println( isSame( (short)11, (short)21 ) );
System.out.println( isSame(10, 20) );
long num5 = 100L, num6 = 90L;
System.out.println( isSame(num5, num6) );
System.out.println( isSame( 200L, 200L ) );
}
public static boolean isSame(byte a, byte b) {
System.out.println("两个byte的方法执行");
boolean same;
if (a == b) {
same = true;
}else {
same = false;
}
return same;
}
public static boolean isSame(short a, short b) {
System.out.println("两个short的方法执行");
if (a == b) {
return true;
}else {
return false;
}
}
public static boolean isSame(int a, int b) {
System.out.println("两个int的方法执行");
return a == b ? true : false;
}
public static boolean isSame(long a, long b) {
System.out.println("两个long的方法执行");
return a == b;
}
}
2,判断哪些方法是重载关系
public static void open(){}
public static void open(int a){}
static void open(int a,int b){}
public static void open(double a,int b){}
public static void open(int a,double b){}
public void open(int i,double d){}
public static void OPEN(){}
public static void open(int i,int j){}
public static void open(){} // 真确重载
public static void open(int a){} // 真确重载
static void open(int a,int b){} // 代码错误 与第8行冲突
public static void open(double a,int b){} // 正确重载
public static void open(int a,double b){} // 代码错误,与第6行冲突
public void open(int i,double d){} // 代码错误,与第5行冲突
public static void OPEN(){} // 代码真确,但不是有效重载
public static void open(int i,int j){} // 代码错误,与第3行冲突
方法重载关系的判断
方法重载的主要形式有:参数的个体不同、参数的类型不同、参数的顺序不同,与形参变量名和返回值类型无关,但建议返回值类型最好相同
判断方法是否重载的核心:调用能否区分
3,实现重载的println方法
package JavaRumen.Java04.demo04;
// byte short int long float double char boolean
// String
// 在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式
public class Demo04OverloadPrint {
public static void main(String[] args) {
myPrint(3.14);
myPrint("ddd");
myPrint('3');
}
public static void myPrint(byte num) {
System.out.println(num);
}
public static void myPrint(short num) {
System.out.println(num);
}
public static void myPrint(int num) {
System.out.println(num);
}
public static void myPrint(long num) {
System.out.println(num);
}
public static void myPrint(float num) {
System.out.println(num);
}
public static void myPrint(double num) {
System.out.println(num);
}
public static void myPrint(char zifu) {
System.out.println(zifu);
}
public static void myPrint(boolean is) {
System.out.println(is);
}
public static void myPrint(String str) {
System.out.println(str);
}
}
// 10.fori 快捷创建10此循环
//