跟着IT彭于晏学JAVA之面向对象

1.什么是面向对象

面向过程:我应该干什么 重在过程  事务执行者
 * 挑选一个电脑(台式)
 * 1.挑一个cpu Intel Core i7
 * 2.挑一个主板  华硕
 * 3.挑一个显卡  七彩虹  影驰  9600GT
 * 4.挑一个显示器 
面向对象:重点在对象 我该找谁干什么  指挥者
 * 找一个懂电脑的人 帮你去买电脑
 * 更贴近人的思维(懒人思维)

2.面向对象的好处

面向对象的好处:
 * 1.把复杂的问题 简单化
 * 2.从事务的执行者 转化为 指挥者
 * 3.更贴近人的思维(懒人思想)

3.类与对象

类和对象
 * java中  最基本的单位 就是类
 * 类:对抽象事物的描述(模板)
 * 对象:用类创建出来的就是对象(具体的事物)

4.成员变量与局部变量的区别

成员变量 和 局部变量 区别 
  1.在类中位置不同:成员变量:在类中方法外。局部变量:在方法定义中或者方法声明上。

  2.在内存中的位置不同:成员变量:在堆内存。  局部变量:在栈内存。

  3.生命周期不同:成员变量:随着对象的创建而存在,随着对象的消失而消失。 局部变量:随着方法的调用而入栈,随着方法的调用完毕而消失。
  
  4.作用域 :  成员变量:整个类. 局部变量:方法中.

  5.初始化值不同:成员变量:跟堆内存中,有默认值初始化。局部变量:没有默认值初始化,必须定义,赋值,然后才能使用。

  6.注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 

5.创建不同包下的同名类

package com.lanou3g;

import com.lanou4g.Test;

public class Demo03 {
		public static void main(String[] args) {
			//创建一个Person对象
			Person p1 = new Person();
			p1.fun();
			
			//创建不同包下的同名类对象
			//需要指定完整的包名来创建对象
			//一般情况下:不建议写同名类
			com.lanou4g.Person p2 = new com.lanou4g.Person();
			p2.fun();
			
			//创建不包不同名的类
			Test test = new Test();
		}
}

6.参数是引用数据类型和数据是引用数据类型

public class Demo04 {
		//参数是基本数据类型
		public static  void fun1(int a) {
			System.out.println(a);
			a = 10;
			
		}
	   //参数是引用数据类型
		//要什么类型 就给什么类型
		public static void fun2(Person p) {
			p.name = "刘斌";
			p.age  = 24;
			
		}
		public static void main(String[] args) {
			int a = 100;
			fun1(a);
			System.out.println(a);
			
			Person p1 = new Person();
			p1.name = "凡鹏";
			p1.age = 28;
			fun2(p1);
			p1.sayHi();//打印的是刘斌 24.因为进行的是地址的传递
		}
}

不多说 上图!!!


不比比 再来一张


7.匿名对象

 匿名对象:没有名字的对象
 * 1.在方法传参数时使用
 * 2.只调用一下方法(不赋值的情况下)
public static void setNameAndAge(Person p, String name, int age) {
		p.name = name;
		p.age = age;
		p.sayHi();

	}

	public static void main(String[] args) {
		// 创建两个对象 并赋值
		// 将重复代码抽成一个方法
		Person p1 = new Person();
		p1.name = "wanglong";
		p1.age = 16;
		p1.sayHi();
		
		Person p2 = new Person();
		setNameAndAge(p2, "menglomg", 18);
		//使用匿名对象 当方法参数
		//好处:减少代码量
		setNameAndAge(new Person(), "kun", 20);
		//匿名对象 也是对象 也可以赋值属性 调用成员方法
		new Person().name = "xin";
		new Person().age = 30;
		new Person().sayHi();//打印结果是 null 0. 因为开辟的是三块区域
		//只调用方法可以使用匿名对象
		//测试方法的时候可能会使用
		new Person().fun();

				
	}

8.封装

封装
 * 写方法就是封装的一种
 * 隐藏代码的实现和属性 不能随意修改
 * 需要开发访问方式(方法)  获取 修改
 * 好处:
 * 1.提高代码的复用性
 * 2.提高代码的安全性

 私有的(权限修饰符)
 * private 私有的
 * 被private 修饰的属性 只能本类中访问

9.构造方法

构造方法:对对象的成员变量进行初始化
 * 写法:
 * 1.没有返回值类型(连void都不用写)
 *2.构造方法方法名 要与 类名 完全一致
//创建一个pen对象
		//构造方法 是系统帮你调用
		//只要你创建对象 系统就会帮你调用构造方法
		//构造方法只会执行一遍
		Pen pen = new Pen();
		pen.sayHi();
		
		//测试有参的构造方法
		//当你传参数 系统就会去找你有参的构造方法调用
		Pen p1 = new Pen("钢笔", "绿色");
		p1.sayHi();

10.创建一个标准的java bean 类

类中写什么?
		 * 成员变量
		 * 无参构造方法
		 * 有参构造方法
		 * 成员方法
		 * set/get方法

11.一个标准的Book类示范

public class Homework {
	public static void main(String[] args) {
		Book book = new Book();
		Book book2 = new Book("少年阿宾", 25);
		
		book.setName("平凡的世界");
		System.out.println("我是成员方法,这本书的名字是:"+book.getName());
		
	}
}
 class Book{
	 private String name;
	 private int price;
	 Book(){
		 this.name = "小王子";
		 this.price = 95;
		 System.out.println("我是Book类的无参构造方法,我的书名是:"+name+",我的价格是:"+price);
		 
		 
	 }
	 Book(String name,int price){
		 this.name = name;
		 this.price = price;
		 System.out.println("我是Book类的有参数构造方法,我的名字是:"+name+",我的价格是"+price);
	 }
	 public void read(){
		 System.out.println("我是成员方法,这本书的名字是:"+name);
	 }
	 public void setName(String name){
		 this.name = name;
	 }
	 public String getName(){
		 return name;
	 }

猜你喜欢

转载自blog.csdn.net/weixin_42120532/article/details/80245550
今日推荐