萌新的java学习之路——第一周

萌新的java学习之路——第一周

第一周的学习

这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我。虽然我也是一个小白,但我会尽力回答你。

1.Java的一些基础知识

1.1 java特征

跨平台
Windows
.exe
Linux
.out
macOs
.out
UNIX
.out
面向对象

Java因为拥有JVM,能够帮助Java程序可以支持不同的平台。

Java ==> .class字节码文件 ==> JVM在不同的平台之上给予不同解释,可以满足很多地方同时运行

1.2 Java执行机制

计算机执行机制

编译执行和解释执行
编译执行是直译性语言
C C++
编译的结果直接交给我们的CPU运作执行,效率较高,但是不能跨平台

解释执行是解释性语言
Java
编译结果需要通过解释器解释之后在交给CPU执行,效率较低
Java借助于JIT技术,现在的执行效率已经可以接近于C++。

Java语言是 先编译,再解释

1.3 电脑运行Java必备条件

安装JDK

尽量从官网获取对应的安装包

  1. 安装软件不能安装到C盘,防止系统崩溃没有任何的挽回余地。
  2. 安装路径中不能出现任何的中文,防止因为国外软件对于支持不友好的情况出现。

JDK安装路径

bin
binary 二进制目录
都是二进制可以执行文件,包含.exe文件
java.exe
javac.exe
javap.exe
javadoc.exe
db
JDK自带的小型数据库

include
系统接口目录!!!
jre
Java运行环境 Java Runtime Environment
lib
资源库目录,存在一些.jar文件 Jar包
src.zip(要想成为合格的程序员,一定要看)
源文件代码
Java的完整源代码
作为参考的标准,学习的参照物

环境变量配置

Windows + E 我的电脑
我的电脑空白处 ==> 属性 ==> 高级系统设置 ==> 环境变量 ==>

系统变量修改:

新建:
变量名:JAVA_HOME
变量值:D:\Program Files\Java\jdk1.8.0_211

新建:
变量名:CLASS_PATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

修改:
变量名:path
添加内容:
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

1.4 DOS命令

因为我现在都是在cmd中试验java代码的,所以dos命令比较需要。
开启命令提示符
Windows + R 弹出对话框 输入cmd

dir
查看当前工作目录的所有文件和文件夹

cd
切换工作目录
格式 cd 路径
路径【小重点】
相对路径
我在你隔壁,隔离老刘
. 当前工作目录
… 当前工作目录的父目录
绝对路径
xx省xx市xx县xx路xx号 唯一性

mkdir
创建文件夹
格式 mkdir 文件夹名
例如: mkdir test
mkdir a b c d 同时创建四个文件夹

rd
删除文件夹
【注意事项】

  1. 慎用 粉碎性删除
  2. 无法删除非空文件夹

echo [了解]
格式 echo 123>1.txt

文件拓展名 文件后缀名 【重点】
.exe .doc .ppt .pdf .java .php .py .mp4 .avi .rmvb
.txt .htm .html
涉及到文件操作,一定要带有文件后缀名,没有文件后缀名的文件可以认为不是一个文件

del
删除普通文件
操作的过程中必须带有文件后缀名!!!
【注意事项】

  1. 慎用,删除文件是直接抹掉数据不是放入回收站

方向键上下
查看之前的命令

cls
清理屏幕

exit
退出终端
装 后期操作某些软件为了防止不必要的麻烦

1.5 常识知识

Java之父是谁?
詹姆斯.高斯林(原谅我这个渣渣没找到点点在哪儿)

Java由来
1995年推出的面向对象的编程语言。

jdk的版本变更懒得打了,感兴趣的去看看

JVM(Java virtual machine) 虚拟机
使用软件在不同的操作系统中模拟相同的环境

JRE(Java runtime environment) 运行环境
包含JVM和解释器,完整的Java运行环境

JDK(Java devolepment kit)开发环境
包含 JRE+类库+开发工具包(编译器+调试工具)

2. Java第一行代码

准备工作和基础常识了解完后,我们就可以来尝试写第一句代码了。

2.1 Notepad++准备

首先准备编写代码的工具,我这里推荐的是Notepad++
下载安装完成后
a. 设置 --> 首选项 --> 新建
环境选择 windows
编码集 ANSI
b. 设置 --> 首选项 --> 自动完成
全部反选

2.2 代码示例和规范

在学习初期,我们就要养成良好的代码编写习惯。

class FirstJava {
	public static void main(String[] args) {
	System.out.println("武汉加油,中国加油!");
	}
}

在这里插入图片描述
这是代码在Notepad++中的情况,注意红笔标记的地方,注意规范。

2.3 编译执行

javac 编译工具
javac 源文件名.java
例如:
javac FirstJava.java
编译之后会生成一个 FirstJava.class文件,.class字节码文件,二进制文件,需要借助于JVM执行解释给 CPU

java 执行工具
java 类名
例如:
java FirstJava
终端:
武汉加油,中国加油!
在这里插入图片描述

2.4 代码规范【重点】

参考AJCG 阿里巴巴Java开发规约来完成的

2.4.1 AJCG【重点】

  1. 标识符可以使用的字符范围,英文字母(A ~ Z a ~ z) 数字(0 ~ 9) 唯一可以使用的标点符号 _

  2. 标识符要求必须英文字母开头

  3. 标识符严格区分大小写,大写A和小写a完全不一样!

  4. 标识符没有严格的长度限制,但是会根据实际需求来限制标识符的长度

  5. 标识符组需要做到见名知意,动宾结构!!!
    规范格式
    studentAge studentScore 见名知意
    getStudentAge setStudentAge 动宾结构
    title logo banner
    payTime

    不允许格式:
    int a, b, c, d, e, f, g;
    img0 img1 img2 img3 img4 img5
    payBeizhu 不允许
    tsgly 图书管理员!!! 不允许

  6. 推荐使用驼峰命名法和下划线命名法
    小驼峰命名法:【适用于 变量名,方法名】
    标识符首字母小写,之后的每一个单词首字母大写
    studentAge studentScore 见名知意
    getStudentAge setStudentAge 动宾结构
    iPhone iMac iTouch
    大驼峰命名法:【适用于 类名,接口名】
    标识符所有的单词首字母全部大写
    FirstJava String
    下划线命名法:
    所有的字母都是大写的情况下,为了区分单词直接的间隔,使用下划线命名法
    JAVA_HOME CLASS_PATH
    DEFAULT_CAPACITY

  7. 已经被Java使用的关键字和保留字不得用于自定义标识符使用
    变色的不能使用,大写开头的不能使用

3 变量【重点】

程序可以正常运行后,说明你的运行环境已经没有什么问题了。接下来我们来了解一下变量。

3.1 基本定义

a. 变量是定义在计算机内存中

1. 明确的数据类型
2. 明确的变量名
3. 明确的对应数据

b. 基本的定义格式

1. 数据类型 变量名;
	变量名 = 对应数据类型的值; = 赋值
	
2.数据类型 变量名 = 对应数据类型的值;

c. 变量分类

1. 基本数据类型
	八大基本数据类型
		整数
		小数
		布尔
		字符
2. 引用数据类型
	字符串
	数组

3.2 基本数据类型

整型 占用内存空间大小 取值范围
byte 1字节 -128~127
short 2字节 -(2^15) ~ (2^15)-1
int 4字节 -(2^31) ~ (2^31)-1
long 8字节 -(2^63) ~ (2^63)-1
浮点型 占用内存空间大小 取值范围
float 4字节 10^38
double 8字节 10^308
布尔类型 占用内存空间大小 取值范围
boolean 1字节 true/false
字符型 占用内存空间大小 取值范围
char 2字节 能够保存中文

3.3 定义变量的第一行代码

class VariableTest {
	public static void main(String[] args) {
		/* 整型变量 */
		byte byteNumber = 10;
		short shortNumber = 20;
		int intNumber = 30;
		long longNumber = 40L;
		
		/* 整型变量展示 */
		System.out.println(byteNumber);
		System.out.println(shortNumber);
		System.out.println(intNumber);
		System.out.println(longNumber);
		
		/* 浮点型变量 */
		float floatNumber = 3.14F;
		double doubleNumber = 0.618;
		
		/* 浮点型变量展示 */
		System.out.println(floatNumber);
		System.out.println(doubleNumber);
		
		/* 
		字符型变量 
		字符常量:
			单引号包含的单个元素 'a'
		*/
		char ch1 = 'A';
		char ch2 = '中';
		
		/* 字符型变量展示 */
		System.out.println(ch1);
		System.out.println(ch2);
		
		/* 布尔类型 */
		boolean ret1 = true;
		boolean ret2 = false;
		
		/* 布尔类型变量展示 */
		System.out.println(ret1);
		System.out.println(ret2);
		
		// int num;
		// System.out.println(num);
		
		// num = 10;
	}
}

3.4 定义变量的问题总结

3.4.1 数据类型不兼容问题

VariableTest.java:16: 错误: 不兼容的类型:double转换到float可能会有损失
                float floatNumber = 3.14;
                                    ^
1 个错误

//计算机为了保证数据的精度,同时为了数据后期的延展性,会默认把所有的小数都认为是double类型,double占用的内存空间是8字节,而float是4字节,会报错。这里需要告诉计算机3.14是一个float类型,在小数之后加上一个大写F
	修改:
		float floatNumber = 3.14F;

3.4.2 long类型变量赋值操作要求

【要求】
给予long类型的数据需要在常量之后加上一个大写L,明确告知计算机这里使用的是一个long类型数据
修改:
long longNumber = 40L;

3.4.3 Java中变量未赋值不能使用

VariableTest.java:44: 错误: 可能尚未初始化变量num
                System.out.println(num);
                                   ^
1 个错误

//Java中规定,一个变量在没有被赋值的情况下,不能参与除赋值之外的其他任何操作。避免了没有必要的野值问题。

3.4.4 未定义不能使用

VariableTest.java:46: 错误: 找不到符号
                num = 10;
                ^
  符号:   变量 num
  位置: 类 VariableTest
1 个错误

//Java中规定,变量未定义不能使用,必须先定义,后使用

4 字符

4.1 字符常量基本概念

英文单引号包含的单个元素

4.2 转义字符

\ 转义字符标记
将带有特定含义字符转换为无意义字符
或者把无意义字符,转换成带有一定含义字符

常用:

"
\n 回车
\t tab键 制表符

转义字符有且只能处理一个字符
\ 表示一个反斜杠
\\ 表示两个反斜杠

4.3 字符常量使用要求

有且只允许使用字符本身!!!
不推荐使用ASC表。
‘A’ ‘a’

优势:
1. 阅读性好
2. 保证数据类型一致化
3. 减少了没有必要的歧义

4.4 字符串

字符串数据类型

字符和字符串什么关系?
羊肉和羊肉串关系就可以认为是字符和字符串的关系
字符串特定标记
“” 英文双引号包含的所有内容都是字符串本身,并且是一个常量,不可以修改
String字符串数据类型

5 类型转换【了解】

5.1 自动类型转换

小数据类型转换到大数据类型

5.2 强制类型转换

强制类型转换,是从大数据类型到小数据类型的转换过程。
double类型数据保存到int类型,这里需要强制类型转换。

格式:
double num1 = 3.5;
int num2 = (int) num1; //这里存在数据精度丢失,并且是不可以逆

【个人建议】
对于基本数据类型的强制类型转换,个人不建议使用,这里会导致数据精度的丢失,并且有可能导致其他问题。

强制类型转换在面向对象开发中,可以用来操作对象直接的关系

6 运算符

6.1 算术运算符

   +    -    *    /   % () 
  1. 从左至右计算
  2. 先乘除后加减
  3. 有括号先处理括号里面的内容
  4. 除数不能为0

%
7 ÷ 3 = 2 …… 1
2 相除的结果
1 是余数

优先级问题:
简单粗暴加括号

= 赋值号
作用是将赋值号右侧的数据,赋值给左侧的【变量】

算术运算符优化
+=, -=, *=, /=, %=
例如:
int num1 = 10;
int num2 = 20;

num2 = num1 + num2; ==> num2 += num1;

6.2 关系运算符

  >   <   >=   <=   ==  !=

关系运算符的结果有且只有 true or false
用于在开发中的条件判断使用

6.3 逻辑运算符

&&
与,并且
同真为真,有假【即】假

||
或,或者
有真【即】真,同假为假

!
非,取反
强牛 犟,假变真来,真变假

逻辑运算符:
一般用于组合条件的判断,条件过滤,多情况分析。
断路原则
【补充知识点 逻辑运算符断路原则问题】

class Demo4 {
	public static void main(String[] args) {
		int num = 10;
		boolean ret = 10 > 15 && num++ >= 10;
		
		/*
		断路原则问题:
			逻辑与断路元素问题
			10 > 15 该表达式结果为false,已经决定了当前整个
			逻辑与表达式的结果为false,计算机为了提高效率,
			从逻辑与false条件开始,之后的表达式不再运行。
		*/
		System.out.println("num : " + num);
		System.out.println("ret : " + ret);
		
		int num1 = 10;
		boolean ret1 = 10 > 5 || ++num1 > 5;
		
		/*
		断路原则问题
			逻辑或断路原则问题
			在逻辑或表达式中,出现了第一个为true条件,整个
			表达式结果已经明确为true,不需要在进行之后的判
			断,节约计算机资源,提供效率。
		*/
		System.out.println("num1 : " + num1);
		System.out.println("ret1 : " + ret1);
	}
}

6.4 自增自减运算符

【注意事项】

  1. 自增自减运算符有且只能操作变量!!!

  2. 自增自减运算符独立存在!!!单独成行,减少代码中的歧义!!!

  3. 【个人建议】
    使用 += 1 和 -= 1 替代自增自减运算符
    Swift取消了 自增自减运算符

++:
在变量之后,首先执行变量所在行语句,再执行自增1操作
在变量之前,首先执行变量自增1操作,再执行所在行语句

–:
在变量之后,首先执行变量所在行语句,再执行自减1操作
在变量之前,首先执行变量自减1操作,再执行所在行语句

6.5 条件运算符/三目运算符

格式:
条件判断 ? true处理方式 : false处理方式;

条件运算符/三目运算符使用局限性较大,类似于if - else结构。

7 从键盘上获取用户录入的数据[CV大法]

学习初期不着急记这个,可以暂时用CV大法。

  1. 导包,点技能点
    import java.util.Scanner;
    class Demo1 {}

  2. 获取Scanner的变量, 扫描器的一个变量
    Scanner sc = new Scanner(System.in);

  3. 使用Scanner其中的方法
    获取int类型数据 sc.nextInt();
    获取double类型数据 sc.nextDouble();
    获取String类型字符串数据 sc.next(); sc.nextLine();
    获取一个char类型字符数据 sc.next().charAt(0);
    sc.nextLine().charAt(0);

// 导包
import java.util.Scanner;

class Demo8 {
	public static void main(String[] args) {
		int score = 0;
		// Scanner扫描器变量
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入学生的成绩:");
		score = sc.nextInt();
		
		// 用户输入数据合法性判断问题
		if (score < 0 || score > 100) {
			System.out.println("亲,您输入的数据不对哦~~~秋咪~~~");
			// 程序退出
			System.exit(0);
		}
		
		// if - else if
		if (score >= 90) {
			System.out.println("秀儿");
		} else if (score >= 80) {
			System.out.println("良儿");
		} else if (score >= 70) {
			System.out.println("中儿");
		} else if (score >= 60) {
			System.out.println("过儿");
		} else {
			System.out.println("让你爹穿着拖鞋来学校一趟!!!");
		}
		
	}
}

8 分支结构

8.1 if分支结构

if (/* 布尔类型的表达式 true or false */) {
	// 语句体
}
// 后续代码

/*
执行流程
	首先判断布尔类型的表达式 true还是false
	true 执行语句体
	false 执行后续代码
*/

8.2 if - else分支结构

if (/* 布尔类型的表达式 true or false */) {
	// true语句体
} else {
	// false语句体
}
/*
执行流程:
	首先判断if之后小括号里面的布尔类型数据到底是什么
	如果为true,执行true语句体
	如果为false,执行false语句体
	
	世界上最遥远的距离是,我在if里,你在else里
*/

8.3 if - else if分支结构

/*
学生的成绩划分:
	>= 90 优秀
	>= 80 良好
	>= 70 中等
	>= 60 及格
	< 60 不及格
*/

if (/* 布尔条件1 */) {
    // 处理方式1
} else if (/* 布尔条件2*/) {
	// 处理方式2
} else if (/* 布尔条件3 */) {
	// 处理方式3
} else {
    // 无匹配项处理方式
}
/*
执行流程
	使用已有条件匹配if之后的布尔条件
	匹配到任何一个布尔条件,指定对应的处理结果,结束if - else if结构,执行后续代码
	如果没有任何一个条件匹配,执行 else里面语句,然后在执行后续代码

注意
	else可以省略!!!

8.4 【补充知识点 用于输入数据的合法性判断问题】

在实际开发中,存在生活中数据的合法性和程序运行的语法要求冲突问题。
在程序的运行过程中,我们需要用户输入的数据进行合法性判断,如果用户输入的数据不是合法范围以内的,需要给予用户提示,并且不可以进入正常的代码运行过程中。

学生的成绩 0 ~ 100, 超出0~100都是不合法的!!!

  1. 不能大于100 score > 100
  2. 不能小于0 score < 0
  3. 满足任何一个条件都是非法情况!!!
    score > 100 || score < 0
  4. if 判断

8.5 switch - case结构

switch (/* 变量|表达式 */) {
    case1:
        // 处理方式1;
        break;
    case2:
        // 处理方式2;
        break;
    default:
        // 最终处理方式
        break;
}
/*
执行流程:
	取出switch小括号里面的数据匹配对应的case选择
	如果存在case匹配,执行对应的处理方式
	如果没有任何的一个case匹配。执行default处理方式
	
switch case使用注意事项
	1. break关键字作用是用于跳出对应的case选项
	2. break省略之后,执行对应的case选择,会继续运行到下一个break或者大括号结尾终止switch - case运行
	3. 在case选项中不允许出现相同的选择,语法错误!!!
	4. 在switch case语句体中,能够执行的代码有且只能是case之后或者default之后的代码,其他代码都不可以执行!!!
	5. default可以省略,按照自己的业务逻辑需要考虑是否省略default选择,default可以处理用户在输入过程中超出case选项的一些特殊情况。

8.6 分支结构嵌套

class Demo11 {
	public static void main(String[] args) {
		int score = 89;
		
		if (score >= 90) {
			if (score >= 95) {
				System.out.println("A+");
			} else {
				System.out.println("A-");
			}
		} else {
			System.out.println("A--");
		}
	}
}

8.7 局部变量

存在于代码块中的变量!!!

  1. 局部变量有且只能在当前所处的代码块中使用,超出当前代码块范围无效!!!【作用域问题】
  2. 在作用域范围以内,任何的地方可以直接使用对应的变量
  3. 在一个变量的作用域范围以内,不能重定义同名变量,报错!
  4. 局部变量未赋值不能使用

9 循环结构

9.1 为什么使用循环

开发中我们会使用一些功能代码多次,如果使用CV大法,治标不治本!!!会出现一下一些问题:
1. 代码过于臃肿!!!AJCG要求一个方法代码行数最多80行!!!
2. 代码阅读性极差!!!
3. 代码维护性极差!!!

9.2 while循环

while (/* 循环条件判断 */) {
    // 循环体
    // (循环条件变更)
}
/*

执行流程:
	首先判断while之后小括号里面的内容结果如何
	如果为true,执行循环体,回到循环条件判断
	如果为false,终止循环!!!


注意事项:
	1. 学会循环过程推理,避免死循环
	2. 如果出现了死循环,Ctrl + C 终止循环
*/

9.3 do - while循环

do {
    // 循环体
    // (循环条件变更)
} while (/* 循环条件判断 */);
/*
执行流程:
	首先do - while循环结构会执行一次循环体,然后再来判断while之后的条件
	如果循环条件为true,循环继续运行
	如果循环条件为false,终止循环!!!
*/

9.4 【补充知识点 while和do-while对比】

while循环每一次执行的循环体,都是在可控范围以内的!每一次循环的执行都是在循环条件的控制之下来完成的。

do while循环中第一次执行循环体是没有进行任何的条件判断,这里存在一定的隐患。

【个人建议】
1. 能使用while完成的,尽量少用do while结构
2. do while循环结构可以用于一些特定场景。

9.5 for循环

for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件变更 */) {
    // 循环体
}

/*
for循环优势
	for循环小括号里面的条件可以简要的推出当前循环的执行次数和结束条件,后期使用到数组,算法中非常常见。
*/

在这里插入图片描述

9.6 关键字

9.6.1 break关键字

字面含义: 打破!!!

在switch - case功能中,跳出case选择或者是default选择。
break在循环中使用是用于跳出循环!!!

9.6.2 continue关键字

字面含义:
继续!

功能:
结束本次循环,直接进入下一次循环!!!

使用注意事项:
1. 在while循环和do - while循环使用,需要注意continue关键字和循环条件变更之间的位置关系,防止出现死循环情况!
2. for循环中使用continue关键字没有太多的顾虑。

9.7 循环使用总结

  1. 学会找出代码中运行的规律,完成对于循环的实现。
    数组,集合,数据遍历,算法…
  2. 时时刻刻要注意循环中的一个坑
    死循环,continue…
  3. 学会循环变量的变量推理过程
    for循环循环次数,循环终止条件…
  4. 学会使用嵌套循环
  5. 模块化处理的思想
  6. 普适性代码,已经代码延展性的考虑

10 方法

10.1 为什么要使用方法

使用循环解决了一部分代码复用的问题,但是治标不治本。代码依然会出现一下问题
1. 代码过于臃肿!!!
2. 阅读性极差!!!
3. 维护性极差!!!

10.2 用main方法做榜样

public static void main(String[] args) {
    // 方法体
}

/*
public static :不要问!!!这个比较复杂,后边细说。
void: 返回值类型,这里void表示没有返回值
main: 方法名,需要符合小驼峰命名法,见名知意,动宾结构
(String[] args): 形式参数列表
{
	方法体
}

方法的模版:
	public static ReturnType MethodName(Arguments) {
		Method Body
	}

方法定义的位置,是在class大括号以内,其他方法之外
*/

10.3 无参数无返回值方法

/*
需求
	展示一个烤羊排~~~,sout

方法分析
	public static 固定格式,不要问
	返回值类型: void 
	方法名: bbq
	形式参数列表: ()

方法声明:
	public static void bbq()
*/
/**
* 打印烤羊排~~~
*/
public static void bbq() {
    System.out.println("烤羊排!!!");
}

10.4 有参数无返回值方法

10.4.1 一个参数

/*
什么是参数
	当前方法执行所需的外部数据
	例如: 登陆时需要的账号和密码,取现金时银行卡和密码

需求
	展示一个int类型数据
方法分析:
	public static 固定格式,不要问
	返回值类型:	
		void 没有返回值,Sysout不是一个返回值,是一个展示数据的方式,是一种
		反馈
	方法名:
		printIntNumber 见名知意,动宾结构,小驼峰命名法
	形式参数列表:
		这里需要打印int类型数据
		(int num)

方法声明:
	public static void printIntNumber(int num);
*/
/**
* 展示一个int类型数据 
*
* @param num 要求用户传入一个int类型数据
*/
public static void printIntNumber(int num) {
    System.out.println("用户提供的int类型数据为:" + num);
}

10.4.2 两个或多个参数

/*
需求
	打印两个int类型数据之和
方法分析:
	public static 固定格式,不要问
	返回值类型:
		功能是展示数据,打印数据,这里不需要返回值。
	方法名:
		printSumOfTwoNumber 见名知意,动宾结构,小驼峰命名法
	形式参数列表:
		这里需要两个int类型数据
		(int num1, int num2)

方法声明:
	public static void printSumOfTwoNumber(int num1, int num2)
*/
/**
* 打印两个int类型数据的和
*
* @param num1 需要用户提供的int类型数据
* @param num2 需要用户提供的int类型数据
*/
public static void printSumOfTwoNumber(int num1, int num2) {
    System.out.println("Sum : " + (num1 + num2));
}

10.5 调用时注意事项

调用时注意事项
1. 带有参数的方法一定要提供对应的数据类型,实际参数
2. 调用调用带有参数的方法,给予实际参数时,数据类型一致化
3. 多参数方法中,需要在调用的过程给予方法对应的参数,个数不允许缺少
4. 多参数方法中,形式参数列表中声明的参数类型和实际参数类型必须完成一致,一一对应,不允许一锅乱炖
method(int num1, float num2, char ch, double num3);
10 ‘a’ 3.5F 5.5
method(10, 3.5F, ‘a’, 5.5) √

10.6 无参数有返回值方法

return关键字
1. 结束当前方法的运行
方法运行到return之后,方法运行结束,return之后的代码不再执行。
2. 可以返回到方法之外数据
在return关键字之后的数据,可以返回到方法之外,利用返回值。

什么是返回值:
返回值是当前方法对于方法之外提供的数据和表现。
这里需要对应返回的数据,声明对应的返回值类型。

【注意】
方法中如果需要返回值,必有有一个明确的return
1. 方法需要返回值,没有retrun报错
2. 方法需要返回值,return存在于一个非必须执行代码中,会报错。
方法中返回值类型是void,那么可以使用return作为方法的结束,return之后不能有任何数据。

/*	
需求:
	give Me Five
	需要返回一个int类型数据5

方法分析:
	public static 固定格式,不要问
	返回值类型:
		这里需要返回的数值为5,是一个int类型
		int
	方法名:
		giveMeFive
	形式参数列表:
		不需要参数
		()
方法声明:
	public static int giveMeFive()
*/
/**
* 返回一个int类型数据5
*
* @return 返回值为int类型数据5
*/
public static int giveMeFive() {
    // return之后的数据会被返回到方法之外
    return 5;
}

10.6 有参数有返回值方法

/*
需求:
	计算两个int类型数据之和,返回结果
方法分析:
	public static: 固定格式,不要问
	返回值类型:
		int完全够用
	方法名:
		getSumOfTwoNumber √
		returnSumOfTwoNumber 见名知意,动宾结构,小驼峰命名法
	形式参数列表:
		需要两个int类型数据
		(int num1, int num2)
方法声明:
	public static int getSumOfTwoNumber(int num1, int num2);
*/
/**
* 计算两个int类型数据,并且通过返回值返回
*
* @param num1 int类型数据
* @param num2 int类型数据
* @return 两个int类型数据的之后,返回值类型为int类型
*/
public static int getSumOfTwoNumber(int num1, int num2) {
    return num1 + num2;
}

10.7 方法总结

10.7.1 方法的三要素

返回值
方法名
形式参数列表

10.7.2 返回值类型

【个人建议】
尽量减少黑盒方法的使用。

  1. 返回值类型需要考虑对应的含义。
    计算结果,状态监控,判断情况…

  2. 选择合适的返回值类型
    a. 不要答非所问!!!
    b. 要考虑数据的延展性!!!

  3. 一个方法有且只能有一个返回值类型。

  4. 目前的建议:
    当下不要考虑使用数组作为返回值类型。

10.7.3 方法名

  1. 见名知意,动宾结构,小驼峰命名法!!!
  2. 希望大家的代码是一个好的代码。
  3. 不允许简拼,不允许出现拼音
  4. 全英文,不会的查词典。

不允许打开有道词典划屏取词和鼠标取词

10.7.4 形式参数列表

  1. 整个方法运行过程中,需要的必要外来数据!
  2. 调用方式时,形式参数列表和实际参数列表数据类型是完全一致!顺序也是一致的!
  3. 考虑好对应的数据类型。

10.7.5 方法的封装过程

需求分析
1. 分析需求的作用是什么?
2. 考虑方法的名字,见名知意,动宾结构,小驼峰命名法
3. 形式参数列表
4. 返回值类型的选择和对应含义解释

分步骤完成
可以注释完成每一步需要做的事情
实现代码
不要认为自己的代码一定是对的
验证过程
1. 正确情况下代码运行是否OK
2. 使用错误的情况,验证代码的健壮性是否OK

10.7.6 方法封装小技巧

  1. 功能单一化!!!
    考虑后期的复用性,可移植性,模块化…
  2. 减少代码中return的使用,提高代码阅读性
  3. 找出特定的情况优化代码,提高效率

10.7.7 方法文档注释规范

/**
* 对于当前方法的整体解释,可以把方法的分析过程,利害关系全部写上
*
* @param argumentName参数名字 对于当前参数的功能解释,提一些要求. 有多少个参
* 							数就需要完成多少@param
* @return 返回值解释,数据类型,返回值的含义,状态,要求。
*/

11 练习题

1. 判断用户输入的字符是不是英文字符,如果是输出yes,不是输出no
2. 判断用户输入的工资是不是在5000以上,如果是,输出需要缴税,如果不是,输出不需要缴税
3. 用户输入一个年份,判断这个年份是不是一个闰年。
4. 输入两个整数,打印两数之差的绝对值。
5. 输入一个数, 判断是否是偶数,如果是偶数,输出YES,如果是奇数.输出NO
6. 输入一个人的年份, 检测这个是否是80,如果是输出YES,如果不是输出NO(1980-1989)
7. 展示0 ~ 100以内的所有偶数
8. 展示0 ~ 100以内的所有奇数
9. 计算1 - 150 的和
10.7过!!!
11. 多种方法打印26个小写字母
12. 例如:
	输入 5  8;
	计算 5 + 6 + 7 + 8;
	输出 26.
13. 整数逆序输出, 例如输入一个整数12345,输出5 4 3 2 1

14. 
   *****
   *****
   *****
   *****
   *****
15.
  *
  **
  ***
  ****
  *****
16.   
      *
     ***
    *****
   *******
  *********
17. 
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
18.  
    A
   ABA
  ABCBA
 ABCDCBA
ABCDEDCBA
 ABCDCBA
  ABCBA
   ABA
    A
19. 
   ###*###
   ##*#*##
   #*###*#
   *#####*
   #*###*#
   ##*#*##
   ###*###
20. 
	自己完成一个爱心~~~~(^_-)(^_-)(^_-)
21. 完成一个9*9乘法表
22. 将一个正整数进行分解质因数操作 例如: 输入90 结果 2*3*3*5
23. 使用循环完成30位以内的斐波那契数列
	1 1 2 3 5 8 13 21...
24. 利用循环完成15的阶乘
25. 使用do - while循环和switch - case 完成点菜功能
	要求:
		a. 展示菜单
		b. 自动计算总价
		c. 用户选择下单后退出循环

最好把这些代码用方法封装起来,练习方法的使用。

结尾

好了,这就是第一周的学习情况。千里之行,始于足下,忍住枯燥,反复练习,才有可能成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章