javaSE复习

复习javase

数据类型

 jdk  jre jvm
 配置环境变量 
 标识符 
 关键字 
 常量+变量
 运算符:  算术运算符  比较运算符 赋值运算符  位运算符  逻辑运算符  三元运算符
 数据类型:   
 数据类型转换:java是强类型语言:值的类型必须和变量类型一致
        1: 自动类型转换情况1:  高精度变量=低精度数据;
                eg:  float  f=1;
                     左边float类型的变量f  右边int类型的整数1
                     编译器会把 4个字节int类型的1  自动转换为4个字节float类型的1.0f 然后赋值
       2: 自动类型转换情况2:  char/byte/short类型的变量=int常量值;
               eg:     byte  b1=1;
                      编译器判断1 处在byte范围内,把4个字节int类型的自动转换为1个字节byte类型的1
                      然后赋值
               eg:     short  s1= 50000;  (short取值:-32768到32767) 
                       编译器判断50000不在short范围内,直接报错
      3: 强制类型转换: 低精度变量=(低精度变量的类型)高精度数据; 
               eg:     short  s2=(short)50000;
                       int i1=(int)1.1;
                       编译器强制把8个字节double类型的1.1 转换为4个字节int类型的1  然后赋值
//数据类型精度表:(boolean)byte short (char)int long float double 
/*
boolean、byte 1个字节 8位;
short、char 2个字节 16位;
int float 4个字节 32位;
double、long 8个字节 64位
*/
//自动转化三类:
//自动转化类型1,高的精度=低的精度
long l =  1 ;
double d =  ‘1‘;
//自动转化类型2,byte/short/char 变量 = int 常量值
 byte b = 1 ;
//byte占1个字节,8位-127到127
//自动转化类型3,低的精度=(低精度)高的精度
short f = (short) 100000;
//这里输出为负数,因为超过了short的最大值
/*
思考
 */
 byte b1 = (int)1.1;
 //注意是常量值不是变量,变量必须自己强转
int i1=1;byte b2 = (byte) i1;
short s1 = 1;char c1 = (char) s1;

流程控制

学过的内容总结自己的话

计算机所有语言所有概念都是望文生义

流程控制:就是计算机执行程序的流程,一般为从上到下、从左到右。
1.选择结构
if-else
switch:只适用于穷举法,必须把所有可能列举出来
2.循环结构
while
do-while:至少执行一次
for
3: 循环结构
    for
    while
    do while
4: 跳转
    break
    continue 
  • ifelse
 //2.1 if-else
        int a=1;
        if(a>0){
            System.out.println("a=" + a + "大于0!");
        }
        if(a>0)   //如果执行的代码块只有一个语句  大括号可以省略---不规范
            System.out.println("a=" + a + "大于0!");
        System.out.println(111);
  • switch
       //2.2 switch
        /*
        * switch: 只适用于穷举法: 必须把所有可能的清空列举  不适用范围判断
        * switch注意事项:
        *    1  switch表达式的值的数据类型仅限于:int+String+enum
        *    2  case后面的值不能重复
        *    3  只有当所有的case都不正确时 才运行default 与其位置无关
        *    4  break的作用是 结束switch结构
        * */
        //根据月份判断季节: 3 4 5春天 678 夏 9 10 11 秋季 12 1 2 冬季
        int month=1;
        switch(month){
            default:
                System.out.println("momnth="+month+"月是火星季!");
                break;
            case  1:
            case  2:
            case  12:
                System.out.println("momnth="+month+"月是冬季!");
                break;
            case  3:
            case  4:
            case  5:
                System.out.println("momnth="+month+"月是春季!");
                break;
            case  6:
            case  7:
            case  8:
                System.out.println("momnth="+month+"月是夏季!");
                break;
            case  9:
            case  10:
            case  11:
                System.out.println("momnth="+month+"月是秋季!");
                break;

        }
  • while和dowhile的区别
//1 while和dowhile的区别
//while是先判断再执行
//dowhile是先执行再判断::dowhile至少执行一次
int a=-1;
while(a>=0){
    System.out.println(a+">=0成立!while");
    a--;//迭代语句:按指定的算法更改变量的值
}
a=-1;
do{
    System.out.println(a+">=0成立!do---while");
    a--;//迭代语句:按指定的算法更改变量的值
}while(a>=0);
  • for
//1 for格式
/*
        * for(初始化语句;循环条件;迭代语句){
        *      循环体
        * }
        * */
for(int a=1;a<=5;a++){
    //System.out.println("a="+a);
}
//2 省略
//        for(;;){  //如果条件表达式省略 默认是true  死循环
//            System.out.println("111");
//        }
//3 执行流程
//初始化语句只执行一次:第一次循环前执行一次
//先执行初始化语句  -》
//      1:判断条件表达式是否成立  不成立结束循环
//      2:条件表达式成立 执行循环体
//      3:循环体执行完 执行迭代语句
//      迭代语句执行完  再次判断条件表达式是否成立  一直循环执行1 2 3步
//      直到1的条件表达式不成立 才结束循环
int i=1;
for(System.out.println("i="+i+"初始化语句!");i<=0; System.out.println("i="+i+"迭代语句!")){
    //System.out.println("i="+i+"循环体!");
    i++;
}
//4 变量作用范围
int a=1;//1 变量a在for循环外面定义的: 作用于整个for循环  并且在for循环结束后仍然可以访问到
for(int b=1;b<=5;){// 2 变量b在for循环的初始化语句中定义的: 作用于整个for循环  for循环结束后变量消失
    int c=1;  // 3 变量c在for循环的循环体中定义的:只作用于本次循环
    //System.out.println("a="+a+",b="+b+",c="+c);
    b++;a++;c++;
}
System.out.println("a="+a);

//案例1:获取1到100内个位数值为1 并且可以被3整除的所有数平均值
// 需要让一个数从值1跑到值2  使用循环
//定义变量记录和 和 个数
int sum1=0,geShu1=0;
for(int n=1;n<=100;n++){
    //判断当前n的个位数值为1 并且可以被3整除
    if(n%3==0){
        //获取个位数
        int geWeiShu=n%10;
        if(geWeiShu==1){
            System.out.println("n="+n+":::满足条件!");
            geShu1++;
            sum1+=n;
        }
    }
}
System.out.println("获取1到100内个位数值为1 并且可以被3整除的所有数平均值="+sum1*1.0/geShu1);

数组

  • 概念
数组:装相同类型 指定个数个数据 的容器
元素:数组中存储的每个数据称为数组的元素
下标/索引:  元素在数组中位置(顺序),通过数组名+下标可以获取元素
关键字:[]
  • 特点
1  装多个数据的容器:对象类型
     java中把数据按复杂程度分成两种:1 单值数据--八种基本数据类型(值:常量值)
                                2 复杂数据--多个基本数据有机组合形成的整体(值:对象)
2  元素类型必须相同
3  元素个数固定
4  创建时 必须目前元素类型和元素个数
  • 使用
一个数据使用变量记录
多个相同类型的数据使用数组记录
好处:
int age1,age2,age3,age4,age5;
int[] arrAge=new int[5];
数组会自动给装入期中的元素分配下标:下标从0到length-1  通过arrAge[下标] 可以获取指定元素
  • 注意事项
1  数组中的元素 不赋值 有默认初始值:值取决于元素的类型
           值:此类型的0  boolean是false
2  获取元素时  下标取值为0到length-1  否则:ArrayIndexOutOfBoundsException
  • 内容介绍
//等于一个数组装5个int类型的数据
//创建数组时 必须明确:元素类型 元素个数
int[] arr;//定义数组名
arr=new int[5];//new int[5]在内存中创建一个数组 元素类型时int 元素个数时5
// =  让左边的对象名arr指向右边在内存中new的对象
int[] arr2=new int[5];//每new一个 就一个新的对象

//遍历数组:使用for循环
for(int i=0;i<arr.length;i++){
    System.out.println("arr["+i+"]="+arr[i]);
}
//遍历数组:使用foreach:简洁for循环
//    优点:简洁
//    缺点:1 不能获取元素的下标
//         2 元素不能增和删
for(int a:arr2){
    System.out.println("a="+a);
}

System.out.println(arr[5]);//ArrayIndexOutOfBoundsException: 5
System.out.println(1+1);

//创建数组的三种格式
//格式1: 元素类型[] 对象名=new 元素类型[元素个数];
//不直到元素的具体值:
int[] arr01=new int[3];//数组中的元素有默认值
arr01[0]=19; arr01[1]=29; arr01[2]=18;//给元素赋值

//格式2: 元素类型[] 对象名=new 元素类型[]{值1,值2,值3...};
//知道元素的具体值
int[] arr02=new int[]{1,2,3,4};
//格式3: 元素类型[] 对象名={值1,值2,值3...};
int[] arr03={1,2,3,4};
  • 一维数组的要求
//一维数组的要求
//1:遍历
//2:求最大值
arr=new int[]{1,4,5,7,9,0,2,11,4};
int max1=arr[0];//定义变量记录最大值:初始值为第一个元素
for(int i=1;i<arr.length;i++){
    //拿max1与所有元素作比较
    max1=(max1>arr[i]?arr[i]:max1);
}
//3: 排序
数组排序:顺序排序
  • 概念
顺序排序:依次拿当前元素何其后面的所有元素做比较
  • 图解

javaSE复习

  • 使用代码模拟打印的效果
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
    System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//打印的效果
/*
        * arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4] arr[0]-arr[5]
        * arr[1]-arr[2] arr[1]-arr[3] arr[1]-arr[4] arr[1]-arr[5]
        * arr[2]-arr[3] arr[2]-arr[4] arr[2]-arr[5]
        * arr[3]-arr[4] arr[3]-arr[5]
        * arr[4]-arr[5]
        * */
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
    //System.out.println("当前元素:arr["+i+"]");
    for(int j=i+1;j<arr.length;j++){
        //arr[i]是当前元素
        //arr[j]是当前元素后面的元素
        //拿arr[i]和arr[j]比较
        System.out.print("arr["+i+"]-arr["+j+"] ");
    }
    System.out.println();//打印换行
}
  • 把打印更改为比较即可
//顺序排序:依次拿当前元素何其后面的所有元素做比较
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
    System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//把打印更改为比较
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
    for(int j=i+1;j<arr.length;j++){
        //arr[i]是当前元素
        //arr[j]是当前元素后面的元素
        //拿arr[i]和arr[j]比较
        if(arr[i]<arr[j]){
            int k=arr[i];arr[i]=arr[j];arr[j]=k;
        }
    }
}
for(int i=0;i<arr.length;i++){
    System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
二维数组
  • 概念
n维数组:装指定个数个 n-1维数组的容器
注意:一般说的数组::指的是一维数组
二维数组关键字:[][]
  • 学习重点
//二维数组要求:
//1 会创建  2 会遍历
//创建二维数组:
//格式1:元素类型[][] 对象名=new 元素类型[n][m];
int[][] arr1=new int[3][4];
//格式2:元素类型[][] 对象名=new 元素类型[][]{{值1,值2,值3..},{值1,值2,值3..},{值1,值2,值3..}};
int[][] arr2=new int[][]{{1},{1,4,6},{1,5},{0,1,2,4,65}};
//格式3:元素类型[][] 对象名={{值1,值2,值3..},{值1,值2,值3..},{值1,值2,值3..}};
int[][] arr3={{1},{1,4,6},{1,5},{0,1,2,4,65}};

//注意1:元素有默认值 int[][] arr1=new int[3][4];
arr1=new int[][]{{1},{1,4,6},{1,5},{0,1,2,4,65}};
System.out.println("arr1="+arr1);
//arr1=[[I@1540e19d  对象类型@16进制内存地址
System.out.println("arr1.length="+arr1.length);
//arr1.length:二维数组arr1中 一维数组的个数
System.out.println("arr1[0]="+arr1[0]);
//arr1[0]:二维数组arr1中 下标为0的一维数组对象
System.out.println("arr1[0].length="+arr1[0].length);
//arr1[0].length:二维数组arr1中 下标为0的一维数组的元素个数
System.out.println("arr1[1][2]="+arr1[1][2]);
//arr1[1][2]:二维数组arr1中 下标为1的一维数组对象中下标为2的元素的值

//遍历二维数组
for(int i=0;i<arr1.length;i++){  //遍历二维数组中的一维数组
    for(int j=0;j<arr1[i].length;j++){//遍历当前一维数组arr[i]中的所有元素
        System.out.print(arr1[i][j]+(j==arr1[i].length-1?"\n":","));
    }
}
  • 练习题
        /*
         * 数组练习题:
         * 创建一个装10个int元素的数组:  1 2 3 0 6 7 8 9 9 10 10
         * 1  获取数组的次大值:
         * 2  数组倒序:
         * 3  打印数组:
         *     1   3  5  6  4
         *     *
         *     ***
         *     *****
         *     ******
         *     ****
         * 4 打印数组:
         *     1    3    5    6    4
         *                    *
         *               *    *
         *               *    *    *
         *          *    *    *    *
         *          *    *    *    *
         *     *    *    *    *    *
         * 5 扩展题:
         *     打印杨辉三角
         *
         * 1
         * 1   1
         * 1   2    1
         * 1   3    3    1
         * 1   4    6    4    1
         * 1   5    10   10   5    1
         * 1   6    15   20   15   6   1
         * */

第四题:

public class PrintArrayPlus {
    public static void main(String[] args) {
        int a[] = { 1,3, 5, 6, 4,1};
        char b[][] = new char[6][6];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i]; j++) {
                b[i][j]=‘*‘;
            }
        }
        //                           (0,2) (1,2)
        //(0,0) (0,1) (0,2)          (0,1) (1,1)
        //(1,0) (1.1) (1.2)    -->   (0,0) (1,0)

        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[0].length; j++) {
                System.out.print(b[i][j]);
            }
            System.out.println();
        }

        for (int i = 0; i < b[0].length; i++) {
            for (int j = 0; j < b.length; j++) {
                System.out.print(b[j][b.length-1-i]+"\t");
            }
            System.out.println();
        }
        }
    }

杨辉三角:

public class YangHuiTriangle {
    public static void main(String[] args) {
        int a[][] = new int [10][10];
        for (int i = 0; i < a.length; i++) {
                a[i][0]=1;
                a[i][i]=1;
        }
        for (int i = 2; i < a.length; i++) {
            for (int j = 1; j < i; j++) {
                a[i][j]=a[i-1][j]+a[i-1][j-1];
            }
        }
        for (int i = 0; i < a.length; i++) {
            for (int j  = 0; j < i+1; j++) {
                System.out.print(a[i][j]+"\t");
            }
            System.out.println();
        }

    }
}

javaSE复习

上一篇:Python-类的内置方法中__repr__和__str__的区别


下一篇:Java中equals方法和hashCode方法的关系