Java SE基础5(类、对象、成员变量、局部的区别、构造器、this、重载、数组与对象、二维数组)

面向对象:OOP(Obejct Oriented Programming)

1.类 和对象

一切皆对象,java中基本的操作单位就是对象
1)类:
所有同种的特征和行为,抽象出来成为类
是概念,不真实存在的

		学生类: - 实体类
		学生的特征: 成员变量/属性
			姓名 年龄 性别 学号

		学生行为: 成员方法
			吃饭 睡觉 学习

2)对象:
	符合类的特征并且真实存在的独立个体
	符合类的实例化个体 - new对象

3)类和对象的关系:
	先有(声明/定义)类,才能创建类的对象

2.类的定义

1)分类
	a.有实际意义的类 - 实体类
		可以存在真实个体的类: 车类 人类 鼠标类...
	b.没有实际意义的类 - 普通类
		作用:放主方法
2)定义实体类
	a.成员变量
	  可以不用初始化,有默认初始值
	  引用数据类型:null
	  基本数据类型:0

	b.成员方法

3.使用对象的步骤:

1)必须要有实体类
	class Student{
		String name;
		int age;//成员变量
	}
2)创建对象 - 找到主方法 - 放在普通类中
3)有了对象,对象中包含(成员变量和成员方法)	
	调用成员变量:
		stu.name;
	调用成员方法:
		stu.study();

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

1)位置上的区别
  局部变量:方法中
  成员变量:类中
2)初始化的区别:
	局部变量:使用前必须声明 + 初始化
	成员变量:使用前可以不用初始化,因为有默认初始值
3)个数的区别:
	局部变量:声明个数
	成员变量:有对象决定,有多少个对象,就有多少个成员变量
4)JVM内存图中的区别
	第一次使用[只加载一次]类,把类加载进来
	局部变量:存在方法栈中,方法结束,变量消失
	成员变量:存在堆中

	属于类中的成员变量,通过类调用
	stu.car = new Car();

	直接创建对象 - car属于局部变量
	Car car = new Car();

3.构造方法/构造器

1)作用:初始化成员变量
2)特点:
	a.方法名和类名一致
	b.没有返回值类型
	c.修饰词可有可没有(public)
	d.编译器会默认添加无参构造器
		但是,如果有构造器,则不会继续添加无参构造器.
		建议: 手动添加无参构造器

4.this关键词

this:表示当前对象(动态值)
	那个对象调用,就表示那个对象
1)在构造方法中,this可以调用自己的成员变量
	成员变量和局部变量重名时,需要借助this关键词表示成员变量
		this.name = name;
2)在构造方法中,借助this可以调用自己的成员方法
3)在使用this(空参/有参)时需要注意,只能放在构造方法的第一行
4)调用构造器时,this不能省略
	也不能同时调用,会造成死循环

5.方法重载

1)条件:
	a.类型不一样
		ps:(int a)
		   (String a)
	b.个数不一样
		ps: ()
			(int a)
		    (int a, int b)
	c.顺序不一样
		ps: (int a, double b)
		    (double b, int a)
	d.不允许
		(int a, int b)
	    (int b, int a)
2) 跟返回值无关
3) 必须在同一个类中,相同方法名的几个方法,叫做方法的重载

6.数组结合对象使用 - 引用类型数组

1)赋值方式
(1)静态赋值
ps: Student[] stu = {new Student(),new Student()}
(2)动态赋值
ps: Student[] stu = new Student[3];
2)有可能产生的问题:
java.lang.NullPointerException - 空指针异常
产生原因:
调用了空值的 成员变量 或 成员方法
解决办法:
在调用前,new一个对象
3)引用类型数组的使用步骤
(1)给数组初始化
Student[] stu = new Student[3];//默认值都是null
(2)给数组元素初始化
stu[0] = new Student()
stu[1] = new Student()

作业:俄罗斯方块

分析: S、Z、L、J、I、O、T

一个图形,分为4个方块
以一个方位为类:
	Cell类:
		成员变量
			row col
		成员方法
			左移/右移/下移
			画图形的方法

Debug断点测试:

1.F7:执行这一行代码
2.F8:跳过这一行代码
3.Shift + F8:回到上一行代码
4.Ctrl + F2: 结束程序
5.F9:跳到下一个断点

命名规则:

1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好,首字母小写,第二个字母开始首字母大写 - 小驼峰命名法
4.包名: 全小写 - 域名倒写
	www.baidu.com
	com.baidu.www
5.方法名:可读性好,名字长度没有要求
		 小驼峰命名法
6.类名:首字母大写,第二个首字母大写 - 驼峰命名法
	Scanner Math String

eg1:
package oop;
/**

  • 小车类 - 实体类
    */
    public class Car {
    String name;
    String color;
    double price;

    void run(String user){
    System.out.println(name + “小车在跑”);
    }

}

package oop;
/**

  • 普通类 - 用来放主方法

  • 引用数据类型: 数组 String 类/对象

  • 基本数据类型: 8种
    */
    public class Demo01ClassDefinition {
    public static void main(String[] args) {
    //局部变量
    int a = 10;
    //创建对象 - 实例化对象 - 引用
    //使用变量
    Student stu = new Student();
    //使用对象 - 调用成员变量
    System.out.println(stu.name);
    stu.age = 21;
    stu.name = “小明”;
    //stu有一辆车
    stu.car = new Car();
    System.out.println(stu.age);
    System.out.println(stu.name);
    //调用方法
    stu.study( “java”);

    Student stu1 = new Student();
    stu1.name = "小明";
    stu1.age = 21;
    
    //创建小车类:
    Car car = new Car();
    car.name = "兰博基尼";
    car.color = "骚粉色";
    car.price = 10000000;
    

    }
    }

package oop;
/**

  • 学生类(模板) - 实体类
    */
    public class Student {
    //成员变量
    //可以不用初始化,有默认初始值,
    //引用类型默认值:null 基本数据类型:0
    String name;
    int age;
    String sex;
    Car car;//类中有一个类,属于成员变量

    //默认添加构造方法
    Student(){//无参构造方法
    //作用: 初始化成员变量
    /* name = “黑”;
    age = 40;*/
    //this(“红红”,30,new Car());
    }
    //添加 有参构造方法
    Student(String name, int age, Car car){
    //如果在构造器中调用this(),只能放在,第一行
    this();
    //成员变量和局部变量同名时,就近原则,就近使用
    //使用关键词 this表示,
    this.name = name;
    this.age = age;
    this.car = car;
    //this.study(“java”);
    }

    //成员方法
    void study(String subject){
    //int a = 20;
    System.out.println(“正在学习” + subject);
    }
    }

package oop;
/**

  • 普通类 - 放主方法
    */
    public class Demo02Init {
    public static void main(String[] args) {
    //构造方法/构造器
    Student stu1 = new Student();
    System.out.println(stu1.age);
    System.out.println(stu1.name);
    System.out.println(stu1.car);
    stu1.name = “小明”;
    stu1.age = 21;
    stu1.car = new Car();
    System.out.println(stu1.age);
    System.out.println(stu1.name);
    System.out.println(stu1.car);

     Student stu2 = new Student("小黑",21,null);
    
    
     Student stu3 = new Student("小红",22,new Car());
    

    }
    }

eg2:
package tetris;
/**

  • 格子类 - 实体类
    */
    public class Cell {
    //成员变量
    int row;
    int col;
    //添加无参构造器
    Cell(){

    }
    //有参构造方法
    Cell(int row,int col){
    this.row = row;
    this.col = col;
    }
    //成员方法
    void moveLeft(){
    col–;
    }
    void moveRight(){
    col++;
    }
    void drop(){
    row++;
    }

    /*
    画格子的方法
    有格子的时候画*,没有的时候画-
    /
    void printCell(){
    int totaRow = 20;//行
    int totaCol = 20;//列
    for (int row = 0; row < totaRow; row++) {
    for (int col = 0; col < totaCol; col++) {
    if(this.row == row && this.col == col){
    System.out.print("
    ");
    }else{
    System.out.print("-");
    }
    }
    System.out.println("-");
    }

    }

}

eg3:
package tetris;

/**

  • 放主方法
    */
    public class DemoTest {
    public static void main(String[] args) {
    //创建Cell的对象
    Cell cell = new Cell(4,4);
    cell.printCell();
    }
    }

eg4:
package overload;
/**

  • 方法重载
    */
    public class Demo01MethodOverLoad {
    public static void main(String[] args) {
    打(“伞”);
    打(1);
    打(“伞”,1);
    }
    //方法 String 表示伞(没有真实意义)
    public static void 打(double san){
    System.out.println(“下雨打伞”);
    }

    public static void 打(String san,int che){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }
    public static void 打(int che,String san){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }
    public static void 打(String san,String che){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }

    //int 表示 打车
    public static void 打(int san){
    System.out.println(“下雨打车”);
    }

    //有返回值
    public static String 打(String ciba){
    System.out.println(“不停的敲打”);
    return “吃到糯米糍吧”;
    }

    public static String 打(int ciba,String name,double d){
    System.out.println(“不停的敲打”);
    return “又吃到糯米糍吧”;
    }
    public static void 打(int ciba,double d,String name){
    System.out.println(“不停的敲打”);
    }
    }

eg5:
package overload;
/**

  • 方法重载
    */
    public class Demo01MethodOverLoad02 {
    public static void main(String[] args) {
    //创建对象
    Demo01MethodOverLoad02 demo02 = new Demo01MethodOverLoad02();
    demo02.打(“伞”);
    demo02.打(1);
    demo02.打(“伞”,1);

    }
    //以下方法变成 成员方法

    //方法 String 表示伞(没有真实意义)
    void 打(double san){
    System.out.println(“下雨打伞”);
    }

    void 打(String san,int che){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }
    void 打(int che,String san){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }
    void 打(String san,String che){
    System.out.println(“下雨打伞”);
    System.out.println(“又打车”);
    }

    //int 表示 打车
    void 打(int san){
    System.out.println(“下雨打车”);
    }

    //有返回值
    String 打(String ciba){
    System.out.println(“不停的敲打”);
    return “吃到糯米糍吧”;
    }

    String 打(int ciba,String name,double d){
    System.out.println(“不停的敲打”);
    return “又吃到糯米糍吧”;
    }
    void 打(int ciba,double d,String name){
    System.out.println(“不停的敲打”);
    }
    }

eg6:
package array;
/**

  • 小车类 - 实体类
    */
    public class Car {
    String name;
    String color;
    double price;

    void run(String user){
    System.out.println(name + “小车在跑”);
    }

}

package array;
/**

  • 数组结合对象使用 - 引用数据类型数组
    */
    public class Demo01DefereenceArray {
    public static void main(String[] args) {
    //基本数据类型 - 数组
    int[] arr = {1,2,3,4};
    char[] arr2 = new char[]{‘h’,‘i’};
    int[] arr3 = new int[5];//{0,0,0,0,0}

     //引用数据类型数组
     //Student s = new Student();
     //静态赋值
     Student[] stu = {new Student(),new Student()};
     //动态赋值 - 有3个Student对象
     Student[] stu1 = new Student[3];
     System.out.println(stu1[0]);//null
     System.out.println(stu1[1]);//null
     System.out.println(stu1[2]);//null
    
     //修改第一个Student对象中的name属性为"张三"
     //java.lang.NullPointerException - 空指针异常
     //stu1[0].name = "张三";
     //java.lang.NullPointerException - 调用了空的对象的成员方法
     //stu1[0].study("java");
    
     stu1[0] = new Student();
     stu1[0].name = "张三";//赋值 -> 初始化
     System.out.println(stu1[0].name);
    

    }

}

package array;
/**

  • 二维数组
    /
    public class Demo02TwoArray {
    public static void main(String[] args) {
    /

    2.有一个int[]类型的数组 b
    b中有4个元素
    b的第一个元素共有3个元素,其中第3个元素是1
    第二个元素的第一个元素是5
    3.有一个int[]类型的数组 c
    c中每一个元素都有3个元素
    其中第二个元素的每一个值都是4
    c中每一个元素都是4
    */

    /*
    1.有一个int[]类型的数组 a
    这个数组一共有3个元素
    其中第一个元素有4个元素
    第二个元素有3个元素
    第二个元素中的第1个元素是2
    第三个元素有5个元素
    */
    int[][] a = new int[3][];
    a[0] = new int[4];
    a[1] = new int[3];
    a[1][0] = 2;
    a[2] = new int[5];

     /* 工整的二维数组
     3.有一个int[]类型的数组 c
     c中每一个元素都有3个元素
     其中第二个元素的每一个值都是4
     c中每一个元素都是4
      */
     int[][] c = new int[2][3];
     c[0] = new int[3];
     c[1] = new int[3];
     //数组的遍历
     for (int i = 0; i < c.length; i++) {
         c[i] = new int[3];
     }
     System.out.println(c.length);
     System.out.println(c[0].length);
    
     c[1][0] = 4;
     c[1][1] = 4;
     c[1][2] = 4;
     for (int i = 0; i <c[1].length ; i++) {
         c[1][i] = 4;
     }
     //数组的遍历
     for (int i = 0; i < c.length; i++) {
         for (int j = 0; j < c[i].length; j++) {
             c[i][j] = 4;
         }
     }
    

    }
    }

package array;

import oop.Car;

/**

  • 学生类(模板) - 实体类
    */
    public class Student {
    //成员变量
    //可以不用初始化,有默认初始值,
    //引用类型默认值:null 基本数据类型:0
    String name;
    int age;
    String sex;
    Car car;//类中有一个类,属于成员变量

    //默认添加构造方法
    Student(){//无参构造方法
    //作用: 初始化成员变量
    /* name = “黑”;
    age = 40;*/
    //this(“红红”,30,new Car());
    }
    //添加 有参构造方法
    Student(String name, int age, Car car){
    //如果在构造器中调用this(),只能放在,第一行
    this();
    //成员变量和局部变量同名时,就近原则,就近使用
    //使用关键词 this表示,
    this.name = name;
    this.age = age;
    this.car = car;
    //this.study(“java”);
    }

    //成员方法
    void study(String subject){
    //int a = 20;
    System.out.println(“正在学习” + subject);
    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值