你的位置:首页 > Java教程

[Java教程]黑马程序员_JavaSE学习总结第06天_Java语言基础2 面向对象1


------- android培训、java培训、期待与您交流! ---------- 

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@949f6910 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@949f6916     System.out.println(arr[0][0]); //017 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     //给二维数组的任何一行的第一列和最后一列赋值为113     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]+"\t");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:2010 11     int[] arr = {1,2,3,4,5};12     change(arr);13     System.out.println(arr[1]); //414   }15   public static void change(int a,int b) 16   {17     System.out.println("a:"+a+",b:"+b); //a:10,b:2018     a = b;19     b = a + b;20     System.out.println("a:"+a+",b:"+b); //a:20,b:4021   }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 }