Java学习之:面向对象

(一)面向对象三大特征:

1.封装性:

把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。通过 访问控制修饰符 实现。
在这里插入图片描述

2.继承性:

子类通过 extends 关键字 在不用重新编写代码的情况下,继承父类的所有功能,并进行选择性功能扩展。

3.多态性

:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。

( 二)类与对象

类是对对象的抽象。首先产生类,而后才可以产生对象。对象的所有行为,一定在类中进行了完整的定义。

1.类的组成:

1)属性;(一般属性设为private)
2)方法(方法设为public)

2.实例化对象:

1)通过类的构造方法来实例化
2)格式: 类名称 对象名称 = new 类名称();

3. 堆和栈

1)栈内存:存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即
堆内存的地址,可以简单的理解为对象的名称)
注:基本数据类型 存放在栈空间,给变量名赋值操作会改变变量值;
2)堆内存:保存的是真正的数据,即对象的属性信息。只要出现了关键词new,即在堆空间分配新内存来存放数据。
3)垃圾内存:所有的垃圾空间会不定期GC,GC会影响性能,所以开发之中一定要控制好对象的产生数
例:

//在堆空间分配了两块内存,分别存放p1和p2的内容
Person p1 = new Person();
Person p2 = new Person();
//将p1的内容赋值给p2,使P2指向的内存成为垃圾内存
p2 = p1;

4.封装和构造方法

1)封装:使用 private 封装属性后,只允许本类访问。要在类外对方法进行访问,需要提供getter,setter方法。
①getter方法:主要用于属性内容的取得
②setter方法:主要用于进行属性内容的设置与修改
例:

class Person {
 private String name;
 
 public String getName() {
 return this.name;
 } 
 public void setName(String name) {
 this.name =name;
 }
}

2)构造方法:使用关键字 new 实例化新对象时调用的操作方法。
①定义构造方法应遵循原则:
a.方法名称必须与类名称相同
b.构造方法没有返回值类型声明
问:构造方法无返回值,为什么没有void声明?
答:一个类的构造函数的返回值的类型就是这个类本身。一个类由 属性,构造方法,普通方法组成。构造方法没有返回值是为了将它和普通方法区分。 如果给构造方法加void,则 编译通过(系统认为它是普通方法), 运行不通过。

public class TestConstructor {
	public static void main(String[] args) {
		Constructor constructor = new Constructor();
	}
}

class Constructor {
	public void Constructor() {
		System.out.println("Constructor的构造方法");
	}
}

c.每个类都有构造方法,如果不自定义,系统自动生成一个无参构造方法
②构造方法重载

public class TestConstructor {
	public static void main(String[] args) {
		Constructor constructor1 = new Constructor();
		Constructor constructor2 = new Constructor("张三");
	}
}
class Constructor {
	private String name;
	public Constructor() {
		System.out.println("Constructor的无参构造方法");
	}
	public Constructor(String name) {
		System.out.println("Constructor的有参构造方法");
	}
}

(三)this关键字

1.用途:

1)调用本类(属性,方法)
①调用本类属性:this.属性名
当参数与类中属性同名时,类中属性无法被正确赋值。此时我们加上this关键字便可以正确给对象属性赋值
例:setName方法中,如果去掉this,则不能给属性name正确赋值。

 private String name;
 public void setName(String name) {
 this.name =name;
 }

②调用本类方法:
a.调用普通方法:this.方法名称(参数)
b.调用构造方法:this(参数) 注:this调用构造方法的语句必须在构造方法首行
注:构造方法之间可以互相调用
2)表示当前对象

class Person{
	public void print(){
		System.out.println("[PRINT]方法:"+this);
	}
}
public class TestThis{
	public static void main(String[] args) { 
		Person p1 = new Person(); 
		//输出:Person@15db9742
		System.out.println("[MAIN] 方 法 :"+p1);
		//输出:Person@15db9742
		 p1.print();
		 System.out.println("=================");
		 Person p2 = new Person();
		 System.out.println("[MAIN] 方 法 :"+p2); 
		 p2.print();
	}
}

(四)static关键字(重要)

1.修饰属性:

静态属性(类属性)
访问方式:类名.属性名 / this.属性名
注:所有的非static属性(实例变量)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制;此时,我们修改类属性,所有对象都同步此属性值:

2.修饰方法:

静态方法(类方法)
访问方式:类名.方法名

3.注意事项:

①静态属性,静态方法 如果在同一个类中,可以省去类名
②所有的static方法不允许调用非static定义的属性或方法(会出现编译出错);所有的非static方法允许访问static方法或属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值