java入门

二维数组

静态初始化的格式:

完整格式:

数据类型[ ][ ] 数组名=new 数据类型{{元素1,元素2,元素3...},{元素1,元素2,元素3...}};

比如:int [ ][ ] arr=new int {{1,2,3,4,5...},{1,2,3,4,5...}};

简化格式:
数据类型[ ][ ] 数组名={{元素1,元素2,元素3...},{元素1,元素2,元素3...}};

比如:int[ ][ ] arr={{1,2,3,4,5...},{1,2,3,4,5...}}; 

注意:建议以后这样定义,把每一个一维数组单独写一行,每一个一维数组其实是二维数组中的元素,

所以每一个之间需要用逗号隔开,最后一个数组不用加逗号

比如:int[ ][ ] arr={

{1,2,3,4,5},

{5,6,7,8,9,10,11}

};

二维数组赋值:   数组名[索引][索引];

arr[2][1];

说明:

arr[2]:代表的二维数组索引为2

arr[1]:代表的是二维数组里的一维数组,第二个一维数组中1索引上的位置,也就是具体的元素

二维数组遍历:

先遍历二维数组(外循环),然后再遍历里面的一维数组(内循环)

代码示例:

package com.hai.twodimensionarr;

public class TwoDimensionDemo1 {
    public static void main(String[] args) {
        /*二维数组静态初始化格式:
        数据类型 数组名[][]=new 数据类型[][]{{元素1,元素2,元素3...},{元素1,元素2,元素3...}};
        简化格式:
        数据类型 数组名[][]={{元素1,元素2,元素3...},{元素1,元素2,元素3...}};
        元素访问:
        数组名[索引][索引];

        二维数组遍历:
         */
        //完整格式:
        int[][] arr = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8, 9}};
        //简写格式:
        int[][] arr1 = {{1, 2, 3, 4}, {5, 6, 7, 8, 9}};
        //System.out.println(arr[i][j]);
        //获取元素
        //arr[i][j]
        //arr:二维数组
        //arr[i]:二维数组的索引,获取出来里面是一维数组
        //arr[j]:表示一维数组中的索引,获取出来的就是真正的元素
        //arr[0][0]:获取第一个一维数组的0元素
        System.out.println(arr1[0][1]);//2
        System.out.println(arr1[1][2]);//7
        System.out.println(arr1[2][0]);//ArrayIndexOutOfBoundsException  超过二维数组中有的一维数组
        //二维数组的习惯书写格式
        int[][] arr2 = {
                {1, 2, 3, 4},
                {5, 6, 7, 8, 9}
        };
        //二维数组遍历  先遍历二维数组,然后再遍历二维数组里面的一维数组
        //外循环:遍历二维数组,得到里面的每一个一维数组
        for (int i = 0; i < arr2.length; i++) {
            //i:表示二维数组中的每一个索引
            //arr2[i]:表示二维数组中的每一个元素(一维数组)
            //内循环:遍历一维数组,得到一维数组中的每一个元素
            for (int j = 0; j < arr2[i].length; j++) {
                //j:表示一维数组中的每一个元素
                System.out.print(arr2[i][j] + " ");//问题:刚才把它看成是对元素的访问了!!!
            }
            System.out.println();
        }
    }
}

动态初始化格式:

数据类型[ ][ ] 数组名=new 数组名[m][n];

int [ ][ ] arr=new arr[2][1];

arr[2]:这个二维数组可以存放2个一维数组

arr[1]:这个一维数组可以1个元素

m:表示这个二维数组可以存放多少个一维数组

n:表示每一个一维数组可以存放多少个元素

代码示例:

package com.hai.twodimensionarr;

public class TwoDimensionDemo2 {
    public static void main(String[] args) {
        //二维数组的动态初始化格式:
        //数组类型 [][] 数组名=new 数据类型[m][n];
        //m:表示这个二维数组可以存放多少个一维数组
        //n:表示每一个一维数组可以存放多少元素
        //利用动态初始化创建二维数组


        int[][] arr = new int[3][5];
        //3:这个二维数组可以存放3个一维数组
        //5:每一个一维数组可以放5个元素

        //给二维数组赋值
        arr[0][0] = 10;
        //表示给二维数组的第一个一维数组赋值10
        //遍历二维数组
        //外循环:遍历二维数组拿到里面的一维数组
        //内循环:拿到一维数组里面的每一个元素
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                //arr[i]:是对应的是二维数组里面可以存放多少个一维数组
                System.out.print(arr[i][j] + " ");
            }
            //表示打印完一维数组换行
            System.out.println();
        }
    }
}

面向对象的介绍

面向: 拿,找

对象:能干活的东西

面向对象编程:拿东西过来做对应的事情

类和对象

类的定义:是对象共同特征的描述(设计图),比如:洗衣机,手机,机器人这些东西的设计图

对象的定义:是真实存在的东西,比如:洗衣机实体,手机实体,机器人实体

注意:在java中必须要先定义类,才能够获得对象

类定义的格式:

public class {

1.成员变量(代表属性,一般是名词)

2.成员方法(代表方法,一般是动词)

3.构造器(后面学习)

4.代码块(后面学习)

5.内部类(后面学习)

};

如何得到类的对象?

类名 对象名=new 类名();

比如:class p=new Phone();

如何使用对象?

访问属性: 对象名.成员变量();

访问行为: 对象名.方法名(...);

定义类的注意事项

用来描述一类事物的类,专业叫做javaBean类

在javaBean类中是不写main()方法的

写main()方法的类叫测试类,我们可以在测试类中创建javaBean类的对象并进行赋值调用

类名首字母需要大写,需要见名知意,驼峰模式,不能用关键字,满足标识符的规定

一个java文件中可以定义多个类,且只能一个类是public修饰的,而且public类必须成为代码文件名

实际开发中一个文件名值定义一个class类

成员方法完整定义格式:  修饰符 数据类型 变量名=初始化值;一般初始化值不用指定,存在默认值

代码示例:

package Test2;

public class BoyFriend {
    //男朋友的属性
    //成员变量:类的里面,方法的外面
    private String name;
    private int age;
    private String gender;
    private double high;
    private double weight;

    //针对每一个私有化的成员变量,都要提供set和get方法
    //set方法:给成员变量赋值的作用
    //get方法:对外提供成员变量的值
    //给成员变量name进行赋值
    public void setName(String name) {
        //局部变量:就是方法的里面       this 就近原则 谁离我近,我就用谁
        this.name = name;
    }

    //对外提供成员变量name的值  这里是直接返回它的值就可以了
    public String getName() {
        return name;
    }

    public void setAge(int age) {
        if (age >= 18 && age <= 50) {
            this.age = age;
        } else {
            System.out.println("非法参数");
        }
    }

    public int getAge() {
        return age;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getGender() {
        return gender;
    }

    public void setHigh(double high) { //这里的使用小括号里面的参数去进行判断的 要注意
        if (high >= 150 && high <= 170) {
            this.high = high;
        } else {
            System.out.println("非法参数");
        }
    }

    public double getHigh() {
        return high;
    }

    public void setWeight(double weight) {
        if (weight >= 100 && weight <= 120) {
            this.weight = weight;
        } else {
            System.out.println("非法参数");
        }
    }

    public double getWeight() {
        return weight;
    }

    //男朋友的行为
    public void kiss() {
        System.out.println("男朋友正在亲嘴");
    }

    public void hug() {
        System.out.println("男朋友正在拥抱");
    }

    public void sex() {
        System.out.println("男朋友正在做羞羞的事情");
    }
}

代码示例2:

package Test2;

public class BoyFriendTest {
    public static void main(String[] args) {
        //拓展快捷键  Fn+设置图标
        //创建男朋友的对象
        //给成员变量赋值
        BoyFriend bf1 = new BoyFriend();
        //赋值   对象名.set属性();
        bf1.setName("Kim");
        bf1.setAge(18);
        bf1.setGender("男");
        bf1.setHigh(160);
        bf1.setWeight(110);
        //获取   对象.get属性();
        System.out.println(bf1.getName());
        System.out.println(bf1.getAge());
        System.out.println(bf1.getGender());
        System.out.println(bf1.getHigh());
        System.out.println(bf1.getWeight());
        //调用男朋友的行为
        bf1.kiss();
        bf1.hug();
        bf1.sex();
        //批量修改快捷键  ALt+选中需要修改的东西
        // 按着鼠标滚轮不动,也可以进行批量修改
    }
}

封装

封装的定义:正确设计对象的属性和方法  对象代表什么就封装对应的数据,并为对应的数据提供对应的行为

封装的示例:人画圆,人关门(第一个是圆自己画的,只是创建对象调用了画圆的这个行为,第二个门是自己关的

也是调用了人关门的这个行为)

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

privte关键字

是一个权限修饰符,被private修饰的成员只能在本类中使用,可以修饰成员(成员方法和成员变量)

针对private修饰的成员变量,如果需要被其它类使用,需要提供相应的操作

提供''setXxx(参数)''的方法,用于给成员变量赋值,方法用public修饰

提供"getXxx()"的方法,用于获取成员变量的值,方法用public修饰

代码示例:

package Test1;

public class PhoneTest {
    public static void main(String[] args) {
        //创建手机的对象
        //可以让手机做一些事情
        //也可以赋值
        //类名 对象名=new 对象名();
        //访问属性
        Phone p = new Phone();
        p.brand = "Apple";
        p.price = 9999.0;
        //访问行为
        //获取手机对象里面的值
        System.out.println(p.brand);
        System.out.println(p.price);
        //调用手机中的方法
        p.chat();
        p.music();
        //再创建一个手机的对象
        Phone p2 = new Phone();
        p2.brand = "Huawei";
        p2.price = 1999.0;
        System.out.println(p2.brand);
        System.out.println(p2.price);
        p2.music();
        p2.chat();
    }
}

代码示例2:

package Test1;

public class Phone {
    //手机的设计图
    //创建成员变量    (属性,成员变量)      不用赋值
    String brand;
    double price;

    //创建成员方法    (行为,方法)  不需要static
    public void music() {
        System.out.println("手机正在听Ariana Grande的歌曲");
    }

    public void chat() {
        System.out.println("手机正在视频");
    }
}

就近原则和this关键字

就近原则:谁离我近我就用谁

System.out.println(age);  

说明:先去找局部变量去找,如果没有找到就去成员变量里面找

System.out.println(this.age);

说明:直接去使用过成员位置的值,如果没有就不会去找局部变量的值了

this的作用:可以区分成员变量和局部变量

面向对象构造方法

构造方法概述:

构造方法也叫做构造器 构造函数

构造方法的作用:在创建对象的时候,虚拟机会自动调用构造方法,给成员变量进行赋值的

构造方法的格式:

public  Student{

修饰符 类名(参数){

  方法体;                         

}

}

特点:类名必须要和方法名保持一致,大小写也要一致

没有返回值类型,连void也没有!!!

没有具体的返回值,不可以让return带回返回值结果

public class Student{

private String name;

private int age;

空参构造方法

public  Student(){

...

};

有参构造方法

public Student(String name,int age){

...

}

}

执行时机:

1.每创建一次对象,构造方法就要被调用一次

2.创建对象的时候由虚拟机调用,不能手动调用构造方法

代码示例:

package Test3;

public class Student {
    private String name;
    private int age;
    //如果我们没有写任何的构造方法
    //虚拟机会给我们加一个空参构造方法

    //空参的构造方法
    public Student() {
        System.out.println("i really love my dad,but i haven't seen it anymore");
    }

    //有参的构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //创建set方法进行赋值
    public void setName(String name) {
        this.name = name;
    }

    //创建get方法作用是对外提供返回值的作用
    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

}

代码示例2:

package Test3;

public class StudentTest {
    public static void main(String[] args) {
        //创建对象的里面没有对应的参数,就会调用无参的构造方法
        //报错原因:
        //就会调用Student的无参构造方法
        Student ss = new Student();
        //创建Student类对象
        Student s = new Student("zhangsan", 18);
        System.out.println(s.getName());
        System.out.println(s.getAge());
    }
}

构造方法的注意事项

构造方法的定义:

1.如果没有定义一个构造方法,系统将会给出一个默认的无参的构造方法

2.如果定义了构造方法,系统就不会再提供默认的构造方法

构造方法的重载

带参构造方法和无参构造方法,两个方法名相同,参数不同,这就是构造方法的重载

建议使用方式:

无论是否使用,带参的构造方法和无参的构造方法都要手动写上

构造方法有几种?分别的作用是什么?

构造方法有两种

无参的构造方法:初始化对象的时,成员变量的值都采用默认的数据

有参的构造方法:初始化对象是,同时可以为对象进行赋值

标准的javaBean

1.类名需要见名知意

2.成员变量需要使用private进行修饰

3.最少提供两个构造方法

有参的构造方法,无参的构造方法

4.成员方法

提供每一个成员变量对应的setXxx和getXxx方法

如果还有其它的行为,也要加上

三种情况的对象内存图

一个对象的内存图

Student s=new Student();

1.加载class文件

2.申明局部变量

3.在堆内存当中开辟一个空间

4.默认初始化

5.显示初始化

6.构造方法初始化

7.将堆内存中的地址赋值给左边的局部变量

两个对象指向同一个引用

基本数据类型和引用数据类型

基本数据类型就是数据值是存储在自己的空间中  赋值给其它变量也是赋的真实的值

应用数据类型数据值是存储在其它空间中,自己空间中存储的是地址值  赋值给其它变量,赋值的也是地址值

this的内存原理

this的本质:代表方法调用者的地址值

this的作用:区分成员变量和局部变量

谁离调用者越近就用谁

成员和局部

成员变量是在类中方法外

局部变量是方法中的变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值