1_1_11_01开发工具IntelliJ IDEA
1.3 创建包、查看包的目录结构
- 展开创建的工程,在源代码目录
src
上,鼠标右键,选择new->package
,键入包名com.itheima.demo
,
点击确定。
右键点击 com.itheima.demo ,选择 Show in Explorer ,会发现创建包的目录结构。Show in Explorer
1.5 字体设置(File->Settings->Editor->Font)
IDEA工具的默认字体非常小,代码编辑器和控制台的输出字体都需要进行调整。
- 点击菜单栏上的
File->Settings->Editor->Font
修改字体。 - 12–>16
1.6 IDEA的项目目录
我们创建的项目,在d:\ideawork目录的demo下
.idea
目录和 demo.iml
和我们开发无关,是IDEA工具自己使用的
out
目录是存储编译后的.class文件
src
目录是存储我们编写的.java源文件
1.7 IDEA常用快捷键
快捷键 | 功能 |
---|---|
Alt+Enter | 导入包,自动修正代码 |
Ctrl+Y | 删除光标所在行 |
Ctrl+D | 复制光标所在行的内容,插入光标位置下面 |
Ctrl+Alt+L | 格式化代码 |
Ctrl+/ | 单行注释 |
Ctrl+Shift+/ | 选中代码注释,多行注释,再按取消注释 |
Alt+Ins | 自动生成代码,toString,get,set等方法 |
Alt+Shift+上下箭头 | 移动当前代码行 |
1、ctrl+D和Ctrl+Y,复制一行,删除一行,挺好用的,不用再ctrl+c,ctrl+v了
2、Ctrl+Alt+L 快速格式化,建议随手使用
3、Ctrl+Shift+/ 多行注释
完整选中你要/**/的那句话,再按 Ctrl+Shift+/
4.Alt+Insert,自动生成对象方法
5.Alt+Shift+上下箭头,不需要复制粘贴了
这里面最好要会的是,
Ctrl+Alt+L| 格式化代码
Alt+Enter| 导入包,自动修正代码
再加一个shift+F6
选中它,可以按shift+F6
,这样所有所有用到这个变量名的地方就会一起变
但是!
怎么样才能把所有的方法名都同时改掉? IDEA里还是用shift+F6
,但只有private私有方法才可以被同时修改
1.8 IDEA修改自动补全‘Ctrl+空格’–>快捷键
在IDEA工具中, Ctrl+空格
的快捷键,可以帮助我们补全代码,但是这个快捷键和Windows中的输入法切换快捷键冲突,需要修改IDEA中的快捷键。
keymap用Duplicate复制一份De***t copy,他的意思是本来的设置我不动,复制一份设置再进行修改
代码自动补全在File->Settings->keymap->Main menu->code->Completion->Basic
win7或者win10的搜狗拼音中,中英文的切换是shift,但整个输入法的开关是Ctrl+空格。
就是电脑主机里,ctrl+空格,一按,输入法就会被关闭(微软输入法和搜狗输入法都是这个快捷键)
双击 Basic->remove->Ctrl+空格
再次双击 Basic->Add Keyboard->键入 Alt+/->点击OK
那个功能Cyclic Expand Word
我们用不上(黑马的老师这么说的),所以可以覆盖,不用管。
The shortcut is already assigned to other actions. Do you want to remove other assignments?
别的设置有这个快捷键了,要不要把他删除?
要删的,alt+/,独我一个人用
完成,
alt+/,可以唤醒提示,不用再删掉重来了
小贴士:同时打开多个项目
若想通过IDEA同时开启多个项目,点击OPEN打开项目时,点击New Window按钮
1.9 同时打开两个Module
import module
然后next
于是就有2个module了
点setup,然后直接OK
成功完成模块导入
1_1_12_08方法
方法定义
package cn.itcast.day04.demo02;
/* 方法其实就是若干语句的功能集合。 方法好比是一个工厂。 蒙牛工厂 原料:奶牛、饲料、水 产出物:奶制品 钢铁工厂 原料:铁矿石、煤炭 产出物:钢铁建材 参数(原料):就是进入方法的数据。 返回值(产出物):就是从方法中出来的数据。 定义方法的完整格式: 修饰符 返回值类型 方法名称(参数类型 参数名称, ...) { 方法体 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("===========");
// 打印调用
System.out.println(sum(10, 20)); // 30
System.out.println("===========");
// 赋值调用
int number = sum(15, 25);
number += 100;
System.out.println("变量的值:" + number); // 140
}
public static int sum(int a, int b) {
System.out.println("方法执行啦!");
int result = a + b;
return result;
}
}
矩形打印
加上了 System. out . println();
才能让星号每20个换一行。
没有这句话的话,就会100个全在一行了
2.4 调用方法的流程图解
print 方法被 main 方法调用后直接输出结果,而 main 方法并不需要 print 方法的执行结果,所以被定义为void 。
方法定义的注意事项:
1、方法定义的先后顺序无所谓。
2、方法定义必须是挨着的,不能在一个方法的内部定义另外一个方法。(不能嵌套定义)
3、方法定义之后,自己不会执行的;如果希望执行,一定要进行方法的调用
2.5 定义方法练习:“两个明确”原则
练习一
(1)比较两个整数是否相同
- 分析:定义方法实现功能,需要有两个明确,即
返回值
和参数列表
。 - 明确返回值:比较整数,比较的结果只有两种可能,相同或不同,因此结果是布尔类型,比较的结果相同为true,不同为false。
- 明确参数列表:比较的两个整数不确定,所以默认定义两个int类型的参数。
public class Method_Demo2 {
public static void main(String[] args) {
// 调用方法getSum,传递两个整数,这里传递的实际数据又称为实际参数
// 并接收方法计算后的结果,返回值
int sum = getSum(5, 6);
System.out.println(sum);
}
/* 定义计算两个整数和的方法 返回值类型,计算结果是int 参数:不确定数据求和,定义int参数.参数又称为形式参数 */
public static int getSum(int a, int b) {
return a + b;
}
}
练习二
(2)计算1+2+3…+100的和
- 分析:定义方法实现功能,需要有两个明确,即
返回值
和参数
。 - 明确返回值:1~100的求和,计算后必然还是整数,返回值类型是int
- 明确参数:需求中已知到计算的数据,没有未知的数据,不定义参数
public class Method_Demo4 {
public static void main(String[] args) {
//调用方法getSum
//并接收方法计算后的结果,整数
int sum = getSum();
System.out.println(sum);
}
/* 定义计算1~100的求和方法 返回值类型,计算结果整数int 参数:没有不确定数据 */
public static int getSum() {
//定义变量保存求和
int sum = 0;
//从1开始循环,到100结束
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
return sum;
}
}
练习三
(3)实现不定次数打印
1.分析:定义方法实现功能,需要有两个明确,即 返回值
和 参数
。
2.明确返回值:方法中打印出 HelloWorld 即可,没有计算结果,返回值类型 void 。
3.明确参数:打印几次不清楚,参数定义一个整型参数
public class Method_Demo5 {
public static void main(String[] args) {
//调用方法printHelloWorld,传递整数
printHelloWorld(9);
}
/* 定义打印HelloWorld方法 返回值类型,计算没有结果 void 参数:不确定打印几次 */
public static void printHelloWorld(int n) {
for (int i = 0; i < n; i++) {
System.out.println("HelloWorld");
}
}
}
提问:怎么判断需要定义方法?
方法是一段可以被重复调用的代码段,那么什么时候该把那些代码段封装为方法有没有明确的要求?
回答:实践出真知。
在开发之中将那些代码封装为方法实际上并没有一个严格的定义标准,更多的时候往往是依靠开发者个人的经验进行的。如果是初学者应该先以完成功能为主,而后再更多地考虑代码结构化的合理。但是在很多情况下如果在开发中你发现一直都在进行着部分代码的“复制-粘贴”操作时,那么就应该考虑将这些代码封装为方法以进行重复调用。
2.6 定义方法的注意事项
1.不能在 return 后面写代码, return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。
public static int getSum(int a,int b) {
return a + b;
System.out.println("Hello");// 错误,return已经结束,这里不会执行,无效代码
}
2.不能用输出语句调用 void
类型的方法。因为方法执行后没有结果,也就打印不出任何内容。
public static void main(String[] args) {
System.out.println(printHello());// 错误,不能输出语句调用void类型方法
}
public static void printHello() {
System.out.println("Hello");
}
范例:使用return结束方法调用
public class Method{
public static void main(String[] args){
System.out.println("1,调用fun()方法之前。");
fun(10); //调用fun()方法
System.out.println("2,调用fun()方法之后。");
}
public static void fun(int x){
System.out.println("3,进入fun()方法。");
if(x==10){
return; //结束方法,返回被调用处
}
System.out.println("4,正常执行完fun()方法。");
}
}
程序运行结果:
1,调用fun()方法之前。
3,进入fun()方法。
2,调用fun()方法之后。
从程序运行结果可见,虽然在return中没有返回任何内容,但是一旦执行到了return语句之后,方法将不再执行,而返回到被调用处继续执行
有时return挺好用 但不能滥用
2.7跳过
1_1_13_ 方法重载Overload
黑马说:
方法的重载(overload)。多个方法的名称一样,但是参数列表不一样。
1、方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关 。
2、参数列表:1个数不同,2数据类型不同,3顺序不同。
3、重载方法调用:JVM通过方法的参数列表,调用不同的方法。
好处:只需要记住唯一个方法名称,就可以实现类似的多个协能。简便好处。
谁能对的上,我就用谁
谁都对不上,我就出错
魔乐课堂说:
方法重载是方法名称进行重用的一种技术形式,其最主要的是特点是“方法名称相同,参数的类型或个数不同”
回答:在方法重载的概念里面并没有强制性地对方法的返回值进行约束,这意味着方法重载时返回值可以根据用户的需求自由定义,例如,对于sum()方法使用以下的方法定义也是正确的。
但是需要注意的是,一旦这样定义了,则对于方法返回值的接收也必须有相符合的类型,这样就会造成方法调用时的混淆问题,所以考虑到程序开发的标准型,在进行方法重载时大多数的程序都会统一方法的返回值类型。
屏幕信息“System.out.pintn()"中的println方法(也包括print()方法)就属于方法重载的应用。
package cn.itcast.day04.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)); // 找不到任何方法来匹配,所以错误!
sum(10, 20);
}
public static int sum(int a, double b) {
return (int) (a + b);
}//3. 参数的多类型顺序不同
public static int sum(double a, int b) {
return (int) (a + b);
}//3. 参数的多类型顺序不同
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(double a, double b) {
return (int) (a + b);
}//参数的类型不同
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、不能根据参数名称进行重载,与参数名称无关,
因为这样参数是传给x还是a就分不清了
2、 与方法的返回值类型无关。
因为根据返回值判断会产生歧义
sum(10,20);没法区分用double还是int
方法重载与下列因素相关:
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
方法重载与下列因素无关:
- 与参数的名称无关
- 与方法的返回值类型无关
题目要求:
练习一:比较两个数据是否相等
参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试。
package cn.itcast.day04.demo04;
public class Demo02MethodOverloadSame {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
System.out.println(isSame(a, b));//两个byte参数的方法执行!false
System.out.println(isSame((short) 20, (short) 20));//两个short参数的方法执行!true
System.out.println(isSame(11, 12));//两个int参数的方法执行!false
System.out.println(isSame(10L, 10L));//两个long参数的方法执行!true
}
///统一名字,参数随便写,谁能用得上,我就匹配谁
public static boolean isSame(byte a, byte b) {
System.out.println("两个byte参数的方法执行!");
boolean same;
if (a == b) {
same = true;
} else {
same = false;
} //用if else
return same;
}
//所谓的重载,就是参数列表不一样
public static boolean isSame(short a, short b) {
System.out.println("两个short参数的方法执行!");
boolean same = a == b ? true : false; //用三元表达式
return same;
}
public static boolean isSame(int a, int b) {
System.out.println("两个int参数的方法执行!");
return a == b;
}//最简单 ==
public static boolean isSame(long a, long b) {
System.out.println("两个long参数的方法执行!");
if (a == b) {
return true;
} else {
return false;
}//用多个return
}
}
练习二:判断哪些方法是重载关系。
public static void open(){}; // 正确重载
public static void open(int a){}; // 正确重载
static void open(int a,int b){}; // 代码错误,和第8行冲突
//你啪不啪和我没关系,和public无关
public static void open(double a,int b){}; // 正确重载
public static void open(int a,double b){}; // 代码错误,和第6行冲突
//跟你呆不呆没关系,和static无关
public void open(int i,double d){}; // 代码错误,和第5行冲突
public static void OPEN(){}; // 代码正确不会报错,但是并不是有效重载,因为方法名不一样
public static void open(int i,int j){}; // 代码错误,和第3行冲突
Windows文件夹虽然不区分大小写,但是Java中严格区分
选中它,可以按shift+F6
,这样所有所有用到它的地方就会一起变
但是!怎么样让所有的方法名都同时改掉? IDEA里还是用shift+F6
,但只有private私有方法才可以被同时修改
ctrl+左击,点System.out.println()就可以进入println方法内部