Fork me on GitHub

JavaSE Day07


多维数组

二维数组

  1. int[][] arr;
  2. 二维数组在内存中的存储方式
    • 首先栈内存中创建变量名
    • 堆内存中,创建一个数组,这个数组的每个值都是一个一维数组的堆内存地址,并且不连续,但是最后的一维数组的一段连续的堆内存空间;
package day7;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        // 声明
        int[][] arr;
        // 初始化,创建数组
        arr = new int[3][2];
        //赋值
        arr[0][0] = 12;
        arr[0][1] = 2;
        arr[1][0] = 5;
        arr[1][1] = 8;
        arr[2][0] = 14;
        arr[2][1] = 12;
        // 控制台输入
        Scanner input = new Scanner(System.in);
        System.out.println("--输入数据:");
        for (int i = 0; i < arr.length; i++) {// 外循环行
            for (int j = 0; j <arr[i].length ; j++) {// 内循环列
                arr[i][j] = input.nextInt();

            }

        }
        //输出
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

package day7;

public class Demo2 {
    public static void main(String[] args) {
        // 静态初始化
        int[][] arr = {{12, 2}, {5, 8}, {14, 12}};
        int[][] arr1 = new int[][]{{12, 2}, {5, 8}, {14, 12}};

        // 遍历arr 增强for
        for (int[] a : arr) {
            for (int b : a) {
                System.out.println(b);
            }
        }


    }
}

不规则数组:

低维的数目不同;就相当于二维数组中第二个[]的数量不确定;

多维数组

最多255维,几个中括号就是几维;
int[][][] arr = new int[2][3][4];

类的构建与对象的使用

  1. 对象: 一切可以被描述的事物(实体)
  2. 属性: 特征。
  3. 方法: 动作,行为。
  4. 类: 相似对象的集合;

类和对象的关系:

  1. 类是抽象的,对象是具体的
    类是对象的抽象;
  2. 类是一个模板
    通过此模板创建出来的对象具有共同的特征和属性;
  3. 类是一种数据类型。
    引用数据类型。
    对象是堆中的一个实例

类的语法:

public
访问修饰符 class 类名{
	// 类体
	成员:// 属性、方法,构造器,构造块,内部类,
}

类名:规范:帕斯卡

多个单词,每个单词首字母都大写;

注意:对象在内存中,是独立的空间。

内存垃圾回收

堆内存的地址,在栈内存中的变量中的没有引用了;因此这块堆内存就是垃圾;

	Person s1 = new Person();
	S1 = null;

NullPointException 空指针异常,表示没有初始化对象

方法:

定义:

访问修饰符 返回值类型 方法名(参数,参数){
				方法体
			}
  1. 访问修饰符:public 公共的
  2. 返回值类型:
    1. void/无返回值类型
    2. 基本或者引用数据类型
  3. 方法名是标识符规范
package day7;

// 每个类只描述一件事或一个功能;使用测试类来调用;
public class Person {
    // 属性,成员变量(类域)
    String name;
    int age;
    // 方法
    // 跑 定义
    public void run() {
        System.out.println("跑步");
    }

    //买电脑
    public String getComputer(){
        System.out.println("买电脑");
        return  "电脑";
    }

    public String[] method(){
        return new String[]{"电脑","U盘"};
    }
    // 说话
    public void say(){
//        Person guojing = new Person();
        // this 表示当前类对象,本类对象Person类的对象;
        System.out.println("我的名字"+this.name+",年龄是"+this.age);
    }
    public String say1(){
        return "今天天气很好";
    }
}

定义方法的注意:

  1. 带返回值的方法,返回的值得类型与声明的类型要一致;且只能返回一个值;
  2. 方法不能嵌套定义;
  3. 不允许把程序逻辑代码直接写在类中;要封装到方法中。

方法调用:

  1. 不同类,new创建对象调用方法:
  2. 同一个类中,自定义方法之间,使用this调用;可以省略this;
  3. 同一个类中,主方法调用自定义方法,需要new创建对象调用;(因为主方法是static。)

带参数的方法:

传参的时候,类型、个数,位置要一致;

package day7;

import java.util.Scanner;

public class Juicer {
    // 功能
    public void juicing() {
        System.out.println("苹果汁");
    }

    public String juicing1() {
        return "苹果汁";
    }

    // 形式参数   传参:把实参传递给形参,给局部变量food赋值;
    public String juicing2(String food1, String food2, int n) {
//        Scanner input = new Scanner(System.in);
//        System.out.println("放入一个水果");
//        String food = input.next();
        return food1 + food2 + "汁" + n;
    }

}
package day7;

import java.util.Scanner;

public class TestJuicer {
    public static void main(String[] args) {
        Juicer j001 = new Juicer();
//        j001.juicing();
//        String str = j001.juicing1();
//        System.out.println("用" + str + "做点心");

//        Scanner input = new Scanner(System.in);
//        System.out.println("放入一个水果");
//        String food = input.next();
//        String s = j001.juicing2(food);

        // 调用 实际参数
        String s = j001.juicing2("苹果","西瓜",22);
        System.out.println(s);
    }

}

方法的好处:

  1. 解决了代码冗余的问题;代码重用。
  2. 可维护性;
  3. 功能封装;(直到方法名,就可以用,但是不需要直到方法的具体代码,类似println)

this关键字

表示当前类对象,本类对象
作用:可以调用当前类的属性

成员变量和局部变量的区别

  1. 成员变量:在类中定义的变量;
  2. 局部变量:在方法中或代码块中定义的变量;
  3. 作用域:
    1. 成员变量在整个类中都有效;
    2. 局部变量只在定义它的代码块中有效;
  4. 初始值
    1. 成员变量 系统自动初始化;
    2. 局部变量 系统不会初始化,需要自己初始化赋值;
  5. 优先级
    1. 成员变量 和局部变量同名,在局部变量作用域内,优先使用局部变量;
package day7;

public class Score {
    int javaSe;
    int c;
    int db;

    public int sum(){
        return this.javaSe+this.c+this.db;
    }

    public int average(){
        return this.sum()/3;
    }
}

package day7;

import java.util.Scanner;

public class TestScore {
    public void f(){}
    public void f1(){
        this.f();
        f();
    }
    public static void main(String[] args) {

        TestScore t = new TestScore();
        t.f();
        // 匿名对象(只能使用一次)
        new TestScore().f();
        new TestScore().f(); // 第二个对象


        Score s1 = new Score();
        Scanner input = new Scanner(System.in);
        System.out.println("-输入java成绩:");
        s1.javaSe = input.nextInt();
        System.out.println("-输入c成绩:");
        s1.c = input.nextInt();
        System.out.println("输入DB成绩:");
        s1.db = input.nextInt();
        System.out.println("总成绩是"+s1.sum());
        System.out.println("平均成绩是"+s1.average());
    }
}

posted @ 2018-10-03 00:49  耳_东  阅读(154)  评论(0)    收藏  举报