java学习笔记(Day6)

面向对象

面向对象编程特点:
稳定性、可扩展性、可重用性
重点:
继承、封装、多态

1 概念定义

对象: 实例
类: 确定对象将会拥有的特征(属性)和行为(方法)
关系: 对象是类的实例表现,类是对象的类型。在计算机中可以认为对象是特定类型的数据
属性: 对象具有的各种静态特征
方法: 对象具有的各种动态行为

2 类和对象的创建使用案例

对象的创建过程:
类->(实例化)->对象

Tips:包名的命名规范
1.英文字母小写
2.域名的倒序加相关内容的名称

应用案例:

  1. 类的创建(包括属性和方法)
package TestClass;

public class Cat {
	//属性:昵称、年龄、体重、品种
	String name;
	int year;
	double weight;
	String species;
	
	//方法:跑动、吃东西
	public void run() {
		System.out.println("run");
	}
	public void eat() {
		System.out.println("eat");
	}
	public void run(String x) {
		System.out.println(x+"running");
	}
	
}

  1. 对象实例化
    定义类,实例化对象,通过对象来进行操作
package TestClass;

public class CatTest {
	public static void main(String[] args) {
		//对象实例化
		Cat one=new Cat();
		//测试
		one.eat();
		one.run();
		one.year=1;
		System.out.println(one.year);
		one.name="1号";
		one.run(one.name);
	}
}

Tips:单一职责原则(单一功能原则):
面向对象设计中的一个重要原则(一个类有且只有一个引起变化的原因)

3. 实例化对象的过程

  1. 对象实例化:
    类名 对象名=new 类名

  2. 实例化对象的过程可以分为两部分:

  • 声明对象
    内存的栈中开辟一块空间
  • 实例化对象
    内存的堆中开辟一块空间
  1. 内存中的存储形式
  • Cat one=new Cat();
    把堆空间开辟的内存地址存放到对象名中

  • Cat one=Cat();
    Cat two=Cat();
    开辟两个空间,不会相互影响

  • Cat one=Cat();
    Cat two=one;
    开辟了一个空间,实例在堆空间中的地址会复制一份一个,修改其中一个会影响另一个

总结:
在栈中生成一个对象,在堆当中通过new关键字开辟了一个新的空间,通过赋值符号将堆空间中的内存地址存放到栈空间中的对象空间中,通过对象名去操作具体对象的具体信息。

4. 构造方法

4.1 作用

构造函数/构造器:
完成对象初始化的相关设置

4.2 注意事项

  • 构造方法的方法名必须与类名相同且没有返回值
  • 构造方法不能被对象单独调用
  • 只能在对象实例化的时候调用
  • 当没有指定构造方法时,系统会自动添加无参的构造方法
  • 当有指定的构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法
  • 一个类中可以有多个构造方法

4.3 语句格式

public 构造方法名(){
}

4.4 应用案例:

4.4.1 无参构造方法
	//无参构造方法
	public Cat() {
		System.out.println("无参构造方法");
	}
package TestClass;

public class CatTest {
	public static void main(String[] args) {
		//对象实例化
		Cat one=new Cat();
		//测试
		one.eat();
		one.run();
		

	}
}

注意:
在进行对象实例化时,会去调用它对应的构造方法,完成构造方法里面的操作,调用完成后回到实例化语句。

4.4.2 带参构造方法:
	public Cat(String name,int year,double weight,String species) {
		//System.out.println("无参构造方法");
		name=name;
		year=year;
		weight=weight;
		species=species;
	}
		Cat one=new Cat("miao",1,1.2,"田园猫");

Tips:没有给属性赋值,则输出结果为null、0、0.0、null

**Error:**程序的逻辑有问题:
带参构造方法传入参数没有赋值给属性,就近原则,优先寻找最近的同名参数进行赋值。

**解决方案1:**改变传递的参数名

	public Cat(String nname,int nyear,double nweight,String nspecies) {
		//System.out.println("无参构造方法");
		name=nname;
		year=nyear;
		weight=nweight;
		species=nspecies;
	}

解决方案2: this关键字

  • this代表当前对象,告诉传入的参数要赋值给对象的属性
  • 调用成员属性,解决成员属性和局部变量同名冲突
  • 调用成员方法
  • 调用重载的构造方法:通过this()调用构造方法,必须放在方法体第一行
	public Cat(String name,int year,double weight,String species) {
		this.name=name;
		this.year=year;
		this.weight=weight;
		this.species=species;

注意: 构造方法在类内是不能被普通的成员方法调用的
同一个类的构造方法之间可以通过this();的方法调用

5 总结

定义类
public class 类名{
//定义属性部分
[访问修饰符]数据类型 属性名;
//定义方法
[访问修饰符]返回类型 方法名;
}

创建并引用对象
类名 对象名=new 构造方法();
对象名.属性
对象名.方法名()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值