• JavaSE学习总结第06天_Java语言基础2 & 面向对象1


     

    06.01 二维数组概述和格式1的讲解

    二维数组概述:二维数组其实就是一个元素为一维数组的数组

    格式1:数据类型[][] 变量名 = new 数据类型[m][n];

    m表示这个二维数组有多少个一维数组,n表示每一个一维数组的元素个数

    例:int[][] arr = new int[3][2];

    定义了一个二维数组arr

    这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]

    每个一维数组有2个元素,可以通过arr[m][n]来获取,表示获取第m+1个一维数组的第n+1个元素

     

    格式1还可以写成int arr[][]; int[] arr[]; 但是都不建议

    注意:

    int x,y;     表示同时定义两个int型的变量x、y

    int[] x,y[]; 表示定义了一个一维数组x,一个二维数组y

    例:

     1 //定义一个二维数组,有3个一维数组,每个
     2 //一维数组有2个元素
     3 int[][] arr = new int[3][2];
     4 
     5 //输出二维数组名称
     6 System.out.println(arr); //[[I@1175422
     7 
     8 //输出二维数组的第1个元素一维数组的名称
     9 System.out.println(arr[0]); //[I@949f69
    10 
    11 //输出二维数组的元素
    12 System.out.println(arr[0][0]); //0

    06.02 二维数组格式1的内存图解

     

    06.03 二维数组格式2的讲解

    格式2:数据类型[][] 变量名 = new 数据类型[m][];

    m表示这个二维数组有多少个一维数组,但没有直接给出一维数组的元素个数,可以动态的给出

    例:

    1 int[][] arr = new int[3][]; //定义一个有3个一维数组的二维数组
    2 arr[0] = new int[2]; //第1个一维数组有2个元素
    3 arr[1] = new int[3]; //第2个一维数组有3个元素
    4 arr[2] = new int[1]; //第3个一维数组有1个元素 

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[][] arr = new int[3][];
     6 
     7         System.out.println(arr); //[[I@1175422
     8         System.out.println(arr[0]); //null
     9 
    10         //动态的为每一个一维数组分配空间
    11         arr[0] = new int[2];
    12         arr[1] = new int[3];
    13         arr[2] = new int[1];
    14 
    15         System.out.println(arr[0]); //[I@949f69
    16         System.out.println(arr[0][0]); //0
    17 
    18         arr[1][0] = 100;
    19         arr[2][0] = 200;
    20     }
    21 }

    06.04 二维数组格式2的内存图解

    06.05 二维数组格式3的讲解

    格式3:数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}};

    简化版格式:数据类型[][] 变量名 = {{元素...},{元素...},{元素...}};

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

    06.06 二维数组格式3的内存图解

    06.07 二维数组练习1遍历

    二维数组遍历

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
     6         //外循环控制的是二维数组的长度,其实就是一维数组的个数
     7         for(int i = 0;i < arr.length;i++)
     8         {
     9             //内循环控制的一维数组的长度
    10             for(int j = 0;j < arr[i].length;j++)
    11             {
    12                 System.out.print(arr[i][j]+" ");
    13             }
    14             System.out.println();
    15         }
    16     }
    17 }

    06.08 二维数组练习2求和

    某公司按照季度和月份统计的数据如下:单位(万元)

    第一季度:22,67,43

    第二季度:77,33,88

    第三季度:25,43,65

    第四季度:11,66,99

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         //将题目的数据用二维数据表示
     6         int[][] arr = {{22,67,43},{77,33,88},{25,43,65},{11,66,99}};
     7 
     8         //定义一个求和变量
     9         int sum = 0;
    10         //遍历二维数组
    11         for(int i = 0;i < arr.length;i++)
    12         {
    13             System.out.print("第"+(i+1)+"季度分别为:");
    14             for(int j = 0;j < arr[i].length;j++)
    15             {
    16                 System.out.print(arr[i][j]+"万 ");
    17                 sum += arr[i][j];
    18             }
    19             System.out.println();
    20         }
    21         System.out.println("总和为:"+sum+"万元");
    22     }
    23

    运行结果:

    第1季度分别为:22万 67万 43万
    第2季度分别为:77万 33万 88万
    第3季度分别为:25万 43万 65万
    第4季度分别为:11万 66万 99万
    总和为:639万元

    06.09 二维数组练习3杨辉三角

    打印杨辉三角形(行数可以键盘录入)

    1

    1 1

    1 2 1

    1 3 3 1

    1 4 6 4 1

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Scanner sc = new Scanner(System.in);
     6         System.out.println("请输入一个数:");
     7         int n = sc.nextInt();
     8 
     9         //根据键盘录入的数据创建一个二维数组
    10         int[][] arr = new int[n][n];
    11 
    12         //给二维数组的任何一行的第一列和最后一列赋值为1
    13         for(int i = 0;i < arr.length;i++)
    14         {
    15             arr[i][0] = 1; //任何一行第一列
    16             arr[i][i] = 1; //任何一行最后一列
    17         }
    18 
    19         for(int i = 2;i < arr.length;i++)
    20         {
    21             for(int j = 1;j <= i-1; j++)
    22             {
    23                 //每一个数据是它上一行的前一列和它上一行的本列之和
    24                 arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
    25             }
    26         }
    27 
    28         //遍历二维数组
    29         for(int i = 0;i < arr.length;i++)
    30         {
    31             for(int j = 0;j <= i;j++)
    32             {
    33                 System.out.print(arr[i][j]+"	");
    34             }
    35             System.out.println();
    36         }
    37     }
    38 }

     06.10 思考题1Java中的参数传递问题

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int a = 10;
     6         int b = 20;
     7         System.out.println("a:"+a+",b:"+b); //a:10,b:20
     8         change(a,b);
     9         System.out.println("a:"+a+",b:"+b); //a:10,b:20
    10 
    11         int[] arr = {1,2,3,4,5};
    12         change(arr);
    13         System.out.println(arr[1]); //4
    14     }
    15     public static void change(int a,int b)  
    16     {
    17         System.out.println("a:"+a+",b:"+b); //a:10,b:20
    18         a = b;
    19         b = a + b;
    20         System.out.println("a:"+a+",b:"+b); //a:20,b:40
    21     }
    22 
    23     public static void change(int[] arr)
    24     {
    25         for(int x=0; x<arr.length; x++)
    26         {
    27             if(arr[x]%2==0)
    28             {
    29                 arr[x]*=2;
    30             }
    31         }
    32     }
    33 }

    Java中的参数传递问题:

    基本类型:形式参数的改变不影响实际参数

    引用类型:形式参数的改变直接影响实际参数

    06.11 思考题2加密问题的分析

    数据加密问题

    某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:

    首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。

    如输入123456  输出609871

    分析:

    1.数据是小于8位的整数,可以定义一个int类型的数据

    2.加密规则

    a:首先将数据倒序

    b:然后将每位数字都加上5,再用和除以10的余数代替该数字

    c:最后将第一位和最后一位数字交换

    3.把加密后的结果输出在控制台

         

    通过分析,需要将数据变成数组        

    1.定义一个数据

    2.定义一个数组,int[] arr = new int[8]; //不可能超过8

    在赋值的时候,用一个变量记录索引的变化。

    3.获取每一个数据

    int ge = number%10

    int shi = number/10%10

    int bai = number/100%10

    06.12 思考题2加密问题的代码的实现

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         //定义一个数据
     6         int num = 123456;
     7         //定义一个数组
     8         int[] arr = new int[8];
     9         //获取数据中的每一位数据存储到数组中
    10         int index = 0;
    11         while(num > 0)
    12         {
    13             arr[index] = num % 10;
    14             index++;
    15             num /= 10;
    16         }
    17 
    18         for(int i = 0;i < index ;i++)
    19         {
    20             arr[i] += 5;
    21             arr[i] %= 10;
    22         }
    23 
    24         int temp = arr[0];
    25         arr[0] = arr[index - 1];
    26         arr[index - 1] = temp;
    27 
    28         for(int i = 0;i < index;i++)
    29         {
    30             System.out.print(arr[i]+" ");
    31         }
    32         System.out.println();
    33     }
    34 }

    06.13 思考题2加密问题的代码改进

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Scanner sc = new Scanner(System.in);
     6         System.out.print("原始数据:");
     7         int num = sc.nextInt();
     8         //定义一个数组
     9         int[] arr = new int[8];
    10         //获取数据中的每一位数据存储到数组中
    11         int index = 0;
    12         while(num > 0)
    13         {
    14             arr[index] = num % 10;
    15             index++;
    16             num /= 10;
    17         }
    18 
    19         for(int i = 0;i < index ;i++)
    20         {
    21             arr[i] += 5;
    22             arr[i] %= 10;
    23         }
    24 
    25         int temp = arr[0];
    26         arr[0] = arr[index - 1];
    27         arr[index - 1] = temp;
    28 
    29         System.out.print("加密数据:");
    30         for(int i = 0;i < index;i++)
    31         {
    32             System.out.print(arr[i]);
    33         }
    34         System.out.println();
    35     }
    36 }

    06.14 思想引入和面向过程思想概述

    通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类来封装这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。

     

    面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。

    面向过程的代表语言:C语言

    06.15 面向对象思想概述

    面向对象思想概述:面向对象是基于面向过程的编程思想

     

    面向过程:对于面向过程思想,强调的是过程(动作)。例如C语言就是面向过程语言

    面向对象:对于面向对象思想,强调的是对象(实体)。例如C++ 、Java 、C#就是面向对象的语言

     

    面向对象思想特点:

    1.面向对象是一种常见的思想,符合人们的思考习惯

    2.面向对象的出现,将复杂的问题简单化

    3.面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者

    06.16 大象装进冰箱案例

    把大象装进冰箱

    面向过程:动作

    1:打开冰箱门

    2:装进大象

    3:关闭冰箱门

     

    面向对象:在用面向对象思想体现的时候,给出一个三句话使用规则,让我们更符合面向对象思想

    1.有哪些类

    2.每个类有哪些东西

    3.类与类直接的关系是什么

    把大象装进冰箱的分析(如何分析有哪些类呢?UML。名词提取法。)

    1.有哪些类:大象、冰箱、Demo

    2.每个类有哪些东西:[大象:进去]、[冰箱:开门关门]、[Demo:main方法]

    3.类与类直接的关系:Demo中使用大象和冰箱类的功能

    06.17 开发,设计以及特征

    面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情。

    面向对象设计:就是在管理和维护对象之间的关系。

    面向对象特征:

    封装(encapsulation)

    继承(inheritance)

    多态(polymorphism)

    06.18 类与对象

    如何表示一个现实世界事物:

    属性就是该事物的描述信息

    行为就是该事物能够做什么

    我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现

    事物的属性与行为在类中对应成员变量与成员方法

     

    类是一组相关的属性和行为的集合

    对象是该类事物的具体体现

    类是抽象的,概念的,代表一类事物,例如人类、猫类

    对象是具体的,实际的,代表一个具体的事物

    类是事物的描述,对象是该类事物的实例,在java中通过new创建

    06.19 类的定义概述

    类与对象的关系图:

    上图中图纸就是类,每一个汽车就是对象

     

    现实世界的事物

    属性人的身高,体重等

    行为人可以学习,吃饭等

     

    Java中用class描述事物也是如此

    成员变量就是事物的属性

    成员方法就是事物的行为

    定义类其实就是定义类的成员(成员变量和成员方法)

    06.20 学生类的定义

    如何定义学生类

    按照事物到类的过程一步步分析

    学生事物:

           属性:姓名,年龄,地址...

           行为:学习,吃饭,睡觉...

    把事物要转换为对应的类:

    学生类:

          成员变量:姓名,年龄,地址...

          成员方法:学习,吃饭,睡觉...

     1 class Student 
     2 {
     3     //定义变量
     4     //姓名
     5     String name;
     6     //年龄
     7     int age;
     8     //地址
     9     String address;
    10     
    11     //定义方法
    12     //学习的方法
    13     public void study() 
    14     {
    15         System.out.println("学生爱学习");
    16     }
    17     
    18     //吃饭的方法
    19     public void eat() 
    20     {
    21         System.out.println("学习饿了,要吃饭");
    22     }
    23     
    24     //睡觉的方法
    25     public void sleep() 
    26     {
    27         System.out.println("学习累了,要睡觉");
    28     }
    29 }

    06.21 手机类的定义

    手机事物:

          属性:品牌,价格,颜色...

          行为:打电话,发短信,玩游戏...

    手机类:

          成员变量:品牌,价格,颜色

          成员方法:打电话,发短信,玩游戏

     1 class Phone 
     2 {
     3     //品牌
     4     String brand;
     5     //价格
     6     int price;
     7     //颜色
     8     String color;
     9     
    10     //打电话的方法
    11     public void call(String name) 
    12     {
    13         System.out.println("给"+name+"打电话");
    14     }
    15     
    16     //发短信的方法
    17     public void sendMessage() 
    18     {
    19         System.out.println("群发短信");
    20     }
    21     
    22     //玩游戏的方法
    23     public void playGame()
    24     {
    25         System.out.println("玩游戏");
    26     }
    27 }

    06.22 学生类的使用

    创建对象:类名对象名 = new 类名();

    使用成员变量:对象名.成员变量

    使用成员方法:对象名.成员方法

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Student s = new Student();
     6         System.out.println(s.name+".."+s.age+".."+s.address);
     7         //给成员变量赋值
     8         s.name = "小明";
     9         s.age = 25;
    10         s.address = "上海";
    11 
    12         System.out.println(s.name+".."+s.age+".."+s.address);
    13         //调用方法
    14         s.study();
    15     }
    16 }
    17 
    18 class Student 
    19 {
    20     //定义变量
    21     //姓名
    22     String name;
    23     //年龄
    24     int age;
    25     //地址
    26     String address;
    27     
    28     //定义方法
    29     //学习的方法
    30     public void study() 
    31     {
    32         System.out.println("学生爱学习");
    33     }
    34     
    35     //吃饭的方法
    36     public void eat() 
    37     {
    38         System.out.println("学习饿了,要吃饭");
    39     }
    40     
    41     //睡觉的方法
    42     public void sleep() 
    43     {
    44         System.out.println("学习累了,要睡觉");
    45     }
    46 }

    运行结果:

    null..0..null
    小明..25..上海
    学生爱学习

    06.23 手机类的使用

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Phone p = new Phone();
     6         System.out.println(p.brand+"..."+p.price+"..."+p.color);
     7         //给成员变量赋值
     8         p.brand = "诺基亚";
     9         p.price = 450;
    10         p.color = "黑色";
    11         System.out.println(p.brand+"..."+p.price+"..."+p.color);
    12 
    13         //调用成员方法
    14         p.call("小明");
    15     }
    16 }
    17 
    18 class Phone 
    19 {
    20     //品牌
    21     String brand;
    22     //价格
    23     int price;
    24     //颜色
    25     String color;
    26     
    27     //打电话的方法
    28     public void call(String name) 
    29     {
    30         System.out.println("给"+name+"打电话");
    31     }
    32     
    33     //发短信的方法
    34     public void sendMessage() 
    35     {
    36         System.out.println("群发短信");
    37     }
    38     
    39     //玩游戏的方法
    40     public void playGame()
    41     {
    42         System.out.println("玩游戏");
    43     }
    44 }

     运行结果:

    null...0...null
    诺基亚...450...黑色
    给小明打电话

    06.24 一个对象的内存图

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Phone p = new Phone();
     6         System.out.println(p.brand+"..."+p.price+"..."+p.color);
     7 
     8         p.brand = "诺基亚";
     9         p.price = 450;
    10         p.color = "黑色";
    11         System.out.println(p.brand+"..."+p.price+"..."+p.color);
    12 
    13         p.call("小明");
    14     }
    15 }
    16 
    17 class Phone 
    18 {
    19     String brand;
    20     int price;
    21     String color;
    22     
    23     public void call(String name) 
    24     {
    25         System.out.println("给"+name+"打电话");
    26     }
    27 }

     

    06.25 二个对象的内存图

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Phone p1 = new Phone();
     6         p1.brand = "诺基亚";
     7         p1.price = 450;
     8         p1.color = "黑色";
     9         System.out.println(p1.brand+"..."+p1.price+"..."+p1.color);
    10         p1.call("小明");
    11 
    12         Phone p2 = new Phone();
    13         p2.brand = "小米";
    14         p2.price = 1699;
    15         p2.color = "白色";
    16         System.out.println(p2.brand+"..."+p2.price+"..."+p2.color);
    17 
    18         p2.call("旺财");
    19     }
    20 }
    21 
    22 class Phone 
    23 {
    24     String brand;
    25     int price;
    26     String color;
    27     
    28     public void call(String name) 
    29     {
    30         System.out.println("给"+name+"打电话");
    31     }
    32 }

    06.26 三个对象的内存图

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Phone p1 = new Phone();
     6         p1.brand = "诺基亚";
     7         p1.price = 450;
     8         p1.color = "黑色";
     9         System.out.println(p1.brand+"..."+p1.price+"..."+p1.color);
    10 
    11         Phone p2 = new Phone();
    12         p2.brand = "小米";
    13         p2.price = 1699;
    14         p2.color = "白色";
    15         System.out.println(p2.brand+"..."+p2.price+"..."+p2.color);
    16 
    17         Phone p3 = p1;
    18         System.out.println(p3.brand+"..."+p3.price+"..."+p3.color);
    19         p3.brand = "魅族";
    20         p3.price = 2999;
    21         p3.color = "金色";
    22         System.out.println(p1.brand+"..."+p1.price+"..."+p1.color);
    23     }
    24 }
    25 
    26 class Phone 
    27 {
    28     String brand;
    29     int price;
    30     String color;
    31     
    32     public void call(String name) 
    33     {
    34         System.out.println("给"+name+"打电话");
    35     }
    36 }

  • 相关阅读:
    BZOJ 3282: Tree( LCT )
    BZOJ 3713: [PA2014]Iloczyn( 枚举 )
    HDU3974
    CodeForces220B
    POJ2349
    HDU3038
    POJ1611
    IELTS
    POJ1125
    POJ2109
  • 原文地址:https://www.cnblogs.com/zhy7201/p/4489830.html
Copyright © 2020-2023  润新知