zoukankan      html  css  js  c++  java
  • 06_二维数组【四种格式、打印杨辉三角、Java中参数传递、数据加密案例】、面向对象【对象内存图】

    1:二维数组(理解)
    2:两个思考题(理解)
    3:面向对象(掌握)

    1:二维数组(理解)
    (1)元素是一维数组的数组。


    (2)格式:(四种格式)
    A:数据类型[][] 数组名 = new 数据类型[m][n];
    B:数据类型[][] 数组名 = new 数据类型[m][];
    C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
    D:数据类型[][] 数组名 = {{...},{...},{...}};


    (3)案例(掌握):
    A:二维数组的遍历
    B:二维数组的求和
    C:杨辉三角形

    Array2Demo.java

    /*
        二维数组:就是元素为一维数组的一个数组。
        
        格式1:
            数据类型[][] 数组名 = new 数据类型[m][n];
            
            m:表示这个二维数组有多少个一维数组。
            n:表示每一个一维数组的元素有多少个。
            
        注意:
            A:以下格式也可以表示二维数组
                a:数据类型 数组名[][] = new 数据类型[m][n];
                b:数据类型[] 数组名[] = new 数据类型[m][n];
            B:注意下面定义的区别
                int x;
                int y;
                int x,y;
                
                int[] x;
                int[] y[];
                
                int[] x,y[];
    */
    class Array2Demo {
        public static void main(String[] args) {
             //定义一个二维数组
             int[][] arr = new int[3][2];
             //定义了一个二维数组arr
             //这个二维数组有3个一维数组的元素
             //每一个一维数组有2个元素
             //输出二维数组名称
             System.out.println(arr); //地址值    [[I@175078b
             //输出二维数组的第一个元素一维数组的名称
             System.out.println(arr[0]); //地址值    [I@42552c
             System.out.println(arr[1]); //地址值    [I@e5bbd6
             System.out.println(arr[2]); //地址值    [I@8ee016
             //输出二维数组的元素
             System.out.println(arr[0][0]); //0
             System.out.println(arr[0][1]); //0
        }
    }

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

    Array2Demo2.java

    /*
        格式2:
            数据类型[][] 数组名 = new 数据类型[m][];
            
            m:表示这个二维数组有多少个一维数组。
            列数没有给出,可以动态的给。这一次是一个变化的列数。
    */
    class Array2Demo2 {
        public static void main(String[] args) {
            //定义数组
            int[][] arr = new int[3][];
            
            System.out.println(arr);    //[[I@175078b
            System.out.println(arr[0]); //null
            System.out.println(arr[1]); //null
            System.out.println(arr[2]); //null
            
            //动态的为每一个一维数组分配空间
            arr[0] = new int[2];
            arr[1] = new int[3];
            arr[2] = new int[1];
            
            System.out.println(arr[0]); //[I@42552c
            System.out.println(arr[1]); //[I@e5bbd6
            System.out.println(arr[2]); //[I@8ee016
            
            System.out.println(arr[0][0]); //0
            System.out.println(arr[0][1]); //0
            //ArrayIndexOutOfBoundsException
            //System.out.println(arr[0][2]); //错误
            
            arr[1][0] = 100;
            arr[1][2] = 200;
        }
    }

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

    Array2Demo3.java

    /*
        格式3:
            基本格式:
                数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
            简化版格式:
                数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
                
            举例:
                int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
                int[][] arr = {{1,2,3},{4,5},{6}};
    */
    class Array2Demo3 {
        public static void main(String[] args) {
            //定义数组
            int[][] arr = {{1,2,3},{4,5},{6}};
            
            System.out.println(arr);
            System.out.println(arr[0]);
            System.out.println(arr[1]);
            System.out.println(arr[2]);
            
            System.out.println(arr[0][0]); //1
            System.out.println(arr[1][0]); //4
            System.out.println(arr[2][0]); //6
            
            System.out.println(arr[0][1]); //2
            System.out.println(arr[1][1]); //5
            //越界
            System.out.println(arr[2][1]); //错误
        }
    }

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

    Array2Test.java【二维数组遍历】

    /*
        需求:二维数组遍历
        
        外循环控制的是二维数组的长度,其实就是一维数组的个数。
        内循环控制的是一维数组的长度。
    */
    class Array2Test {
        public static void main(String[] args) {
            //定义一个二维数组
            int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
            
            //请问谁代表{1,2,3}
            //arr[0]就是第一个数组
            //arr[0] = {1,2,3};
            for(int x=0; x<arr[0].length; x++) {
                System.out.println(arr[0][x]);
            }
            System.out.println("--------------");
            
            for(int x=0; x<arr[1].length; x++) {
                System.out.println(arr[1][x]);
            }
            System.out.println("--------------");
            
            for(int x=0; x<arr[2].length; x++) {
                System.out.println(arr[2][x]);
            }
            System.out.println("--------------");
            
            //用循环改进
            for(int x=0; x<3; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    System.out.print(arr[x][y]+" ");
                }
                System.out.println();
            }
            System.out.println("--------------");
            
            //这个时候,注意了,3是我们根据上面的代码得出来的
            //但是,它不能针对任何的数组都可以这样
            //所以,我们应该想办法改进
            //其实,外面的这个循环的长度就是二维数组的长度
            
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    System.out.print(arr[x][y]+" ");
                }
                System.out.println();
            }
            System.out.println("--------------");
            
            //用方法改进
            //调用方法
            printArray2(arr);
            System.out.println("--------------");
            
            //我们再来一个列数是变化的
            int[][] arr2 = {{1,2,3},{4,5},{6}};
            printArray2(arr2);
        }
        
        /*
            需求:遍历二维数组
            两个明确:
                返回值类型:void
                参数列表:int[][] arr
        */
        public static void printArray2(int[][] arr) {
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    System.out.print(arr[x][y]+" ");
                }
                System.out.println();
            }
        }
    }

    Array2Test2.java【二维数组的求和

    /*
        公司年销售额求和
        某公司按照季度和月份统计的数据如下:单位(万元)
        第一季度:22,66,44
        第二季度:77,33,88
        第三季度:25,45,65
        第四季度:11,66,99
        
        分析:
            A:把题目的数据用二维数组来表示
                int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
            B:如何求和呢?
                求和其实就是获取到每一个元素,然后累加即可。
            C:定义一个求和变量sum,初始化值是0。
            D:通过遍历就可以得到每一个二维数组的元素。
            E:把元素累加即可。
            F:最后输出sum,就是结果。
    */
    class Array2Test2 {
        public static void main(String[] args) {
            //把题目的数据用二维数组来表示
            int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
            
            //定义一个求和变量sum,初始化值是0。
            int sum = 0;
            
            //通过遍历就可以得到每一个二维数组的元素。
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    //把元素累加即可。
                    sum += arr[x][y];
                }
            }
            
            //最后输出sum,就是结果。
            System.out.println("一年的销售额为:"+sum+"万元");
        }
    }

     Array2Test3.java【打印杨辉三角

    /*
    
        需求:打印杨辉三角形(行数可以键盘录入)
        
        1
        1 1    
        1 2 1
        1 3 3  1
        1 4 6  4  1 
        1 5 10 10 5 1
    
        分析:看这种图像的规律
            A:任何一行的第一列和最后一列都是1
            B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
        
        步骤:
            A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。
              这个n的数据来自于键盘录入。
            B:给这个二维数组任何一行的第一列和最后一列赋值为1
            C:按照规律给其他元素赋值
                从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
            D:遍历这个二维数组。
    */
    import java.util.Scanner;
    
    class Array2Test3 {
        public static void main(String[] args) {
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            //这个n的数据来自于键盘录入。
            System.out.println("请输入一个数据:");
            int n = sc.nextInt();
            
            //定义二维数组
            int[][] arr = new int[n][n];
            
            //给这个二维数组任何一行的第一列和最后一列赋值为1
            for(int x=0; x<arr.length; x++) {
                arr[x][0] = 1; //任何一行第1列
                arr[x][x] = 1; //任何一行的最后1列, 对角线的元素为1
            }
            
            //按照规律给其他元素赋值
            //从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
            for(int x=2; x<arr.length; x++) {              
      
    //这里如果y<=x是有个小问题的,就是最后一列的问题 //所以这里要减去1 //并且y也应该从1开始,因为第一列也是有值了 for(int y=1; y<=x-1; y++) { //每一个数据是它上一行的前一列和它上一行的本列之和。 arr[x][y] = arr[x-1][y-1] + arr[x-1][y]; } } //遍历这个二维数组。 /* for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { System.out.print(arr[x][y]+" "); } System.out.println(); } */

    //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似 for(int x=0; x<arr.length; x++) { for(int y=0; y<=x; y++) { System.out.print(arr[x][y]+" "); } System.out.println(); } } }

    2:两个思考题(理解)
    (1)Java中的参数传递问题
    Java中只有值传递。

    基本类型:形式参数的改变不影响实际参数
    引用类型:形式参数的改变直接影响实际参数
    (2)数据加密问题
    综合的小案例。

    ArgsDemo.java

    /*
        思考题1:看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。
        
        Java中的参数传递问题:
            基本类型:形式参数的改变对实际参数没有影响。
            引用类型:形式参数的改变直接影响实际参数。
    */
    class ArgsDemo {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            System.out.println("a:"+a+",b:"+b); //a:10,b:20
            change(a,b);
            System.out.println("a:"+a+",b:"+b); //???    a:10,b:20
    
            int[] arr = {1,2,3,4,5}; 
            change(arr);
            System.out.println(arr[1]); //???    4
        }
    
        public static void change(int a,int b) { //a=10,b=20
            System.out.println("a:"+a+",b:"+b); //a:10,b:20
            a = b;    //a=20
            b = a + b; //b=40
            System.out.println("a:"+a+",b:"+b); //a:20,b:40
        }
    
        public static void change(int[] arr) { //arr={1,2,3,4,5};
            for(int x=0; x<arr.length; x++) {
                if(arr[x]%2==0) {
                    arr[x]*=2;
                }
            }
            //arr={1,4,3,8,5};
        }
    }

    java中的参数传递问题图解:

     JiaMiDemo.java

    /*
        某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
        在传递过程中需要加密,加密规则如下:
            首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
            最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
            然后,把加密后的结果在控制台打印出来。 
            
        题目要求:
            A:数据是小于8位的整数
                定义一个int类型的数据
                int number = 123456;
            B:加密规则
                a:首先将数据倒序
                    结果 654321
                b:然后将每位数字都加上5,再用和除以10的余数代替该数字
                    结果 109876
                c:最后将第一位和最后一位数字交换
                    结果 609871
            C:把加密后的结果输出在控制台
            
            通过简单的分析,我们知道如果我们有办法把这个数据变成数组就好了。
            不是直接写成这个样子的:
                int[] arr = {1,2,3,4,5,6};
                
            如何把数据转成数组呢?
                A:定义一个数据
                    int number = 123456;
                B:定义一个数组,这个时候问题就来了,数组的长度是多少呢?
                    int[] arr = new int[8]; //不可能超过8
                    在赋值的时候,我用一个变量记录索引的变化。
                    定义一个索引值是0
                    int index = 0;
                C:获取每一个数据
                    int ge = number%10
                    int shi = number/10%10
                    int bai = number/10/10%10
                    
                    arr[index] = ge;
                    index++;
                    arr[index] = shi;
                    index++;
                    arr[index] = bai;
                    ...
    */
    class JiaMiDemo {
        public static void main(String[] args) {
            //定义一个数据
            int number = 123456;
            
            //定义一个数组
            int[] arr = new int[8];
            
            //把数据中每一位上的数据获取到后存储到数组中
            /*
            int index = 0;
            arr[index] = number%10; //arr[0]=6;
            index++;
            arr[index] = number/10%10; //arr[1]=5;
            index++;
            arr[index] = mumber/10/10%10; //arr[2]=4;
            */
            
            //通过观察这个代码,我们发现应该是可以通过循环改进的
            int index = 0;
            
            while(number > 0) {         //number=123456,number=12345,number=1234,number=123,number=12,number=1,number=0
                arr[index] = number%10;    //arr[0]=6,arr[1]=5,arr[2]=4,arr[3]=3,arr[4]=2,arr[5]=1
                index++;            //index=1,index=2,index=3,index=4,index=5,index=6
                number/=10;          //number=12345,number=1234,number=123,number=12,number=1,number=0
            }
            
            //然后将每位数字都加上5,再用和除以10的余数代替该数字
            for(int x=0; x<index; x++) {
                arr[x] += 5;
                arr[x] %= 10;
            }
            
            //最后将第一位和最后一位数字交换
            int temp = arr[0];
            arr[0] = arr[index-1];
            arr[index-1] = temp;
            
            //输出数据
            for(int x=0; x<index; x++) {
                System.out.print(arr[x]);
            }
            System.out.println();
        }
    }

    JiaMiDemo2.java

    /*
        把刚才的代码改进一下:
            A:把数据改进为键盘录入
            B:把代码改进为方法实现
            
            
            另一个数据的测试:
            number:1234567
            第一步:7654321
            第二步:2109876
            第三步:6109872
            
        知识点:
            变量
            数据类型
            运算符
            键盘录入
            语句
            方法
            数组
    */
    import java.util.Scanner;
    
    class JiaMiDemo2 {
        public static void main(String[] args) {
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            //请输入一个数据
            System.out.println("请输入一个数据(小于8位):");
            int number = sc.nextInt();
            
            //写功能实现把number进行加密
            //调用
            String result = jiaMi(number);

          System.out.println(
    "加密后的结果是:"+result); } /* 需求:写一个功能,把数据number实现加密。 两个明确: 返回值类型:String 做一个字符串的拼接。 参数列表:int number */ public static String jiaMi(int number) { //定义数组 int[] arr = new int[8]; //定义索引 int index = 0; //把number中的数据想办法放到数组中 while(number > 0) { arr[index] = number%10; index++; number /= 10; } //把每个数据加5,然后对10取得余数 for(int x=0; x<index; x++) { arr[x] += 5; arr[x] %= 10; } //把第一位和最后一位交换 int temp = arr[0]; arr[0] = arr[index-1]; arr[index-1] = temp;
         //将数组的元素整型-->拼接成一个字符串
    //把数组的元素拼接成一个字符串返回 //定义一个空内容字符串 String s = ""; for(int x=0; x<index; x++) { s += arr[x]; } return s; } }

    3:面向对象(掌握)
    (1)面向对象
    面向对象是基于面向过程的编程思想


    (2)面向对象的思想特点
    A:是一种更符合我们思考习惯的思想
    B:把复杂的事情简单化
    C:让我们从执行者变成了指挥者

    举例:
    买电脑
    洗衣服
    做饭
    ...
    万事万物皆对象


    (3)把大象装进冰箱(理解)
    A:面向过程实现
    B:面向对象实现

    注意:如何让我们的操作更符合面向对象思想呢?
    A:有哪些类
    B:每个类有哪些成员
    C:类与类的关系


    (4)类与对象
    A:现实世界的事物
    属性 事物的基本描述
    行为 事物的功能
    B:Java语言中最基本的单位是类。所以,我们要用类来体现事物
    C:类
    成员变量 事物属性
    成员方法 事物行为
    D:类:是一组相关的属性和行为的集合。是一个抽象的概念。
    对象:是该类事物的具体存在,是一个具体的实例。(对象)

    举例:
    学生:类
    班长:对象


    (5)类的定义及使用
    A:类的定义
    成员变量 定义格式和以前一样,就是位置不同,在类中,方法外。
    成员方法 定义格式和以前一样,就是去掉了static。
    B:使用类的内容
    a:创建对象? 格式
    类名 对象名 = new 类名();
    b:如何使用成员变量和成员方法呢
    对象名.成员变量
    对象名.成员方法()


    (6)案例:
    A:学生类的定义和使用
    B:手机类的定义和使用


    (7)内存图
    A:一个对象的内存图
    B:二个对象的内存图
    C:三个对象的内存图


    (8)Java程序的开发,设计和特征
    A:开发:就是不断的创建对象,通过对象调用功能
    B:设计:就是管理和维护对象间的关系
    C:特征
    a:封装
    b:继承
    c:多态

    面向对象的思想概述

    1:面向对象思想
        面向对象是基于面向过程的编程思想。
        
        面向过程:强调的是每一个功能的步骤
        面向对象:强调的是对象,然后由对象去调用功能
        
    2:面向对象的思想特点
        A:是一种更符合我们思想习惯的思想
        B:可以将复杂的事情简单化
        C:将我们从执行者变成了指挥者
            
        举例:
            买电脑:
                面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑
                面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了
            洗衣服:
                面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来
                面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来
            吃饭:
                面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃
                面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃
                
                家常事物,买洗衣机和去饭店太不划算了,所以,找个对象。
                但是,你不跟我好好学习,你将来4000,你对象8000。
                
    3:把大象装进冰箱
        面向过程:
            动作有哪些呢?
                A:打开冰箱门
                B:装进大象
                C:关闭冰箱门
                
            代码体现;
                class Demo {
                    public static void main(String[] args) {
                        /*
                        System.out.println("打开冰箱门");
                        //打开冰箱门的东西,我现在仅仅是为了演示,就写了一个输出语句
                        //其实,它可能需要做很多操作。
                        //这个时候代码就比较多一些了
                        //假设我要多次打开冰箱门,
                        //代码一多,每次都写一遍,麻烦不
                        //我们就应该用方法改进
                        
                        System.out.println("装进大象");
                        System.out.println("关闭冰箱门");
                        */
                        
                        //写了方法以后,调用就改变了
                        open();
                        in();
                        close();
                    }
                    
                    public static void open() {
                        System.out.println("打开冰箱门");
                    }
                    
                    public static void in() {
                        System.out.println("装进大象");
                    }
                    
                    public static void close() {
                        System.out.println("关闭冰箱门");
                    }
                }
        
        面向对象:
            我们怎么才能更符合面向对象思想呢?
                A:有哪些类呢?
                B:每个类有哪些东西呢?
                C:类与类直接的关系是什么呢?
                
            把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)
                A:有哪些类呢?
                    大象
                    冰箱
                    Demo
                B:每个类有哪些东西呢?
                    大象:
                        进去
                    冰箱:
                        开门
                        关门
                    Demo:
                        main方法
                C:类与类直接的关系是什么呢?
                    Demo中使用大象和冰箱类的功能。
                    
            代码体现:
                class 大象 {
                    public static void in() {
                        System.out.println("装进大象");
                    }
                }
                
                class 冰箱 {
                    public static void open() {
                        System.out.println("打开冰箱门");
                    }
                    
                    public static void close() {
                        System.out.println("关闭冰箱门");
                    }
                }
                
                class Demo {
                    public static void main(String[] args) {
                        冰箱调用开门
                        大象调用进去
                        冰箱调用关门
                    }
                }
                
    4:开发,设计,特征
    面向对象开发
        就是不断的创建对象,使用对象,指挥对象做事情。
        
    面向对象设计
        其实就是在管理和维护对象之间的关系。
    
    面向对象特征
        封装(encapsulation)
        继承(inheritance)
        多态(polymorphism)

    类与对象的概述

    现实世界中是如何描述一个事物的呢?
        举例:学生
                姓名,年龄,性别...
                学习,吃饭,睡觉
                
        属性:该事物的描述信息
        行为:该事物能够做什么
        
    我们学习编程语言,是为了模拟现实世界的事物的。
    而我们学习的编程语言Java中最基本的单位是:类。
    所以,我们就应该把事物通过类来体现出来:
    由此,我们就得到了现实世界事物和类的对应关系:
    
    事物:                        类:    
        属性                        成员变量
        行为                        成员方法
        
        
    类:是一组相关的属性和行为的集合。是一个抽象的概念。
    对象:是该类事物的具体表现形式。具体存在的个体。
    
    举例:
        学生:类
        班长:对象

    Student.java

    /*
        事物:
            属性    事物的信息描述
            行为    事物的功能
        
        类:
            成员变量    事物的属性
            成员方法    事物的行为
            
        定义一个类,其实就是定义该类的成员变量和成员方法。
        
        案例:我们来完成一个学生类的定义。
        
        学生事物:
            属性:姓名,年龄,地址...
            行为:学习,吃饭,睡觉...
            
        把事物要转换为对应的类:
        
        学生类:
            成员变量:姓名,年龄,地址...
            成员方法:学习,吃饭,睡觉...
            
        成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外。
        成员方法:和以前的方法定义是一样的格式,但是今天把static先去掉。
        
        首先我们应该定义一个类,然后完成类的成员。
    */
    //这是我的学生类
    class Student {
        //定义变量
        //姓名
        String name;
        //年龄
        int age;
        //地址
        String address;
        
        //定义方法
        //学习的方法
        public void study() {
            System.out.println("学生爱学习");
        }
        
        //吃饭的方法
        public void eat() {
            System.out.println("学习饿了,要吃饭");
        }
        
        //睡觉的方法
        public void sleep() {
            System.out.println("学习累了,要睡觉");
        }
    }

    Student.java

    /*
        事物:
            属性    事物的信息描述
            行为    事物的功能
        
        类:
            成员变量    事物的属性
            成员方法    事物的行为
            
        定义一个类,其实就是定义该类的成员变量和成员方法。
        
        案例:我们来完成一个学生类的定义。
        
        学生事物:
            属性:姓名,年龄,地址...
            行为:学习,吃饭,睡觉...
            
        把事物要转换为对应的类:
        
        学生类:
            成员变量:姓名,年龄,地址...
            成员方法:学习,吃饭,睡觉...
            
        成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外。
        成员方法:和以前的方法定义是一样的格式,但是今天把static先去掉。
        
        首先我们应该定义一个类,然后完成类的成员。
    */
    //这是我的学生类
    class Student {
        //定义变量
        //姓名
        String name;
        //年龄
        int age;
        //地址
        String address;
        
        //定义方法
        //学习的方法
        public void study() {
            System.out.println("学生爱学习");
        }
        
        //吃饭的方法
        public void eat() {
            System.out.println("学习饿了,要吃饭");
        }
        
        //睡觉的方法
        public void sleep() {
            System.out.println("学习累了,要睡觉");
        }
    }

    Phone.java

    /*
        手机事物:
            属性:品牌,价格,颜色...
            行为:打电话,发短信,玩游戏...
            
        手机类:
            成员变量:品牌,价格,颜色
            成员方法:打电话,发短信,玩游戏
    */
    class Phone {
        //品牌
        String brand;
        //价格
        int price;
        //颜色
        String color;
        
        //打电话的方法
        public void call(String name) {
            System.out.println("给"+name+"打电话");
        }
        
        //发短信的方法
        public void sendMessage() {
            System.out.println("群发短信");
        }
        
        //玩游戏的方法
        public void playGame() {
            System.out.println("玩游戏");
        }
    }

    StudentDemo.java

    /*
        在一个java文件中写两个类:一个基本类,一个测试类
        注意:文件名称和测试类名称一致
        
        如何使用呢?
            创建对象使用。
        如何创建对象呢?
            格式: 类名 对象名 = new 类名();
        
        如何使用成员变量:
            对象名.成员变量
        如何使用成员方法:
            对象名.方法名();
    */
    
    //这是学生基本类
    class Student{
        String name;
        int age;
        String address;
        
        public void study(){
            System.out.println("学生爱学习");    
        }
        
        public void eat(){
            System.out.println("学生饿了,要吃饭");
        }
        
        public void sleep(){
            System.out.println("学生累了,要睡觉!");
        }
        
    }
    //学生测试类
    class StudentDemo {
        public static void main(String [] args){
            
            //类名 对象名 = new 类名 () ;
            Student s = new Student();
            
            //输出成员变量值
            /*
            System.out.println(s.name);
            System.out.println(s.age);
            System.out.println(s.address);
            */
            //改进写法
            System.out.println(s.name+"---"+s.age+"---"+s.address);
            
            //给成员变量赋值
            s.name = "林青霞";
            s.age = 27;
            s.address = "北京";
            
            //赋值后的输出
            System.out.println(s.name+"---"+s.age+"---"+s.address);
            
            //调用方法
            s.study();
            s.eat();
            s.sleep();
            
            
            
        }
        
        
    }

    PhoneDemo.java

    /*
        手机类测试:
    
    */
    
    class Phone{
        String brand;
        int price;
        String color;
        
        public void call(String name){
            System.out.println("给"+name+"打电话");
        }
        
        public void sendMessage(){
            System.out.println("群发短信!");
        }
        
        public void playGame(){
            System.out.println("玩游戏");
        }
        
    }
    
    class PhoneDemo {
        public static void main (String[] args){
            //创建手机对象
            //类名 对象名 = new 类名();
            Phone p = new Phone();
            
            //直接输出成员变量
            System.out.println(p.brand+"---"+p.price+"---"+p.color);
            
            //给成员变量赋值
            p.brand = "诺基亚";
            p.price = 100;
            p.color = "灰色";
            
            //再次输出
            System.out.println(p.brand+"---"+p.price+"---"+p.color);
            
            //调用方法
            p.call("林青霞");
            p.sendMessage();
            p.playGame();
            
        }    
    }

    一个对象的内存图

    两个对象的内存图:

    三个对象的内存图:

  • 相关阅读:
    java基础
    mysql入门
    基础整理
    遍历列表的两种方式
    oracle常用操作
    DIV+CSS网页布局技巧实例1:设置网页整体居中的代码
    html+css 淘宝首页静态页面案例
    WEB前端开发规范文档+CSS命名规范
    day05-苏宁易购导航html
    day04-html
  • 原文地址:https://www.cnblogs.com/super90/p/4711987.html
Copyright © 2011-2022 走看看