5.面向对象思想 Object-Oriented Thought

1.概念

对象:客观存在的对象实体和主观抽象的概念

面向对象:以对象作为中心,采用抽象、封装、继承,多态等设计方法来解决问题的一种软件开发方法

2.类和对象的关系

类:事物的描述

对象:该事物的实例,java中通过new关键字创建

类是对象的抽象,对象是类的实例

3.成员变量和局部变量的区别

定义环境不同:成员变量定义在类中,局部变量定义在局部代码块中

定义内存不同:成员变量定义在堆内存中,局部变量定义在栈内存中

生存周期不同:成员变量随着对象的创建而存在随着对象的消失而消失,局部变量随所属区域的执行而存在随着所属区域的消失而释放

默认初始值不同:成员变量都有默认初始值,局部变量没有默认初始值

4.封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:提高程序重用性、安全性

原则:将不需要对外提供的内容都隐藏起来,只提供公共方法对其访问

5.构造函数

作用:给对象初始化

特点:a.函数名与类名相同   b.没有返回值   c.不用定义返回值类型

代码示例

class Person {
	private String name;
	private int age;

	// 自定义构造函数
	Person() {// 一个类如果没有自定义构造函数,则该类中会有一个默认的空参数构造函数;如果自定义构造函数,则默认构造函数就不存在了
		System.out.print("Person run");
	}
}

public class ConsDemo {
	public static void main(String[] args) {
		Person p = new Person();
	}
}
构造函数和一般函数的区别:

调用方式不同:构造函数在对象创建时被调用,一般函数在需要函数功能时被调用

调用次数不同:构造函数只会被调用一次,一般函数会被调用多次

构造代码块

所有对象初始化

代码示例

class Person {

	{// 构造代码块,随着对象的创建而创建
		System.out.println("ConsCode...");
	}

}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person();
	}

}
6.this关键字

this代表本类对象的引用,当函数内需要用到调用该函数的对象时使用;当成员变量和局部变量重名时,使用this关键字区分

代码示例

class Person {
	private String name;
	private int age;

	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void speak() {
		System.out.println(name + ":" + age);
	}
}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person("旺财", 12);

		p.speak();

	}

}
this也可以用于构造函数中调用其他构造函数, 但只能定义在构造函数的第一行因为初始化动作先执行

代码示例

class Person{
	private String name;
	private int age;
	
	
	Person(String n,int a){
		name=n;
		age=a;
	}
	
	//判断是否是同龄人
	public boolean compare(Person p){
		return this.age==p.age;
	}
}
public class ThisDemo {

	public static void main(String[] args) {
		Person p1=new Person("旺财",12);
		Person p2=new Person("小 强",12);
		
		
		boolean b=p2.compare(p1);
		System.out.println(b);
	}
	
}

7.static关键字

用于修饰成员变量和成员函数

被修饰的成员的特点:

        随着类的加载而加载

        优先于对象存在

        被所有对象共享

        可以直接被类名调用  格式: 类名.静态成员

        修饰的是共享数据,对象中存储的是特有数据

使用注意事项:

          静态方法只能访问静态成员,非静态方法既可以访问静态成员,又可以访问非静态成员

          静态方法不可以写this,super关键字

          主函数是静态

成员变量和静态变量的区别:

           a. 生命周期不同

                    成员变量随着对象的创建而存在,随着对象的被回收而释放

                    静态变量随着类的加载而存在,随着类的消失而消失

           b.调用方式不同

                     成员变量只能被对象调用

                     静态变量既可以被对象调用,也可以被类名调用

           c.别名不同

                     成员变量也称为实例变量

                     静态变量也称为类变量

           d.数据存储位置不同

                     成员变量存储在堆内存的对象中

                     静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

代码示例

class Person {
	private String name;
	static private String sex;

	Person(String name, String sex) {
		this.name = name;
		Person.sex = sex;
	}

	public void speak() {
		System.out.println(this.name + ":" + Person.sex);
	}
}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person("yilong", "male");

		p.speak();

	}

}

静态代码块

给类进行初始化

代码示例

class StaticCode {
	static int num;
	static {
		num += 10;
		System.out.println("haha");
	}

	static void show() {
		System.out.println(num);
	}
}

public class StaticDemo {

	public static void main(String[] args) {

		StaticCode.show();
	}

}

当类中有对象时,静态代码块、构造函数、构造代码块的执行顺序:

静态代码块>构造代码块>构造函数

8.单例设计模式

设计模式:解决问题的某种思想

单例设计模式:可以保证一个类在内存中的对象唯一性

步骤:

a.私有化该类构造函数

b.通过new在本类中创建一个本类对象

c.定义一个公有方法,将创建的对象返回

代码示例

class Single {//饿汉式 类一加载,对象就已经建立了
	private int num;
	static Single s = new Single();

	private Single() {
	}

	public static Single getInstance() {
		return s;
	}

	
	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}
}

public class SingleDemo {

	public static void main(String[] args) {
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();

		s1.setNum(1);
		s2.setNum(2);

		System.out.println(s1.getNum());
		System.out.println(s2.getNum());
	}

}
class Single {// 懒汉式 延迟加载形式, 类加载进来没有对象,只有调用getInstance方法时,才会创建对象
	private int num;

	private static Single s = null;

	private Single() {
	}

	public static Single getInstance() {
		if (s == null)
			s = new Single();
		return s;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}
}

public class SingleDemo {

	public static void main(String[] args) {
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();

		s1.setNum(1);
		s2.setNum(2);

		System.out.println(s1.getNum());
		System.out.println(s2.getNum());
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值