面向对象基础01-JAVA

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见 https://www.bilibili.com/video/BV1fh411y7R8?p=201&spm_id_from=pageDriver&vd_source=ceab44fb5c1365a19cb488ab650bab03

java 设计者引入类与对象(OOP) ,根本原因就是现有的技术,不能完美的解决新的需求。(oop一般指面向对象程序设计)

一、从类到对象的说法

  1. 创建一个对象
  2. 实例化一个对象
  3. 把类实例化

二、类和对象的区别和联系

  1. 类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型
  2. 对象是具体的,实际的,代表一个具体事物, 即是实例
  3. 类是对象的模板,对象是类的一个个体,对应一个实例
public class Object01 { 
    public static void main(String[] args) { 
    	//实例化一只猫(实例化一个对象)
        //1.new Cat()创建一只猫
        //2.Cat cat1 = new Cat(); 把创建的猫赋给 cat1
        Cat cat1 = new Cat();
        cat1.name = "小白";
        cat1.age = 3;
        cat1.color = "白色";

        Cat cat2 = new Cat();
        cat2.name = "小花";
        cat2.age = 5;
        cat2.color = "花色";

        System.out.println("第1只猫的信息"+cat1.name+" "+cat1.age+" "+cat1.color);
        System.out.println("第2只猫的信息"+cat2.name+" "+cat2.age+" "+cat2.color);
    }

}

//猫类
class Cat {
    String name;
    int age;
    String color;
}

在这里插入图片描述

三、对象在内存中存在形式(重要)

栈、堆、方法区(栈存放变量、常量在方法区)

栈用来存放局部变量,cat是引用类型变量(Cat类变量),堆用来存放变量,堆里面的对象数据有些是常量,方法区是用来存放静态变量 的,所以对象在堆里面存放静态区数据的地址。如果是基本数据类型就放在堆里,如果是字符串类型就放在方法区。String类型的数值不是直接存放在堆里面,而是存放在方法区的常量池。

从JDK1.7开始,字符串常量池以及方法区移到堆中了。
在这里插入图片描述
假设创建一个Person类,再创建一个对象 Person p1 = new Person(); 实际上 p1 在栈里,真正的对象在堆里,p1指向堆。p1也叫对象引用、对象名。

Java数据类型
在这里插入图片描述

思考题一

在这里插入图片描述
题目分析
Person p1 = new Person();
加载Person类信息:1属性信息 2方法信息
new是在堆里面开空间:在堆里面开辟了 age name空间,刚开始创建的时候是其默认值(因为 age 是 int 型,默认值为0,name 是 String 类型,默认为 null )
p1存在于栈里面,指向堆
在这里插入图片描述

p1.age = 10;
把age所在的空间存放的默认值,更改为10。
在这里插入图片描述
p1.name = “小明”;
注意这里的“小明”是字符串常量,会放在方法区的常量池,然后把在方法区的地址回填到堆中
在这里插入图片描述
Person p1 = p2; //把 p1 赋给 p2,
注意Person是引用类型,它使用的是引用传递,也是地址拷贝
在这里插入图片描述

Java内存的结构分析

  1. 栈:一般存放基本数据类型(局部变量)
  2. 堆:存放对象(cat1,数组等)
  3. 方法区:常量池(常量,比如字符串),类加载信息

Java创建对象的流程简单分析

	Person p = new Person();
	p.name = "jack";
	p.age = 10;
  1. 先加载Person类信息(属性和方法信息),注意类信息只会加载一次,比如创建了Cat类,创建c1 c2对象的时候不会重复加载
  2. 在堆中分配空间,进行默认初始化(int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String null)。
  3. 把地址赋给p (p指向对象在堆里面的地址
  4. 进行指定初始化,比如 p.name=“jack”,p,age=10

思考题二

在这里插入图片描述
b = null;
b指空
在这里插入图片描述
接下来的 System.out.println(b.age) 会抛出一个异常。

四、类与对象的定义与使用

1、基本语法:

(1)创建类的语法

	class 类名称 {
		成员变量/ 实例变量;
		成员方法;
	}

(2)创建具体的对象:
先声明在创建

	Cat cat1;
	cat1 = new Cat();

直接创建

	Cat cat1 = new Cat();

(3)访问属性
对象名.属性名;

	cat1.name();

2、属性/成员变量

  1. 从概念或叫法上看: 成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,授课中,统一叫属性)
  2. 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类 的 int age就是属性。
public class Object02 {
	public static void main(String[] args) {

	}
}

class Car {
	String name;//属性、成员变量、字段、field
	double price;
	String color;
	String[] master;//属性可以是基本数据类型,也可以是引用类型(对象 数组)
}

在这里插入图片描述

3、属性/成员变量注意事项

  1. 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
    简单的介绍访问修饰符: 控制属性的访问范围
    有四种访问修饰符 public, proctected, 默认, private
  2. 属性的定义类型可以为任意类型,包含基本类型或引用类型
  3. 属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String null【请见下述例子的默认输出】
public class PropertiesDetail {
	public static void main(String[] args) {
		//new了一个对象空间,p1指向空间
		Person p1 = new Person();
		//p1在【栈】里,真正的对象在【堆】里
		//p1也叫对象引用、对象名
		System.out.println("\n当前这个人的信息: ");
		System.out.println("age="+p1.age);
		System.out.println("name="+p1.name);
		System.out.println("sal="+p1.sal);
		System.out.println("isPass="+p1.isPass);

	}
}

class Person {
	int age;
	String name;
	double sal;
	boolean isPass;
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值