学习JavaEE的日子 day11 初识面相对象

day11

1.初识面相对象

1.1 类的定义

类的组成是由属性和行为两部分组成

* 属性:在类中通过成员变量来体现(类中方法外的变量)

* 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

类的定义步骤:

①定义类

②编写类的成员变量

③编写类的成员方法

public class 类名 {

// 成员变量

变量1的数据类型 变量1;

变量2的数据类型 变量2;

// 成员方法

方法1;

方法2;

}

1.3 对象的使用

创建对象的格式:

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

调用成员的格式:

* 对象名.成员变量

* 对象名.成员方法();

1.4 案例

需求:创建人类的对象,并操作对象

分析:

​ 人类 - Person

​ 属性:name、sex、age

​ 方法:eat、sleep

步骤:

​ 1.创建Person类,属性、方法

​ 2.创建Person类的对象

​ (先创建Person,再在主方法中声明…)

   
public class Test01 {
public static void main(String[] args) {
		
		//创建对象
		Person p = new Person();//p--引用对象
		
		//设置属性
		p.name = "巴得伟";
		p.sex = '男';
		p.age = 23;
		
		//获取属性
		System.out.println(p.name);
		System.out.println(p.sex);
		System.out.println(p.age);
		
		//调用成员方法
		//注意:成员方法使用引用对象,调用对象
		p.eat();
		p.sleep();
		
		//调用静态方法
		//注意:静态方法使用类名,调用
		Person.method();
	}
}

在这里插入图片描述

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

类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)

内存中位置不同:成员变量(堆内存)局部变量(栈内存)

生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,随着方法的调用完毕而消失)

初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用

在这里插入图片描述

案例:

public class Person {
/** 成员变量
    成员属性/成员变量

 注意:属于对象的变量,系统会赋默认值,该类所有的成员方法都能使用该变量

成员变量的默认值:

     整数类型:0

     类型:0.0

     字符类型:' '

     布尔类型:false

     引用类型:null
        */
    String name;
	char sex;
	int age;
//成员方法
public void eat(){
	
	//局部变量:方法里的变量,必须初始化后,才能使用,其作用域在方法内
	int i = 100;
	
	System.out.println("吃饭饭 -- " + i);
}

public void sleep(){
	System.out.println("睡觉觉");
}

//静态方法
//注意:静态方法不能使用成员变量
public static void method(){
	System.out.println("静态方法");
}

内存图:

在这里插入图片描述

总结

1.使用到类,JVM会把该类的class文件加载到方法区中,扫描该类的字面值常量,将字面值常量加载到常量池中

2.new对象会在堆中开辟空间,用于存储对象的成员变量,系统会赋默认值

3.引用中存储的是对象在堆中的地址 ( Person p=new Person(); p -->就是引用 )

4.调用方法,就会在栈中开辟空间,该空间存放方法的局部变量,方法执行完毕该空间会立刻回收

5.class文件中存放了该类所有的信息(属性,成员方法,静态方法)

简答题

1.面向对象和面向过程的区别

面向过程面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资

源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用

面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。

面向对象面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所

以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程

2.静态变量和实例变量区别

静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。

实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。

3.静态变量与普通变量区别

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本, 各个对象拥有的副本互不影响。 还有一点就是static成员变量的初始化顺序按照定义的顺序进行初始化。

4.静态方法和实例方法有何不同?

1.在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有

后面这种方式。也就是说,调用静态方法可以无需创建对象。

2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员

变量和实例方法;实例方法则无此限制

总结

多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

方法没有实例化,对象才有实例化,eg: Person p=new Person();//这个就是实例化

  • 33
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值