oop(1)

面对对象OOP(1)

一、类和对象

1.1、类

1、Java语言最基本单位就是类,类似于类型
2、类是一类事物的抽象
3、可以理解为模板或者设计图纸

1.2、对象

每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1、对象的状态用来描述对象的基本特征。
2、对象的行为用来描述对象的功能。
3、对象的标识是指对象在内存中都有一个唯一地址,用来和其他对象区分开来。
4、类是一类事物的抽象,对象是具体的实现

1.3、类和对象的关系

1、计算机语言是用来描述现实的。(属性+行为)
2、通过类来描述事物,把事物的属性当作成员变量,把行为当作成员方法。

1.4、对象在内存中的存储

Java把内存非为5大区域,我们总店关注栈和堆。
1、一般来讲,局部变量存在栈中,方法执行完毕内存就被释放。
2、对象(实例化类(new class))存在堆中,对象不再被使用时,内存才会被释放。
3、每个堆内存的元素都有地址值
4、对象的属性都有默认值(例如成员变量的默认值)。

1.4.1 单一对象内存图

在这里插入图片描述
1、在栈内存中,创建一个引用变量p,持有对象的地址(这个表示对象堆中)。
2、在对内存中,创建Person对象,并且开辟变量的空间,完成初始化。
3、给堆内存中的元素,分配一个唯一标志(地址值),交给p去保存。
4、p.name=“lisi” ;p.age=20;就去堆内存中找到唯一的地址值,找到Person对象,并对其属性进行修改赋值。
5、p.eat();就去堆内存中找唯一的地址值,找到Person对象,执行Person的方法。

1.4.2 多对象内存图

在这里插入图片描述
1、变量p和变量p1不是一片空间,p1需要开辟新的空间
2、Person p1=new Person,这时只要有new,就会开辟新空间,在堆内存中存入对象。

1.5、创建对象的流程

Person p = new Person
1、把Person.class文件加载进内存,
2、在堆内存中,开辟空间,存放Person对象,
3、在栈内存中,开辟空间,存放变量p,
4、对成员变量进行默认的初始化
5、对成员变量进行显示初始化
6、执行构造方法(如果有构造代码块,就先执行构造代码块,再执行构造方法)
7、堆内存完成
8、把堆内存的地址值赋值给变量p,p就是一个引用变量,引用了Person对象的地址值。

1.5.1、匿名对象

没有名字的对象,是对象的简化表现形式
使用场景:
当被调用的对象只调用一次时(多次创建多个对象浪费内存)
下面这种情况使用匿名对象会浪费内存

//正常的对象建立
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。

//使用匿名对象
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法

2、构造方法

2.1、概念

构造方法时一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要时完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法
构造方法和其他方法一样可以重载(加入参数,可以实现不同方式的对象创建)
构造方法又是构造函数,而构造函数又称为构造器,而构造器用于对象的创建

2.2、形式
  可以无参也可以有参
  修饰符 类名(参数){
  }
public class test(){
	String name;
	//无参构造
	public test(){
	}
	//含参构造
	public test(String n){
	name=n;
	}
}

构造方法赋值

public class test2{
	String name;
	int age;
	//赋值方式一,通过含参构造赋值
	public test2(String name,int age){
		this.name=name;
		this.age=age;
	}
	//赋值方法2.通过setXXX()方法赋值
	public void setName(String name){
		this.name=name;
	}
	public void setAge(int age){
		this.age=age;
	}
}

public class test3(){
	public static void main(String[] args){
		test2 t1=new test2("小明",12);
		System.out.println(t1.name);
        System.out.println(t1.age);
		
		test2 t2=new test2();
		t2.setName("小明");
		t2.setAge(12);
	}
}

3、构造代码块和局部代码块

3.1 构造代码块(静态代码块)

1、在类的内部,方法外部的代码块
2、通常用于抽取构造中的共性代码
3、每次调用构造方法之前都会执行构造代码块
4、优先于构造方法加载

3.2 局部代码块

1、在方法里面的代码块
2、通常用于控制变量的作用范围,出了括号就失效
3、变量的范围越小越好,成员变量会有线程安全问题

3.3 执行顺序
构造代码块是最优先的,局部代码顺序执行

4、this关键字

4.1、概念

this代表本类对象的一个引用对象
构造函数中,this()必须放在第一行

4.2、形式
public class test(){
	String name;
	public void test1(String name1){
		this.name=name1
	}
}
4.3、应用

1、当局部变量和成员变量同名时,用于区分。
如果附近有同名变量,会遵从变量的就近原则。
2、构造方法间的调用

public class test(){
	public static void main(String[] args){
		Animal a=new Animal();	
	}
}

class Animal{
	public Animal(){
		this("来福");
		System.out.println(name);
	}
	public Animal(String name){
		System.out.println(name);
	}
}

5、final关键字

5.1、概念

1、是java提供的一个关键字
2、final是最终的意思
3、final可以修饰类、方法、成员变量
出现的初衷:Java出现继承后,子类可以更改父类的功能,当父类不允许子类改变时可以利用final关键字修饰父类的方法、成员变量

5.2、特点

1、被final修饰的类,不能被继承
2、被final修饰的方法,不能被重写
3、final修饰的变量是一个常量,值不能更改
4、常量的定义形式:final 数据类型 常量名=值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值