zoukankan      html  css  js  c++  java
  • JAVA自学笔记06

    JAVA自学笔记06

    1、二维数组
    1)格式:
    ①数据类型[][]数组名 = new 数据类型[m][n];
    或 数据类型[]数组名[]=new 数据类型[m][n];
    m表示这个二维数组有多少个一维数组
    n表示每个一维数组的元素个数
    存储图解:
    这里写图片描述

    eg:int[][]arr = new int[3][3];
    意义:定义了一个二维数组名为arr,这个二维数组有3个一维数组,名称是arr[0]、arr[1]、arr[2],每个数组有3个元素,可通过arr[m][n]来访问相应m+1、n+1元素
    区分:
    int[] x,y[];//x是一维数组,y是二维数组。

    @例题1:定义一个二维数组

    int[]x[]=new int[3][2];
    System.out.println(x);//输出二维数组的名称
    
    System.out.println(x[k]);//输出二维数组的第k+1个一维数组的名称

    ②数据类型[][]变量名=new 数据类型[m][];
    意义:m表示这个二维数组有多少个一维数组,但没有直接给出一维数组的元素个数,可以不一样。
    eg:int[][]arr=new int[2][];
    arr[0]=new int[3];
    arr[1]=new int[7];
    存储图解:
    这里写图片描述
    @例题3 写出下列程序的结果
    int[][]arr=new int[2][];
    arr[0]=new int[3];
    arr[1]=new int[2];

    System.out.println(arr);//输出地址
    System.out.println(arr[0]);//null,下同
    System.out.println(arr[1]);

    arr[0]=new int[3];
    //开辟空间
    arr[1]=new int[2];
    System.out.println(arr[0]);//地址值,下同
    System.out.println(arr[1]);

    ③前两种格式都是动态初始化,这是静态初始化
    数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},…};
    简化格式:数据类型[][]变量名={{元素…},{元素…},…}

    eg:int[][] arr={{1,2,3},{34,34}};
    存储图解
    这里写图片描述

    2)二维数组的遍历
    int [][]arr={{1,2,3},{34,34}};
    for(int x=0;x

    class Sum{
    public static void main(String args[]){
    int[][] arr={{22,66,44},{23,43,11},{43,22,34},{44,33,22}};
    int sum=0;
    for(int x=0;x<arr.length;x++){
    for(int y=0;y<arr[x].length;y++){sum+=arr[x][y];
    }
    }
    System.out.println(sum);
    }
    }

    @例题4:键盘录入行数,屏幕输出杨辉三角形

    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列
            }
    
            //按照规律给其他元素赋值
            //从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
            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、参数传递
    例题5:看程序写结果

    class ArgsDemo {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            System.out.println("a:"+a+",b:"+b); 
            change(a,b);//a=10,b=20
            System.out.println("a:"+a+",b:"+b); 
    
            int[] arr = {1,2,3,4,5}; 
            change(arr);
            System.out.println(arr[1]); 
        }
    
        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};
        }
    }

    基本类型:形式参数的改变对实际参数没有影响
    引用类型:形式参数的改变直接影响实际参数
    图解:
    (方法在栈内执行)
    这里写图片描述

    @例题5:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
    在传递过程中需要加密,加密规则如下:
    首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
    最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
    然后,把加密后的结果在控制台打印出来。

    class Test{
        public static void main(String[] args) {
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
    
    
            System.out.println("请输入一个密码(不大于八位):");
            int n = sc.nextInt();
            int[] arr=new int[8];
            int index=0;
    
            for(;n>0;n=n/10) {
                arr[index]=n%10;
                arr[index]+=5;
                arr[index]%=10;
                index++;
            }
            int temp=arr[index];
            arr[index]=arr[0];
            arr[0]=temp;
    
            for(int i=0;i<index;i++) {
                System.out.print(arr[i]);
            }
        }
    }

    3、面向对象
    1)面向对象就是不断创建对象,指挥对象做事情
    2)面向对象设计:管理和维护对象之间的关系
    3)面向对象的特征:封装、继承、多态
    4)类与对象的关系:属性、行为 ,JAVA中最基本的单位是类
    事物:属性、行为
    类:成员变量、成员方法(初学者把static 先去掉) ,与之前的变量、方法格式并无区别
    类是一组相关的属性和行为的集合,是一个抽象的概念
    对象是该类事物的具体表现形式,具体存在的个体

    4、对象
    1)创建对象:类名 对象名=new 类名();
    2)使用成员变量:对象名.变量名
    使用成员方法:对象名.方法名(参数列表);
    3)赋值:对象名.变量名=
    4)内存图解(一个对象):
    这里写图片描述
    5)两个对象
    这里写图片描述
    6)成员变量和局部变量的区别
    ①类中的位置不同:类中方法外/方法内或方法声明上
    ②内存中的位置不同:堆内存/栈内存
    ③生命周期不同:随着对象的存在而存在,随着对象的消失而消失
    /随着方法的调用而存在,随着方法调用完毕而消失
    ④初始化值不同:成员变量:有默认的初始化值
    局部变量:没有默认的初始化值,必须先定义,赋值,才能使用

    局部变量名称可以与成员变量名称相同,在方法中使用采用的是就近原则、

    @例题6:学生类的定义与使用

    class Student{
    //定义变量
    String name;
    int age;
    String address;
    //定义方法
    public void study(){...;}
    public void eat(){...;}
    public void play(){...;}
    }
    
    /*使用(在一个java文件中写两个类,一个基本的类,一个测试类。文件名应与测试类名称一致)*/
    class Test{
    public static void main(String args[]){
    Student s = new Student();
    //创建对象,s.name=null,s.age=0,s,address=null
    s.name="jack";
    s.age=23;
    s.eat();
    s.sleep();
    } 
    }

    5、形式参数
    1)基本类型、引用类型
    2) 类是引用类型
    3)方法的形参是类名的时候如何调用?
    如果一个方法的形式参数是一个类类型(引用类型),这里需要的是该类的对象

    6、匿名对象
    1)没有名字的对象:
    eg:new 类名();
    2)应用场景:
    ①调用方法,仅仅只调用一次的时候
    优点:匿名对象调用完毕后即被回收
    eg: new 类名().方法名();
    ②可作为实参传递
    方法名(new 类名());
    new StudentDemo().method((new Student());
    上述例子中:构造了两个匿名对象,可用于调用方法。

    7、封装
    1)概述:指将隐藏对象的属性和实现细节,仅对外提供公共访问方式
    2)优点:①隐藏实现细节,提供公共访问方式
    ②提高代码复用性
    ③提高安全性
    3)原则:将不需要对外提供的内容都隐藏起来且把属性隐藏,提供公共方式对其访问
    4)关键字:private
    被private修饰的成员变量及方法仅能在本类中访问

    8、private 关键字
    1)权限修饰符,可修饰成员变量和成员方法
    2)应用:修饰成员变量,提供对应的getxxx()/setxxx()方法

    @例题:封装与private 的应用 :学生类的重新定义

    class Student{
    private String name;
    private int age;
    
    public int getName(){
    return name;
    }
    public int getAge(){
    return age;
    }
    public void setName(String s){
    name=s;
    }
    public void setAge(int i){
    age=i;
    }
    }

    9、this关键字
    1) 所在类的对象引用
    格式:this.本类变量名
    局部变量隐藏成员变量
    例如:

    public void setAge(int age){
    //age=age;
    //错误,由于就近原则赋值失败,系统不能区分左边的是成员变量,右边是局部变量
    this.age=age;//正确
    }

    2)图解
    这里写图片描述

  • 相关阅读:
    Xcode编译报错信息总结
    iOS组件化方案
    xcodebuild命令
    Mac下配置MAMP Pro+PHPStorm
    Sublime Text PHP Mac系统环境配置
    JS生成二维码
    为IE和chrome编写单独的样式
    几个简单的VBS脚本程序以及其JS实现
    vue组件中使用iframe元素
    nginx简易部署
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10485312.html
Copyright © 2011-2022 走看看