Java面向对象学习笔记

面向冰箱的概念

面向过程:

(1)      打开冰箱

(2)      存储冰箱

(3)      关闭冰箱

面向过程主要是强调过程,过程就是动作,动作就是功能。函数,我们之前学的编程就是面向过程。C语言就是面向过程的语言。

面向对象强调的是对象,只要找到这个对象,并且它具备所需功能,我们就可以指挥对象去做事情。

面向对象的语言:JAVA,C++,C#

面向对象的特点:

(1)      更符合人们的思考习惯的思想

(2)      将复杂的问题简单化

(3)      将面向过程的执行者转换成了指挥者

举例:

1组装电脑,找一个懂行的人去做。

2.去餐厅吃饭,对象有服务员(点菜的功能)和厨师(做菜的功能)

面向过程没有被淘汰,只是被封装在某个对象的身上,我们只要找到这个对象,他就具备这样的功能。

3.找对象

以后我们做事情的时候,为了提高效率,先找到解决我们这个问题的对象。

4.冒泡排序

5.面试的时候:你是怎么理解面向对象的?

(1)      面向对象的特点:1,2,3

(2)      举例:面试官也在用面向对象的思想来思考问题(一个项目从前期的需要分析,设计,开发,测试,您一个人是可以完成的,但是这样会效率很低,所以你找一个具备这些功能的对象,来指挥对象完成这些事情)。

 

完成一件事情:

分析当中存在的对象有哪些,不关注问题中所涉及的动作有哪些。

解决问题:尽量找具备这个功能的对象来完成。如果没有这样的对象,我们就创建有这项功能的对象,不断地维护对象与对象之间的关系。

这样做可以简化开发,并提高复用性。

 

         怎么确定需要哪些对象?

         举例:人开门

(1)      名词体现法。

(2)      那个对象最清楚这个动作,就把方法定义在该对象的身上

         面向过程:功能都封装在函数中

         面向对象:功能都封装在对象中,对象之间可以相互调用

 

         面向对象的三个基本特征:

1.      封装

2.      继承

3.      多态

 

面向对象的开发,设计,特征:

开发的过程,其实就是在不断的创建对象,使用对象,指挥对象做事情。

设计的过程,其实就是在管理和维护对象与对象之间的关系。

类和对象的关系

用java语言描述现实世界中的事物,是通过类的形式来体现的。

怎么描述?对于事物的描述只关注两方面1.属性,2.行为

         什么是类?

         类是对事物的描述、

         什么是对象?

         对象就是该类事物实实在在存在的个体。在Java中用new 关键字来创建对象的。

 

         定义类其实就是在定义类中的成员(成员变量-属性;成员方法-行为)。

成员:事物的组成部分。

成员变量:定义在类中,它的作用域最大,在整个类中都有效。

局部变量:定义在方法中或者代码块中。它的作用域:它所在的方法或者代码块中有效。

class Car{
	int num;
	String color;
	void run(){
		System.out.print(num+"......"+color);
	}
}
public class Test {

	public static void main(String[] args) {
		Car c = new Car();//用new关键字来创建对象的,C是一个类类型的引用变量,指向该类型的一个变量
		c.num = 4;
		c.color = "红色";//调用一个对象的内容用 对象。成员
		c.run();
	}

对象在内存中的存放

public static void main(String[] args) {
		Car c1 = new Car();//用new关键字来创建对象的,C是一个类类型的引用变量,指向该类型的一个变量
		Car c2 =new Car();
		c1.num = 10;
		c2.color = "red";
		c1.run();
		c1 = null;
		c1.num = 9;
		c1.run();
	}

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

1.  成员变量:定义在类中,它的作用域最大,在整个类都有效

2.  局部变量:是定义在方法中或者代码块中,它的作用域:它所在的方法或者代码块。

3.  成员变量是存在对内存中的对象中;局部变量存在在栈内崔中的方法中。

4.  成员变量是随着对象的创建而存在的,随着对象的消失而消失。局部变量是随着所属区域的执行而存在的,随着所属区域的结束而释放。

5.  成员变量是有默认的初始化的值;局部变量没有默认的初始化值。

1.4成员变量与局部变量
class Car{
	int num;
	String color;
	void run(){//方法是在栈中运行
		int sum = 10;//这个num是在栈内存中重新申请了一块地址
		System.out.print(num+"......"+color);//num的值为10
	}
}
public class Test {

	public static void main(String[] args) {
		Car c1 = new Car();//用new关键字来创建对象的,C是一个类类型的引用变量,指向该类型的一个变量
		c1.num = 18;
		c1.run();
	}

}
 class Care{
	int num;
	String color;
	
	public void show(Care c) {
		c.num = 4;
		c.color = "red";	
	}		
	void run() {
		System.out.print(num+"......"+color);
		}
}
public class Test1 {

	public static void main(String[] args) {
		Care c1 = new Care();//用new关键字来创建对象的,C是一个类类型的引用变量,指向该类型的一个变量
		c1.show(c1);
		c1.run();
	}

}
匿名对象

/**

        * 匿名对象:没有名字的对象

        *c.run();

        *

        *new Car();//没有的名字对象

        *new Car().run();

        *1.当对象对方法进行一次调用的时候,就可以简化成匿名对象。

        *2.匿名对象可以作为实际参数来传递

        */

封装

是指隐藏事物的属性和实现细节,仅对外提供公共的访问方式。

好处:提高安全性;将变化隔离;便于使用;提高重用性;

封装原则:

将不需要对外提供的内容都隐藏起来;

把属性都隐藏起来,提供公共的方法对其进行访问;。

package C101_封装;

class Preson {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age > 0 && age < 130){
			this.age = age;
		}else{
			System.out.print("年龄错误");
		}
	}
	private int age;//private 是权限修饰符  ,私有,只能在本类中被访问
	
	public void updateAge(int a){
		if(a > 0 && a < 130){
			age = a;
		}else{
			System.out.print("不合法的年龄");
		}
	}
	void speak(){
		System.out.print(name+"..."+age);
	}
}
public class TestPreson{
	public static void main(String[] args) {
		Preson p = new Preson();
		p.setName("小明");
		p.setAge(18);
		System.out.print(p.getName()+"的年龄是"+p.getAge());
	}

}

封装的步骤:

1.  修改属性的可见性:设为privaye,防止错误数据的修改;

2.  创建公有的get/set方法,用于属性的读写;

3.  在get/set方法中加入属性控制语句,对属性的合法性进行判断;


package C101_封装宠物;

class Dod {
	private String name;
	private String sex;
	private int health;
	private int love;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getHealth() {
		return health;
	}
	public void setHealth(int health) {
		if (health > 0 && health < 100) {
			this.health = health;
		} else {
			System.out.println("健康值应该在0-100之间,默认值为60");
			this.health = 60;
		}
	}
	public int getLove() {
		return love;
	}
	public void setLove(int love) {
		if (love > 0 && love < 100) {
			this.love = love;
		} else {
			System.out.println("亲密度应该在0-100之间,默认值为60");
			this.love = 60;
		}
	}
	public void speak() {
		System.out.println("我的姓名是" + this.getName() + ",健康值是"
				+ this.getHealth() + ",和主人的亲密程度是" + this.getLove() + ",我的性别是"
				+ this.getSex());
	}
}
Private

是一个权限修饰符。

用于修饰方法(成员变量和成员函数)

被私有化的成员只有在本类中有效。

 

常用之一:

将成员变量私有化,对外提供get/set方法

方法对其进行访问,提高数据访问的安全性
package C101_构造方法;

public class TestPerson {
	/*
	 * 构造方法:名称和类名相同,是创建对象是调用的方法。
	 *  作用:可以给对象进行初始化 创建对象是都必须通过构造函数来初始化
	 * 
	 * 一个类中如果没有定义构造方法,那么该类中就会有一个默认的空参数的构造方法。
	 * 如果一个类中定义了构造函数,那么类中的默认构造函数就没有了。
	 * 
	 * 一般函数和构造函数有什么区别?
	 * 构造函数:当对象创建时就会调用与之对应的构造函数,对对象进行初始化。
	 * 一般函数:对象创建后,需要函数功能时才被调用。
	 * 
	 * 构造函数:对象创建时只被调用一次。
	 * 一般函数:对象创建后可以被调用多次。
	 * 
	 * 什么时候定义构造函数呢?
	 * 在描述事物时,该事物一存在就具备一些内容,这些内容都定义在构造函数中。
	 * 构造函数可以有多个,用于对不同的对象进行针对性的初始化。
	 * 多个构造函数在类中是以重载的形式来体现的。	
	 *  
	 *  细节:
	 *  1.一般函数不能直接调用构造函数。
	 *  2.构造函数如果前面加了void就变成了一般函数。
	 *  3.构造函数中是有return语句的。
	 *  4.构造函数如果完成了set功能,set方法还是需要的。
	 *  */
	public static void main(String[] args) {
		Person p = new Person();
		p.speak();
	}

}

this关键字

package C101_this关键字;

/*
 * 当成员变量跟局部变量重名时可以用this来区分
 * this代表对象,代表哪个对象?当前对象。
 * 什么叫当前对象,this就是所在方法所属对象的引用
 * 简单的说哪个对象调用了this所在的方法,this就代表哪个对象。
 * 
 * this只能在方法内部使用,表示调用方法的那个对象的引用。
 * 在方法内部调用同一个类的另一个方法就不必使用this,直接调用就好了,当前方法中
 * 的引用会自动应用到同一类中的其他方法
 * 
 * 当要返回当前方法的引用是常用return this
 * 
 * 在构造器中调用构造器用this(),它只能定义在构造函数的第一行,因为初始化动作要优先。
 */
class Persons {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	void speak(){
		System.out.println(name);
	}
}
public class PersonDemo{
	public static void main(String[] arge){
		Persons p = new Persons();
		Persons p1 = new Persons();
		p.setName("小强");
		p1.setName("张三");
		p.speak();
		p1.speak();
	}
}

static关键字

package C101_static关键字;
/*
 * 1.static修饰符,修饰成员变量和成员函数,被对象共享。
 * 2.共享数据出现在对象之前,没有对象是可以被类名调用。
 * 
 * static特点:
 * 1.是一种修饰符,用来修饰成员。
 * 2.修饰的成员被所有的对象所共享。
 * 3.static优先于对象存在,因为static的成员随着类的加载而加载,随着类的消失而消失。
 * 4.static修饰的成员多了一种调用方法,可以直接被类名调用。(类名.静态成员)
 * 5.static修饰的是共享数据,对象中存储的是特有数据。
 * 
 * 成员变量和静态变量的区别:
 * 1.两个变量的生命周期不同:
 *   成员变量随着对象的创建而存在,对着对象的回收而释放。
 *   静态变量随着类的加载而加载,随着类的消失而消失。
 * 2.调用方式不同:
 *   成员变量只能被对象调用。
 *   静态变量可以被类名和对象调用。
 * 3.别名不同:
 *   成员变量也称为实例变量。
 * 	   静态变量也被称为类变量。
 * 4.存储位置不同:
 * 	   成员变量存储在堆内存的对象中。
 *   静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
 *   
 * 静态成员在使用中的细节:
 * 1.静态方法只能访问静态成员。非静态方法既可以访问静态成员又可以访问非静态成员。
 * 2.静态方法中不能使用this关键字或者super关键字。
 * 3.主函数就是静态方法。
 */
class Person{
	private String name;
	static String country = "CN";
	
	public void show(){
		System.out.print(country+"..."+name);
	}
}
public class TestPerson {

	public static void main(String[] args) {
		Person p = new Person();
		System.out.println(p.country);
		System.out.println(Person.country);
	}

}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值