Java教程

二、JavaSE中常见的概念问题

本文主要是介绍二、JavaSE中常见的概念问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java中的流程控制语句

一、判断语句if-else

格式:

格式1:
    if(关系表达式){
      语句体;
   }
格式2:
   if(关系表达式) {
      语句体1;
   }else {
      语句体2;
   }
格式三:
   if (判断条件1) {
      执行语句1;
   } else if (判断条件2) {
      执行语句2;
   }
   …
   }else if (判断条件n) {
      执行语句n;
   } else {
      执行语句n+1;
   }

总结:
   1.流程控制语句可以任意嵌套
   2.if可以单独存在,else不能单独存在。如果出现else,则必须有if与之对应
   3.如果在if…else代码块中只有一条执行代码,则大括号可以省略,但不建议省略。

二、选择语句switch–case

格式:

switch(表达式) {
    case 常量值1:
        语句体1;
        break;
    case 常量值2:
        语句体2;
        break;
        …
    default:
        语句体n+1;
        break;
}


switch语句总结:

1.条件:
        等值表达式,值的类型只能满足六种(byte/short/int/char/枚举(jdk1.5之后)/String(jdk1.7之后))
2.执行体:
        case的值不能重复,case与default没有书写顺序,但是有执行顺序,会根据值来匹配对应的case去执行,如果都不匹配 ,则执行default。如果没有遇到break,会执行所有可执行的代码。

总结:
        1. if…else和switch…case都称为流程控制语句

Java中的循环语句

循环四要素:四个什么?
 1.初始化条件(值)-----------从什么时候开始循环
 2.循环判断条件-------------满足什么条件才循环
 3.循环体----------------------循环的是什么
 4.结束条件--------------------什么时候停止循环

一、for循环

1.1格式

for(初始化表达式; 布尔表达式; 步进表达式){
 循环体
}


注意:
 1.for循环中循环四要素可以都不写,也可以只写一部分。但是两个分号;必须得写,否则报错。
 2、双层循环: 外层循环控制行,内层循环控制列。外层循环执行一次,内层循环执行一轮。

二、while循环

2.1 while循环
格式:

初始化表达式
while(布尔表达式){
 循环体
 步进表达式
}

2.2 do–while循环
格式:

初始化表达式
do{
 循环体
 步进表达式
}while(布尔表达式);


do...while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的 循环具有一定的风险性,因此初学者不建议使用do...while循环。

三、for 和 while 的小区别

①控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
③在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。

四、结束语句

4.1 break
  • 使用场景:终止switch或者循环
    • 在选择结构switch语句中
    • 在循环语句中
    • 离开使用场景的存在是没有意义的
4.2 continue
  • 使用场景:循环语句中,结束本次循环,继续下一次的循环

注意:
1.结束语句有就近原则,对其离得最近的循环起作用
2.可以通过起别名的方式结束循环
代码如下:

        Scanner scanner = new Scanner(System.in);
        //起别名
        a:while(true){
            System.out.println("username");
            String username= scanner.next();
            if ("TOM".equals(username)){
                while(true){
                    System.out.println("password");
                    String password = scanner.next();
                    if ("123456".equals(password)) {
                        System.out.println("登录成功");
                        break a;//指定跳出层循环
                    }else{
                        System.out.println("密码错误");
                    }
                }
            }else{
                System.out.println("账号错误");
            }
        }

数组

一、数组的相关概念

1.1作用
  • 为了避免一种数据类型重复定义
  • 为了避免变量名在同一块内存中不能重复使用
1.2 含义

存储一组相同数据类型的容器

1.3 数组定义的格式
  • 格式一

数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];


数组定义格式详解:
  • 数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
  • [] : 表示数组。
  • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组
  • new:关键字,创建数组使用的关键字。
  • 数组存储的数据类型:创建的数组容器可以存储什么数据类型。
  • [长度]:数组的长度,表示数组容器中可以存储多少个元素。
  • 注意:数组有定长特性,长度一旦指定,不可更改。 和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。
例如:
	int[] arr = new int[3];
  • 格式二

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};

例如:
	int[] arr = new int[]{1,2,3,4,5};
  • 格式三

数据类型[] 数组名 = {元素1,元素2,元素3…};

例如:
	int[] arr = {1,2,3,4,5};

补充:

  • 各种数据类型的数组的默认值:
    String[] ----------null;
    int[]----------------0;
    chart[]-------------空格;
    double[]----------0.0;
    byte[]--------------0;
    boolean[]---------false;
  • 数组获取值和赋值
    获取值:数组名[index]
    赋值:数组名[index]=值
  • 数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。由此可以推断出,数组的最大索引值为 数组名.length-1 。
1.4 数组原理内存图
  • 内存概述
    内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
    Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

  • Java虚拟机的内存划分
    在这里插入图片描述

  • 数组在内存中的存储的详细过程

    代码如下:
    public static void main(String[] args) {
    	int[] arr = new int[3];
    	System.out.println(arr);//[I@5f150435
    }
    /**
    *以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。
    *new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。
    */
    

输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素

 两个数组内存图

public static void main(String[] args) {
 int[] arr = new int[3];
 int[] arr2 = new int[2];
 System.out.println(arr);
 System.out.println(arr2);
}
在这里插入图片描述

 两个变量指向一个数组

public static void main(String[] args) {
 // 定义数组,存储3个元素
 int[] arr = new int[3];
 //数组索引进行赋值
 arr[0] = 5;
 arr[1] = 6;
 arr[2] = 7;
 //输出3个索引上的元素值
 System.out.println(arr[0]);
 System.out.println(arr[1]);
 System.out.println(arr[2]);
 //定义数组变量arr2,将arr的地址赋值给arr2
 int[] arr2 = arr;
 arr2[1] = 9;
 System.out.println(arr[1]);
}
在这里插入图片描述

1.5 数组的常见操作

1.复制(java中提供了两种方式)

  • 由Arrays类提供的

    public static 数组类型[] copyOf(数组类型[] src,int newlength)
    – src:源数组-------------------------提供复制数据的数据源
    – newlength -------------------------新数组的长度,长度>=0
    例如:
     int[] arr1 = {1,2,3,4,5,6};
     int[] arr2 = new arr2[8];
     int[] arr2 = Arrays.copyOf(new arr1,5);

  • 由System类提供的

    public static void arraycopy(数组类型[] src, int srcPos, 数组类型 dest, int destPos, int length)
    – src:源数组--------------------------提供复制数据的数据源
    – srcPos:源数组的开始位置---------从数组中哪个位置开始复制
    – desc:目标数组---------------------复制到哪个数组
    – destPos:目标数组的开始位置-----从目标数组中的哪个位置开始复制
    – length:复制的长度
    例如:
    int[] arr = {1,2,3,4,5,6};
    int[] array = new int[3];
    System.arraycopy(arr,1,arrary,0,array.length);
    注意:
    — 如果是从头开始复制,长度不限,建议使用copyOf()方法。
    — 如果是指定位置长度进行复制,建议使用arraycopy()方法。

2.排序(冒泡排序法)

口诀:
 N个数来排序
 两两相比小靠前
 外层循环length-1
 内层循环length-i-1

例如:
public class TestDemo {

    public static void main(String[] args) {
        int[] arr = {2,8,1,6,3,7,9};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if (arr[j] > arr[j+1]){
                    int temp = 0;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int a:arr) {
            System.out.println(a);
        }
    }
}

3.值传递和引用传递

  • 分析下列程序代码,计算输出结果。

    package com.kejizhentan;
    
    import java.util.Scanner;
    
    public class TestDemo {
    
        public static void main(String[] args) {
            int a = 1;
            int b = 2;
            System.out.println(a);
            System.out.println(b);
            change(a, b);
            System.out.println(a);
            System.out.println(b);
        }
    
        public static void change(int a, int b) {
            a = a + b;
            b = b + a;
        }
    }
    
    

    结果如下:在这里插入图片描述

  • . 分析下列程序代码,计算输出结果。

    public class TestDemo {
    
        public static void main(String[] args) {
            int[] arr = {1, 3, 5};
            System.out.println(arr[0]);
            change(arr);
            System.out.println(arr[0]);
        }
    
        public static void change(int[] arr) {
            arr[0] = 200;
        }
    }
    

    总结:
     方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.

这篇关于二、JavaSE中常见的概念问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!