java 基础概念2

引用数据类型的使用
与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。
数据类型  变量名  =  new 数据类型();
每种引用数据类型都有其功能,我们可以调用该类型实例的功能。
变量名.方法名();

Scanner类
Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。
Scanner使用步骤:
导包:import java.util.Scanner;
创建对象实例:Scanner sc = new Scanner(System.in);
调用方法:
int  i = sc.nextInt(); 用来接收控制台录入的数字
String s = sc.next(); 用来接收控制台录入的字符串

public int nextInt(int maxValue) 产生[0,maxValue)范围的随机整数,包含0,不包含maxValue;
public double nextDouble()  产生[0,1)范围的随机小数,包含0.0,不包含1.0。


if语句是指如果满足某种条件,就进行某种处理
if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。
if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。
if(条件表达式1) {
语句体1;
} else if (条件表达式2) {
   语句体2;
} else if (条件表达式n...) {
语句体n...
}
...
else {
语句体n+1;
}
执行流程:
哪一个条件表达式成立,执行对应的语句体,
如果所有的条件表达式都不成立,执行最后else中的语句体


or循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
for(① ; ② ; ③){

}
第一步,执行①
第二步,执行②,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行④
第四步,执行③,然后重复执行第二步
第五步,退出循环


关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。
这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。


循环嵌套
 1public class ForForDemo {
 2 public static void main(String[] args) {
 3 int i, j; // 定义两个循环变量 111111
 4 for (i = 1; i <= 9; i++) { // 外层循环
 5 for (j = 1; j <= i; j++) { // 内层循环
 6 System.out.print("*"); // 打印*
 7 }
 8 System.out.print("\n"); // 换行
 9 }
 10 }
 11}
 
 在上述代码中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“*”,每一行的“*”个数逐行增加,
 最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:
第一步,在第3行代码定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。
第二步,在第4行代码将i初始化为1,条件i <= 9为true,首次进入外层循环的循环体。
第三步,在第5行代码将j初始化为1,由于此时i的值为1,条件j <= i为true,首次进入内层循环的循环体,打印一个“*”。
第四步,执行第5行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第5行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。
第六步,执行第4行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第4行代码中的判断条件i<=9,判断结果为true,进入外层循环的循环体,继续执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个程序也就结束了。


在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。


continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。


switch (表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,
如果没找到任何匹配的值,就会执行default后的语句。


在switch语句中的表达式只能是byte、short、char、int类型的值,如果传入其它类型的值,程序会报错。但上述说法并不严谨,
实际上在JDK5.0中引入的新特性enum枚举也可以作为switch语句表达式的值,在JDK7.0中也引入了新特性,switch语句可以接收一个String类型的值。


在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式


在Java中,可以使用以下格式来定义一个数组。如下
数据类型[] 数组名 = new 数据类型[元素个数或数组长度];
int[] x = new int[100];


int[] x;          // 声明一个int[]类型的变量
x = new int[100]; // 创建一个长度为100的数组
第一行代码 int[] x; 声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。
第二行代码 x = new int[100]; 创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化


数据类型 默认初始化值
byte、short、int、long 0
float、double 0.0
char 一个空字符(空格),即’\u0000’
boolean false

引用数据类型 null,表示变量不引用任何对象


如果在使用数组时,不想使用这些默认初始值,也可以显式地为这些元素赋值
 1public class ArrayDemo02 {
 2 public static void main(String[] args) {
 3 int[] arr = new int[4]; // 定义可以存储4个整数的数组
 4 arr[0] = 1; // 为第1个元素赋值1
 5 arr[1] = 2; // 为第2个元素赋值2
 6 // 下面的代码是打印数组中每个元素的值
 7 System.out.println("arr[0]=" + arr[0]);
 8 System.out.println("arr[1]=" + arr[1]);
 9 System.out.println("arr[2]=" + arr[2]);
 10 System.out.println("arr[3]=" + arr[3]);
 11 }
 12}
 在上述代码中,第3行代码定义了一个数组,此时数组中每个元素都为默认初始值0。第2、3
 行代码通过赋值语句将数组中的元素arr[0]和arr[1]分别赋值为1和2,而元素arr[2]和arr[3]没有赋值,
 其值仍为0,因此打印结果中四个元素的值依次为1、2、0、0。
 
 在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素赋值。
 数组的静态初始化有两种方式,
 具体格式如下:
1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};


 1public class ArrayDemo03 {
 2 public static void main(String[] args) {
 3 int[] arr = { 1, 2, 3, 4 }; // 静态初始化
 4 // 下面的代码是依次访问数组中的元素
 5 System.out.println("arr[0] = " + arr[0]);
 6 System.out.println("arr[1] = " + arr[1]);
 7 System.out.println("arr[2] = " + arr[2]);
 8 System.out.println("arr[3] = " + arr[3]);
 9 }
 10}


上述代码中采用静态初始化的方式为数组每个元素赋予初值,分别是1、2、3、4。需要注意的是,
第3行代码千万不可写成int[] arr = new int[4]{1,2,3,4};,这样写编译器会报错。
原因在于编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。 


在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
// 使用for循环遍历数组的元素
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 通过索引访问元素
}
}
上述代码中,定义一个长度为5的数组arr,数组的角标为0~4。
由于for循环中定义的变量i的值在循环过程中为0~4,因此可以作为索引,
依次去访问数组中的元素,并将元素的值打印出来。


在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值,
public class ArrayDemo05 {
public static void main(String[] args) {
int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定义一个数组
int max = arr[0]; // 定义变量max用于记住最大数,首先假设第一个元素为最大值
// 下面通过一个for循环遍历数组中的元素
for (int x = 1; x < arr.length; x++) {
if (arr[x] > max) { // 比较 arr[x]的值是否大于max
max = arr[x]; // 条件成立,将arr[x]的值赋给max
}
}
System.out.println("max=" + max); // 打印最大值
}
}
首先假设数组中第一个元素arr[0]为最大值,然后使用for循环对数组进行遍历,在遍历的过程中只要遇到比max值还大的元素,
就将该元素赋值给max。这样一来,变量max就能够在循环结束时记住数组中的最大值。需要注意的是,
在for循环中的变量i是从1开始的,这样写的原因是程序已经假设第一个元素为最大值,
for循环中只需要从第二个元素开始比较,从而提高程序的运行效率


每个数组的索引都有一个范围,即0~length-1。在访问数组的元素时,索引不能超出这个范围,否则程序会报错,
 1public class ArrayDemo06 {
 2 public static void main(String[] args) {
 3 int[] arr = new int[4]; // 定义一个长度为4的数组
 4 System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素
 5 }
 6}
 上图运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,出现这个异常的原因是数组的长度为4,其索引范围为0~3,
 而上述代码中的第4行代码使用索引4来访问元素时超出了数组的索引范围。
所谓异常指程序中出现的错误,它会报告出错的异常类型、出错的行号以及出错的原因,


在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量的值为null,则意味着没有指向任何数组,
此时通过该变量访问数组的元素会出现空指针异常,接下来通过一个案例来演示这种异常
 1public class ArrayDemo07 {
 2 public static void main(String[] args) {
 3 int[] arr = new int[3]; // 定义一个长度为3的数组
 4 arr[0] = 5; // 为数组的第一个元素赋值
 5 System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 6 arr = null; // 将变量arr置为null
 7 System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 8 }
 9}
 
 数组的遍历及数组的元素累加和操作。
class ArrayDemo09 {
public static void main(String[] args){
//一维数组的求累加和并遍历
int[] arr = {10,20,30,40,50};
int sum = 0; 
for (int i=0; i<arr.length; i++) {
              //System.out.println(arr[i]);
sum += arr[i];
}
System.out.println("sum= " + sum);
System.out.println("---------------------");

//二维数组的求累加和并遍历
int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
int sum2 = 0;
for (int i=0; i<arr2.length; i++) {
for (int j=0; j<arr2[i].length; j++) {
                 //System.out.println(arr2[i][j])
sum2 += arr2[i][j];
}
}
System.out.println("sum2= "+ sum2);
}
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值