package cn.itcast.day04.demo02;
/*
有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。
例如两个数字相加,必须知道两个数字是多少,才能相加。
无参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。
例如定义一个方法,打印固定10次HelloWorld。
*/
public class Demo03MethodParam {
public static void main(String[] args) {
method1(10, 20);
System.out.println("==================");
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 cn.itcast.day04.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)); // 错误写法!
// System.out.println(void);
// int num2 = printSum(10, 20); // 错误写法!
// int num3 = void;
// void num4 = void;
}
// 我是一个方法,我负责两个数字相加。
// 我有返回值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);
}
}
题目要求:
定义一个方法,用来判断两个数字是否相同。
package demo03;
/*
题目要求:
定义一个方法,用来判断两个数字是否相同。
*/
public class Demo01MethodSame {
public static void main(String[] args) {
System.out.println(isSame(20, 20));
System.out.println(isSame(23, 20));
}
/*
三要素:
返回值类型:boolean
方法名称:isSame
参数列表:int a, int b
*/
public static boolean isSame(int a, int b) {
/*// 方法一:
boolean same;
if (a == b) {
same = true;
} else {
same = false;
}
return same;*/
/*// 方法二:
boolean same = a == b ? true : false;
return same;*/
/*// 方法三:
boolean same = a == b;
return same;*/
// 方法四:
return a == b;
}
}
package demo03;
/*
题目要求:
定义一个方法,用来求出1-100之间所有数字的和值。
*/
public class Demo02MethodSum {
public static void main(String[] args) {
System.out.println("结果是:" + getSum());
}
/*
三要素
返回值:有返回值,计算结果是一个int数字
方法名称:getSum
参数列表:数据范围已经确定,是固定的,所以不需要告诉我任何条件,不需要参数
*/
public static int getSum() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
package demo03;
/*
题目要求:
定义一个方法,用来打印制定次数的HelloWorld。
*/
public class Demo03MethodPrint {
public static void main(String[] args) {
printCount(12);
}
/*
三要素
返回值类型:只是进行一大堆打印操作而已,没有计算,也没有结果要告诉调用处
方法名称:printCount
参数列表:到底要打印多少次?必须告诉我,否则我不知道多少次,没法打印。次数:int
*/
public static void printCount(int num) {
for (int i = 0; i < num; i++) {
System.out.println("Hello, World!" + (i + 1));
}
}
}
使用方法的时候,注意事项:
package demo03;
/*
使用方法的时候,注意事项:
1. 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
2. 方法定义的前后顺序无所谓。
3. 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
4. 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
5. return后面的返回值数据,必须和方法的返回值类型,对应起来。
6. 对于一个void方法当中最后一行的return可以省略不写。
7. 对于void方法当中最后一行的return可以省略不写。
8. 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
*/
public class Demo04MethodNotice {
public static int method1() {
return 10;
}
public static void method2() {
// return 10; // 错误的写法!方法没有返回值,return后面就不能写返回值。
return; // 没有返回值,只是结束方法的执行而已。
}
public static void method3() {
System.out.println("AAA");
System.out.println("BBB");
// return; // 最后一行的return可以省略不写。
}
}
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
package cn.itcast.day04.demo04;
/*
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
*/
public class Demo01MethodOverload {
public static void main(String[] args) {
/*System.out.println(sumTwo(10, 20)); // 30
System.out.println(sumTree(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, int b) {
System.out.println("有2个参数的方法执行!");
return 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;
}
}
方法重载与下列因素相关:
方法重载与下列因素无关:
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(sumTree(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(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;
}
}
题目要求:
比较两个数据是否相等。
参数类型分别为两个byte类型,两个short类型,两个int类型、两个long类型,
并在main方法中进行测试
package cn.itcast.day04.demo04;
/*
题目要求:
比较两个数据是否相等。
参数类型分别为两个byte类型,两个short类型,两个int类型、两个long类型,
并在main方法中进行测试
*/
public class Demo02MethodOverloadSame {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
System.out.println(isSame(a, b));
System.out.println(isSame((short) 20, (short) 10));
System.out.println(isSame(11, 12));
System.out.println(isSame(10L, 10L));
}
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参数的方法执行!");
boolean same = a == b ? true : false;
return same;
}
public static boolean isSame(int a, int b) {
System.out.println("两个int参数的方法执行!");
boolean same = a == b;
return same;
}
public static boolean isSame(long a, long b) {
System.out.println("两个long参数的方法执行!");
return a == b;
}
}
在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式
package cn.itcast.day04.demo04;
// byte short int long float double char boolean
// String
// 在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式
public class Demo04OverloadPrint {
public static void main(String[] args) {
myPrint(100); // int
myPrint("Hello"); // String
}
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);
}
}
数组的概念:是一种容器,可以同时存放多个数据值。
数组的特点:
package cn.itcast.day05.demo1;
/*
数组的概念:是一种容器,可以同时存放多个数据值。
数组的特点:
1. 数组是一种引用数据类型(除了那8个基本数据类型,其他都是引用数据类型)
2. 数组当中的多个数据,类型必须统一
3. 数组的长度在程序运行期间不可改变
*/
public class Demo01Array {
public static void main(String[] args) {
int score1 = 100;
int score2 = 98;
int score3 = 99;
}
}
数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
两种常见的初始化方式:
动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少数据,是一个int数字
package cn.itcast.day05.demo1;
/*
数组的概念:是一种容器,可以同时存放多个数据值。
数组的特点:
1. 数组是一种引用数据类型(除了那8个基本数据类型,其他都是引用数据类型)
2. 数组当中的多个数据,类型必须统一
3. 数组的长度在程序运行期间不可改变
数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
两种常见的初始化方式:
1. 动态初始化(指定长度)
2. 静态初始化(指定内容)
动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];
解析含义:
左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少数据,是一个int数字
*/
public class Demo01Array {
public static void main(String[] args) {
// 创建一个数组,里面可以存放300个int数据
// 格式:数据类型[] 数组名称 = new 数据类型[数组长度];
int[] arrayA = new int[300];
// 创建一个数组,能存放10个double类型的数据
double[] arrayB = new double[10];
// 创建一个数组,能存放5个字符串
String[] arrayC = new String[5];
}
}
动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, … };
注意事项:
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。
package cn.itcast.day05.demo1;
/*
动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, ... };
注意事项:
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。
*/
public class Demo02Array {
public static void main(String[] args) {
// 直接创建一个数组,里面装的全都是int数字,具体为:5、15、25
int[] arrayA = new int[] {5, 15, 25};
// 创建一个数组,里面装字符串:"Hello"、"World"、 "Java"
String[] arrayB = new String[] {"Hello", "World", "Java"};
}
}
使用静态初始化数组的时候,格式还可以省略一下。
标准格式:
数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, … };
省略格式:
数据类型[] 数组名称 = { 元素1, 元素2, … };
注意事项:
使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
package cn.itcast.day05.demo1;
/*
使用静态初始化数组的时候,格式还可以省略一下。
标准格式:
数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, ... };
省略格式:
数据类型[] 数组名称 = { 元素1, 元素2, ... };
注意事项:
1. 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
2. 静态初始化标准格式可以拆分成两个步骤。
3. 动态初始化也可以拆分成两个步骤。
4. 静态初始化一旦使用省略格式,就不能拆分成两个步骤了。
使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
*/
public class Demo03Array {
public static void main(String[] args) {
// 省略格式的静态初始化
int[] arrayA = {10, 20, 30};
// 静态初始化的标准格式,可以拆分成为两个步骤
int[] arrayB;
arrayB = new int[]{11, 21, 31};
// 动态初始化也可以拆分成两个步骤
int[] arrayC;
arrayC = new int[5];
// 静态初始化的省略格式,不能拆分
// int[] arrayD;
// arrayD = {21, 32, 43};
}
}
package cn.itcast.day05.demo1;
/*
直接打印数组名称,得到的是数组对应的:内存地址哈希值。
二进制:01
十进制:0123456789
十六进制:0123456789abcdef
*/
public class Demo04ArrayUse {
public static void main(String[] args) {
// 静态初始化的省略格式
int[] array = { 10, 20, 30 }; // [I@50cbc42f
System.out.println(array);
// 直接打印数组当中的元素
System.out.println(array[0]); // 10
System.out.println(array[1]); // 20
System.out.println(array[2]); // 30
System.out.println("=================");
// 也可以将数组当中的某一个单个元素,赋值交给变量
int num = array[1];
System.out.println(num);
}
}
package cn.itcast.day05.demo1;
/*
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为'\u0000';
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null。
注意事项:
静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
*/
public class Demo05ArrayUse {
public static void main(String[] args) {
// 动态初始化一个数组
int[] array = new int[3];
System.out.println(array); // 内存地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("===================");
// 将数据123赋值交给数组array当中的1号元素
array[1] = 123;
System.out.println(array[0]); // 0
System.out.println(array[1]); // 123
System.out.println(array[2]); // 0
}
Java的内存需要划分成为5个部分:
栈(Stack):存放的都是方法的局部变量。方法的运行一定要在栈当中运行。
局部变量:方法的参数,或者是方法{ }内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失。
堆(Heap): 凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值。规则:
如果是整数 默认为0
如果是浮点数 默认为0.0
如果是字符 默认为’\u0000’
如果是布尔 默认为false
如果是引用类型 默认为null
方法区(Method Area): 存储.class相关信息,包含方法的信息。
本地方法栈(Native Method Stack):与操作系统相关。
寄存器(pc Register):与CPU相关。
package cn.itcast.day05.demo02;
public class Demo01ArrayOne {
public static void main(String[] args) {
int[] array = new int[3]; // 动态初始化
System.out.println(array); // 内存地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
System.out.println("=====================");
// 改变数组当中元素的内容
array[1] = 10;
array[2] = 20;
System.out.println(array); // 内存地址值
System.out.println(array[0]); // 0
System.out.println(array[1]); // 10
System.out.println(array[2]); // 20
}
}