java笔记01-基础语法

文章目录

前言

JVM

  • JVM(Java Virtual Machine), Java虚拟机
  • JVM 是 java 平台无关性实现的关键 (java程序在不同的平台上运行,因为有虚拟机所以不需要重新编译)

在这里插入图片描述

JDK

  • JDK (Java Development Kit), Java 语言的软件开发工具包.
  • 两个主要组件
  • javac 编译器,将源代码转为字节码
  • java 运行编译后的java程序(.class后缀的)

JRE

  • JRE (Java Runtime Environment)
  • 包括 Java 虚拟机(JVM), Java核心类库和支持文件
  • 如果只需要运行 Java 程序,下载并安装 JRE 即可
  • 如果要开发 Java 软件,需要下载 JDK
  • 在 JDK 中附带有 JRE

JVM JDK JRE 之间的关系

在这里插入图片描述

  • JRE = JVM + JavaSE 标准类库
  • JDK = JRE + 开发工具集(例如 javac 编译工具等)

Java 平台

  • Java SE (桌面程序) Java标准版
  • Java EE (Web程序) Java企业版
  • Java ME (移动设备) Java微型版 (随着安卓和ios的发展,现在用的很少.)

一、基本语法

1. java的常量与变量

1. 标识符

  • 例如类名就是 标识符
  • 标识符可以由字母,数字,下划线(_) 和美元符($) 组成,不能以数字开头
  • 标识符是严格区分大小写的
  • 标识符不能是java关键字和保留字
  • 标识符的命名最好能反映出其作用

2. 关键字

abstractbooleanbreakbytecasecatch
charclasscontinuedefaultdodouble
elseextendsfalsefinalfinallyfloat
forifimplementsimportnativeint
interfacelonginstanceofnewnullpackage
privateprotectpublicreturnshortstatic
superswitchsynchronizedthisthrowthrows
transienttruetryvoidvolatilewhile

3. 什么是变量

  1. 什么是变量
    变量的三个元素: 变量类型,变量名和变量值.

  2. 变量名的命名规则
    2.1 满足标识符的命名规则
    2.2 符合驼峰法命名规则 (如果是一个单词,都小写.如果是由多个单词组成,则第一个单词小写,其他单词的首字母大写!)
    2.3 尽量简单,做到见名知意
    2.4 变量名的长度没有限制

  3. 类的命名规则
    3.1 满足 Pascal命名发规范 (如果是一个单词,首字母大写.如果是由多个单词组成,则所有单词的首字母大写!)

4. 基本数据类型

在这里插入图片描述

5. 基本数据类型详解

在这里插入图片描述

6. 整型字面值及变量声明

  • Java 中有三种表示整数的方法: 十进制, 八进制, 十六进制.

  • 八进制: 以0开头,包括0-7的数字, 如 037, 056

  • 十六进制: 以 0x或者OX开头,包括0-9的数字,及字母a-f, A-F (a表示10,以此类推), 如 0x12, 0xabcf, 0XABCFF

  • 变量声明的格式: 数据类型 变量名

  • 赋值: 使用"=" 运算符进行赋值 , “=” 叫做赋值运算符,将运算符右边的值赋给左边的变量.

7. 浮点型字面量

  • 浮点型字面值默认情况下表示 double 类型,也可以在值后加 d或者D. 如 123.32d 或 123.32D
  • 如想要表示 float 类型, 则需要在字面值后加 f 或 F. 如 23.4f 或 23.4F

定义一个单精度浮点型变量

float f = 1234.328f;

定义一个双精度浮点型变量

double d = 5623.345;
// 或者
double d = 5623.345d;
double d = 5623.345D;

8. 基本数据类型变量的存储

  • 数据类型分为基本数据类型和引用数据类型

  • 引用数据类型包括数组和类等

  • 类定义的变量又叫对象

  • 按照作用范围分为: 类级,对象实例级,方法级,块级.
    在这里插入图片描述

9. 字符型字面值

  • 字符型字面值用单引号内的单个字符表示.(只能有一个字符)
  • 如: ‘a’, ‘b’, ‘$’
  • 定义字符型变量: char a=‘a’ / char b = 65 (65对应ascii码表是 ‘A’)

10. ASCII 码

  • ASCII (American Standard Code for Information Interchange, 美国标准信息交换代码)
  • 基于拉丁字母的一套电脑编码系统
  • 主要用于显示现代英语和其他西欧语言 (没有中文!)
  • 使用 7位或8位二进制组合来表示128或256中可能的字符
  • 7位二进制数组合 => 标准ASCII 码 (表示大小写字母,标点符号,美式英语中的控制字符等)
  • 8位二进制数组合(后128位) => 扩展ASCII码 (表示特殊符号,外来语言的字母等)

11. Unicode 编码

  • 由于 ASCII 码无法实现中文等很多其他国家的语言,后续就有了 Unicode 编码标准.
  • unicode 编码又称为统一码,万国码
  • Unicode 编码的目标是支持世界上所有的字符集
  • char c = ‘\u055d’ ;
  • Unicode表示法,在值前加前缀 \u

12. 布尔类型字面值

  • 布尔值只能定义为 true 和 false
  • 例: boolean b = true;

13. 字符串字面值

  • 字符串不属于基本数据类型,它是类!
  • 双引号引起来的0个或多个字符.
  • String s = “abcdefg”;

14. 变量综合案例

  • 转义字符
转义字符描述
\uxxxx四位16进制数所表示的字符
单引号字符
"双引号字符
\反斜杠字符
\r回车
\n换行
\t横向跳格
\b退格
  • 用科学计数法表示浮点数数据
  • double d = 1.23E5; (表示 1.23*10的5次方)
  • float f = 1.23e5f; (e 大小写都可)
  • double d1 = .2; (表示 0.2)

15. 类型转换

  • 类型转换分为自动类型转换和强制类型转换
  1. 自动类型转换 (又叫 隐式类型转换)
    在这里插入图片描述
    上述图片中, 实线表示的是 无信息丢失的数据类型转换, 虚线是可能在转换时,出现精度丢失!

  2. 强制类型转换

  • 如果A类型表示的范围比B类型大,则将A类型的值赋值给B类型,需要强制类型转换.
  • 如: double d=123.4; float f=(float)d;
  • 强制数据类型转换的格式: (数据类型) 数值

16. 数据类型转换案例

public static void main(String[] args) {
	// char类型和int类型之间的转换
	char c = (char) 65536;
	int n;
	n = c; // 隐式类型转换 char < int
	c = (char) n;

	// 整型和浮点型的类型转换问题
	int x = 100;
	long y = x; // 隐式转换, int < long
	x = (int)y;
	
	float f = 10000000000000L;  //精度丢失 
	System.out.println(f);      //精度丢失 
	
}

17. 常量

  • final int N = 5;
  • 常量值一旦定义,就不允许被修改
  • 常量值的字面量一般都是 大写字母来表示.
	public static void main(String[] args) {
		int m = 5;
		final int N = 6;
		m = 10;
//		n = 10;  //常量不允许别修改

		final double PI = 3.14159;
		final double MIN_VALUE = 0;
	}

2.java运算符

1. 表达式

  • 表达式由运算符和操作数组成
    例如: sum = num1 + num2

2. 运算符

描述运算符
算术运算符+,-,*,/,%,++,–
赋值运算符=,+=,-=,*=,/=,%=
关系运算符==, !, <, <=, >, >=
逻辑运算符!, &, &&, |, ||
条件运算符?:

3. 赋值运算符

  • 格式: 变量 = 表达式 ;

例如: int n = 3; // 将3赋值给变量n
注意: 赋值运算符是从右往左运算!

运算符表达式计算结果(假设x=15)
+=x += 5x = x + 520
-=x -= 5x = x - 510
*=x *= 5x = x * 575
/=x /= 5x = x / 53
%=x %= 5x = x%50

4. 自增自减运算符

++自增1int n=3; n++
自减1int n=4; ++n
表达式执行方式结果(num1=1)
num2=++num1num1=num1+1; num2=num1;num1=2;num2=2;
num2=num1++num2=num1; num1=num1+1;num1=2;num2=1;
num2=–num1num1=num-1; num2=num1;num1=0; num2=0;
num2=num1–;num2=num1; num1=num1-1;num1=0; num2=1;

5. 算术运算符

  • 算术运算符主要用于基本的算术运算, 如 加法,减法,乘法和除法等.
算术运算符名称举例
+加法5+10=15
-减法10-5=5
*乘法3*6=18
/除法36/4=9
%求余数13%3=1
++自增1int n=3; n++
自减1int n=4; --n

6. 关系运算符

  • 比较运算符用于判断两个数组的大小,如 大于, 小于, 等于, 不大于, 不小于 等
  • 比较的结果是 一个布尔值
运算符名称表达式结果
>大于5>3true
<小于5<3false
>=大于等于5>=3true
<=小于等于5 <= 3false
==等于5==3false
!=不等于5 != 3true

7. if条件结构

  • if 后面如果只有一条语句,可以省略大括号! 如果是多条,则不能省略.
if(条件){
 <语句块>
}

8. if-else条件结构

if(条件){
	<语句块>
}else{
	<语句块>
}

9. 逻辑与运算符介绍

  • 逻辑运算符用来连接一个或多个条件, 判断这些条件是否成立

  • 逻辑运算符的结果是布尔类型

  • || 运算符又叫 短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算了.

名称运算符表达式
&&或&operator1&&operator2
||或|operator1 || operator2
!!operator

10. 逻辑"非"运算符及案例

  • ! 运算符
  • 对原条件进行取反
  • 例如: !(3<5), 结果为 false

11. 条件运算符

  • Java 中的条件运算符是 三目运算符
  • 语法: 布尔表达式 ? 表达式1 : 表示式2
  • 当布尔表达式的值为 true, 则返回表达式1的值, 否则返回表达式2的值
int a=10,b=7;
int max;
max = a>b?a:b;

12. 运算符的优先级

  • 下表,从上到下, 优先级越来越小
运算符秒速
()圆括号
!,++,–逻辑非,自增,自减
*,/,%乘法,除法,取余
+,-加法,减法
<,<=,>,>=小于,小于等于,大于,大于等于
==, !=等于,不等于
&&逻辑与
||逻辑或
=,+=,*=,/=,%=,-=赋值运算符,复合赋值运算符

13. 闰年问题案例

package com.imooc.operator;

import java.util.Scanner;

public class LeapYearDemo {

	public static void main(String[] args) {
		// 闰年 能被4整除,但是不能被100整除。或者可以被400整除。
		System.out.println("请输入年份:");
		Scanner sc = new Scanner(System.in);
		int year = sc.nextInt();
		if (((year % 4 == 0) & (year % 100 != 0)) | year % 400 == 0) {
			System.out.println(year + "是闰年!");
		} else {
			System.out.println(year + "不是闰年!");
		}
	}

}

3.java流程控制之选择控制

1. 流程控制概述

  • 三大流程控制语句: 顺序,选择,循环
  • 顺序结构: 从上往下依次执行
  • 选择结构: 根据条件执行对应的内容

2. 多重if结构

if(表达式一){
	语句1;
}else if(表达式二){
	语句2;
}else if(表达式三){
	语句3;
}...
else{
	语句n;
}

3. 嵌套if结构

if(表达式一)
	if(表达式二)
		if(表达式三)
			语句;
else
	语句;

4. switch结构简介

  • 判断条件是常量值
switch(表达式){
	case 常量表达式1:
		语句1;
		break;
	case 常量表达式2:
		语句2;
		break;
	...
	default:
		语句n;
}
  • JDK 7.0以后表达式的值可以是基本数据类型的 byte, short, int, char ,以及 String 类型.

5. 星期的表示案例及总结

package com.imooc.flow;

import java.util.Scanner;

public class WeekDemo1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		switch (n) {
		case 1:
			System.out.println("星期一");
			break;
		case 2:
			System.out.println("星期二");
			break;
		case 3:
			System.out.println("星期三");
			break;
		case 4:
			System.out.println("星期四");
			break;
		case 5:
			System.out.println("星期五");
			break;
		case 6:
			System.out.println("星期六");
			break;
		case 7:
			System.out.println("星期七");
			break;
		default:
			System.out.println("该数字超出了1-7的范围!");
		}
	}

}

4.java流程控制之循环结构

1. 循环结构概述

  • while 循环
  • do-while 循环
  • for 循环
  • 循环嵌套
  • break语句
  • continue 语句

2. while循环

  • 语法结构
while(循环条件)
{
	语句;
}
  • 执行流程: 打印小于5的所有值.
int n=1;
while(n<5)
{
	//输出n的值
	n++;
}

上述代码注意点:

  1. n 的值必须先进行初始化.
  2. 循环变量 n 的值必须被改变.

3. 案例:循环输出英文字母

package com.imooc.flow1;

public class CharDemo {

	public static void main(String[] args) {
		// 循环输出26个英文小写字母,分两行输出
		char ch = 'a';
		int count = 1; // 控制循环
		while (ch <= 'z') {
			System.out.print(ch+" ");
			if(count%13 == 0) {
				System.out.println();
			}
			count++;
			ch++;
		}

	}

}

4. do-while循环介绍及应用

  • 语法格式
do
{
	语句;
}while(循环条件);

注意事项:

  1. do-while 循环至少执行一次
  2. 循环条件后的分号不能丢

例题如下

int n=1;
do
{
	//输出n的值
	n++;
}while(n<5);

5. 案例:猜字游戏

package com.imooc.flow1;

import java.util.Scanner;

public class GuessDemo {

	public static void main(String[] args) {
		// 设置要猜的数
		int number = (int) (Math.random() * 10 + 1); // use random to get a number from 1 to 10

		int guess;
		System.out.println("guess a number from 1 to 10");
		do {
			System.out.println("guess a number");
			Scanner sc = new Scanner(System.in);
			guess = sc.nextInt();
			if (guess > number) {
				System.out.println("too big");
			} else if (guess < number) {
				System.out.println("too small");
			}

		} while (number != guess);

		System.out.println("get it! " + number);

	}

}

6. for循环

  • 语法格式
for(表达式1; 表达式2; 表达式3)
{
	语句;
}
for(int n=1; n<5; n++)
{
	//输出语句;
}
  • 注意: for循环的大括号里面如果只有一条语句,则大括号可以省略,反之不能.

7. for循环的注意事项

  • for 循环中的 小括号里面有 3个表达式,都是可以省略的.

8. 嵌套循环

  • 求 1! + 2! + 3! + … + 10!
package com.imooc.flow1;

public class JieChenPlus {

	public static void main(String[] args) {
		// 求 1!+2!+...10!
		int s = 1, sum = 0;
		for (int i = 1; i <= 10; i++) {
			s = 1;
			for (int j = 1; j <= i; j++) {
				s = s * j; // s存放阶乘计算的结果
			}
			sum = sum + s; 
		}

		
		System.out.println("1!+2!+...10!=" + sum);
	}

}

9. 嵌套while循环应用

while(循环条件)
{
	......
	while(循环条件)
	{
		......
	}
	......
}
package com.imooc.flow1;

public class StarDemo1 {

	public static void main(String[] args) {
		// 使用嵌套 while 循环输出10行10列的星号
		int i = 1, j = 1;
		while (i <= 10) {
			j = 1;
			while (j <= i) {
				System.out.print("*");
				j++;
			}

			System.out.println();
			i++;
		}

	}

}

10. break语句

  • break 语句可以结束当前循环的执行
  • 执行完 break 语句后,循环体中位于 break 语句后面的语句就不会被执行了
  • 在多重循环中,break 语句只会向外跳一层

11. continue语句

  • continue 语句只能用在循环里
  • continue 语句可以结束当前循环的执行, 但是要继续下一次循环的执行

例: 1+3+5+7+9

public static void main(String[] args){
	int sum=0;
	for(int i=1;i<=9;i++){
		if(i%2 == 0) continue;
		sum = sum + i;
	}
	System.out.println("sum=" + sum);
}

12. debug入门

调试的作用:
让程序员能看清程序每一步的效果, 在需要查看结果的时候,使用 debug 查看实际结果是否与预期结果一致.

步骤:

  1. 设置断点
  2. 执行调试
  3. 进行单步调试
  4. Step Into / F5 跳转到方法内部
  5. Step Over / F6 一步一步执行
  6. Step Return / F7 从方法内部跳出

13. debug-多断点调试

新的快捷键

  1. Resume / F8 跳到下一个断点处

5.Java数组

1. 数组的概念

  • 数组是相同类型的数据按顺序组成的一种引用数据类型

2. 数组的声明

  • 语法格式 (2种方式):

数据类型[] 数组名; (第一种形式 推荐!)
数据类型 数据名[]; (第二种形式 )

3. 数组的创建

  • 语法格式一: 先声明后创建

数据类型[] 数据名;
数据名 = new 数据类型[数组长度];

int[] arr;
arr = new int[10];
  • 语法格式二: 声明的同时创建数组

数据类型[] 数据名 = new 数据类型[数组长度]

int[] arr = new int[10];

注意:

  1. 数组长度是必须指定的.

4. 数组在内存中的存储

  • 数组会被分配连续的内存空间

5. 数组的初始化

  • 声明数组的同时给数组赋值, 叫做数组的初始化.
  • 用的是大括号

int[] arr = {1,2,3,4,5,6,7,8,9,10};

  • 数组的长度就是初始化时所给数组元素的个数

6. 数组元素的引用

  • 语法格式:
  • 数组名[下标]
  • 注意: 下标从0开始

7. 数组的长度

  • int[] a = {1,2,3,4,5,6,7,8,9,10};
  • 属性 length 表示数组的长度, 如 a.length

8. 数组例子

package com.imooc.array;

public class ArrayDemo {

	public static void main(String[] args) {
		// 声明一个整形数组
		int[] intArray;

		// 声明一个字符串型的数组
		String strArray[];

		// 创建数组
		intArray = new int[5];
		strArray = new String[10];

		// 声明数组的同时进行创建
		float[] floatArray = new float[4];

		// 初始化数组
		char[] ch = { 'a', 'b', 'c', 'd' };

		System.out.println("数组的长度为:" + ch.length);
		System.out.println("intArray数组的第2个元素为: " + intArray[1]);
		System.out.println("strArray数组的第5个元素为: " + strArray[4]);
		System.out.println("floatArray数组的第3个元素为: " + floatArray[2]);
		System.out.println("ch数组的的第2个元素为: " + ch[1]);

		// 循环为整型数赋值
		for (int i = 0; i < 5; i++) {
			intArray[i] = i + 1;
		}

		// 循环输出整型数组中的元素
		for (int i = 0; i < intArray.length; i++) {
			System.out.print(intArray[i] + " ");
		}

	}

}

9. 案例:求数组元素的累加和

package com.imooc.array;

import java.util.Scanner;

public class ArrayDemo1 {

	public static void main(String[] args) {
		// 请整型数据的累加和
		// 定义整型数组
		int[] a = new int[5];
		Scanner sc = new Scanner(System.in);
		// 从键盘接受数据,为数组元素赋值
		for (int i = 0; i < a.length; i++) {
			System.out.println("请输入第" + (i + 1) + "个元素:");
			a[i] = sc.nextInt();
		}

		System.out.println();
		System.out.println("使用增强型for循环输出数组内容: ");
		for (int n : a) {
			System.out.print(n + " ");
		}
		
		System.out.println();
		System.out.println("数组元素的内容为:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
		
		System.out.println();
		// 求数组元素的累加和
		int sum = 0;
		for (int i = 0; i < a.length; i++) {
			sum += a[i];
		}

		System.out.println("数组元素的累加和为:" + sum);

	}

}

10. 案例:求数组元素的最大值

package com.imooc.array;

public class ArrayDemo2 {

	public static void main(String[] args) {
		// 求数组元素的最大值
		int[] a = { 34, 23, 45, 45, 21 };
		int max = a[0];
		for (int i = 1; i < a.length; i++) {
			if (max < a[i]) {
				max = a[i];
			}
		}
		System.out.println("最大值为:" + max);
	}

}

11. 增强型for循环

  • 又叫 foreach 循环
  • foreach 循环应用
int[] arr = {1,2,3,4,5};
for(int n:arr)
{
	System.out.println(n);
}

12. 如何对变量 a,b 的值进行交换

int a=3,b=5;
int temp;
temp=a;a=b;b=temp;

6.java方法

1. 方法简介

  • 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块.
  • 语法格式
访问修饰符 返回类型 方法名(参数列表){
	方法体
}
  • 根据方法是否带参数,是否有返回值,可分为四类
  1. 无参无返回值方法
  2. 无参带返回值方法
  3. 带参无返回值方法
  4. 带参带返回值方法

2. 无参无返回值方法

package com.imooc.method;

public class MethodDemo {

	// 打印输出星号的方法
	public void printStar() {
		System.out.println("**********");
		System.out.println("1java1");
		System.out.println("**********");
	}

	public static void main(String[] args) {
		// 创建一个 MethodDemo 类的对象 myMethodDemo
		MethodDemo myMethodDemo = new MethodDemo();
		// 对象名.方法名() 去调用方法
		myMethodDemo.printStar();
		
		
	}

}

3. 无参有返回值方法

package com.imooc.method;

public class Rectangle {

	// 求长方形面积的方法
	public int area() {
		int length = 10;
		int width = 5;
		int getArea = length * width;
		return getArea; // 返回语句
	}

	public static void main(String[] args) {
		// 调用方法
		Rectangle myRectangle = new Rectangle();
		int area = myRectangle.area();
		System.out.println(area);

	}

}

4. 有参无返回值方法

package com.imooc.method;

public class MaxDemo {

	// 求最大值的方法
	public void max(float a, float b) {
		float max;
		if (a > b) {
			max = a;
		} else {
			max = b;
		}
		System.out.println("2个数最大的是" + max);
	}

	// 求最大值的方法
	public void max(double a, double b) {
		double max;
		if (a > b) {
			max = a;
		} else {
			max = b;
		}
		System.out.println("2个数最大的是" + max);
	}

	public static void main(String[] args) {
		MaxDemo myMaxDemo = new MaxDemo();
		myMaxDemo.max(1.2, 21.3);

	}

}

5. 有参有返回值的方法

package com.imooc.method;

public class FacDemo {

	// 求阶乘的方法
	public int fac(int n) {
		int s = 1;
		for (int i = 1; i <= n; i++) {
			s *= i;
		}
		return s;
	}

	public static void main(String[] args) {
		FacDemo myFacDemo = new FacDemo();
		int fac = myFacDemo.fac(3);
		System.out.println("3!=" + fac);
		int sum = 0;
		// 求 1!+2!+3!+4!+5!
		for (int i = 1; i <= 5; i++) {
			fac = myFacDemo.fac(i);
			sum += fac;
		}
		System.out.println("1!+2!+3!+4!+5!=" + sum);

	}

}

6. 数组作为方法参数(上)

package com.imooc.method;

public class ArrayMethod {

	// 打印输出数组元素的值
	public void printArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}

		System.out.println();
	}

	public static void main(String[] args) {
		int[] arr = { 10, 20, 30, 40, 50 };
		ArrayMethod am = new ArrayMethod();
		am.printArray(arr);
	}

}

7. 数组作为方法参数(下)

package com.imooc.method;

import java.util.Scanner;

public class ArraySearch {

	// 查找数组元素值的方法
	public boolean search(int n, int[] arr) {
		boolean flag = false; // 默认是没有找到
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == n) {
				flag = true;
				break;
			}
		}
		return flag;
	}

	public static void main(String[] args) {
		int[] arr1 = { 10, 20, 30, 40, 50 };
		Scanner sc = new Scanner(System.in);
		int n1 = sc.nextInt();
		ArraySearch myArraySearch = new ArraySearch();
		boolean b1 = myArraySearch.search(n1, arr1);
		if (b1) {
			System.out.println("ok");
		} else {
			System.out.println("no");
		}

	}

}

8. 方法重载

  • 方法名相同,参数列表不同
package com.imooc.method;

public class MathDemo {

	// 求2个int类型数的和
	public int plus(int m, int n) {
		return m + n;
	}

	// 求2个double类型数的和
	public double plus(double m, double n) {
		return m + n;
	}

	// 求数组元素的累加和
	public int plus(int[] arr) {
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum = sum + arr[i];
		}
		return sum;
	}

	public static void main(String[] args) {
		int m = 5, n = 10;
		int[] arr = { 1, 2, 3, 4, 5, 6 };
		MathDemo mathDemo = new MathDemo();

		System.out.println(mathDemo.plus(1, 2));
		System.out.println(mathDemo.plus(1.1, 2.2));
		System.out.println(mathDemo.plus(arr));
	}

}

9. 方法的传值问题

  • 基本数据类型的传值
    方法中对参数的修改,会对主方法中传来的数组产生影响.

  • 引用数据类型的传值
    方法中对数组的改变,会影响主方法中传来的数组

  • 例: 对两个变量的值进行交换并打印输出.

package com.imooc.method;

public class ExchangeDemo {

	// 交换方法
	public void swap(int a, int b) {
		int temp;
		System.out.println("交换前:a=" + a + ",b=" + b);
		temp = a;
		a = b;
		b = temp;
		System.out.println("交换后:a=" + a + ",b=" + b);

	}

	public static void main(String[] args) {
		int m = 4, n = 5;
		ExchangeDemo ed = new ExchangeDemo();
		ed.swap(m, n);
	}

}

  • 注意: 在主方法中调用其他自定义方法的时候,需要先实例化,然后再用实例去调用.而在类中的自定义方法中调用其他自定义方法,则可以直接调用,不需要实例化.

10. 数组的传值

package com.imooc.method;

public class ArrayDemo {

	// 定义一个用于修改某个数组元素值的方法
	public void updateArray(int[] a) {
		a[3] = 15;
		System.out.println("数组a的元素为:");
		for (int n : a) {
			System.out.print(n + " ");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		ArrayDemo ad = new ArrayDemo();
		int[] a1 = { 1, 2, 3, 4, 5 };
		System.out.println("方法调用前数组a1的元素为:");
		for (int n : a1) {
			System.out.print(n + " ");
		}
		System.out.println();

		ad.updateArray(a1);

		System.out.println("方法调用后数组a1的元素为:");
		for (int n : a1) {
			System.out.print(n + " ");
		}
		System.out.println();
	}

}

  • 数组传值的时候,修改数组的值,对原来的数据也产生了影响! 这个和之前普通变量传值并不同.

11. 可变参数列表

  • 例: public void sum(int… n){}
package com.imooc.method;

public class ArgsDemo {

	// 求和
	public void sum(int... n) {
		int sum = 0;
		for (int i : n) {
			sum += i;
		}
		System.out.println("sum=" + sum);
	}

	public static void main(String[] args) {
		ArgsDemo ad = new ArgsDemo();
		ad.sum(1);
		ad.sum(1, 2);
		ad.sum(1, 2, 3);
	}

}

  • 参数列表中如果有两个以上的参数,可变参数一定是在最后的.
package com.imooc.method;

public class ArgsDemo2 {

	// 查找
	public void search(int n, int... a) {
		boolean flag = false;
		for (int i : a) {
			if (a[i] == n) {
				flag = true;
				break;
			}
		}
		if (flag) {
			System.out.println("find it");
		} else {
			System.out.println("find nothing");
		}
	}

	public static void main(String[] args) {
		ArgsDemo2 ad = new ArgsDemo2();
		ad.search(3, 1, 2, 3, 4, 5);
		int[] a = { 1, 2, 3, 4, 5 };
		ad.search(2, a);
	}

}

  • 如上: 可以将数组传递给可变参数列表
  • 一个方法中 只能有一个可变参数

12. 可变参数列表作为方法参数的重载问题

package com.imooc.method;
/**
 * 关于可变参数列表和重载的问题
 * @author zhangqiang
 * @version 1.0
 * 
 */
public class ArgsDemo3 {

	public int plus(int a, int b) {
		System.out.println("不带可变参数的方法被调用!");
		return a + b;
	}

	public int plus(int... a) {
		int sum = 0;
		for (int n : a) {
			sum = sum + n;
		}
		System.out.println("带可变参数的方法被调用!");
		return sum;
	}

	public static void main(String[] args) {
		ArgsDemo3 ad = new ArgsDemo3();
		ad.plus(1, 2);
	}

}

  • 结论: 可变参数列表所在的方法是最后被访问的!

13. 文档注释

/**
 * 关于可变参数列表和重载的问题
 * @author zhangqiang
 * @version 1.0
 * 
 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值