超牛牪犇Java之面向对象

一.

面向过程:我应该干什么 重在过程 事物的执行者

面向对象:重点在对象 我该找谁干什么 指挥者

面向对象的好处:

1.将复杂问题简单化

2.从事务的执行者转化为事务的指挥者

3.更贴近人的思维(懒人思维)

类和对象:

java中最基本的单位就是类

类:对抽象事物的描述(可理解为模板)

对象:用类创建出来的就是对象(具体的事物)

public static void main(String[] args) {
		//创建一个学生类的对象
		//类名 对象名 = 初值;
		//成员变量会随对象一起进入堆中
		//并且只要new一次就会在堆中开辟一块内存空间
		//Student stu 对象的引用(保存的对象的地址)
		Student stu = new Student();
		//使用 对象名.属性名 进行赋值和取值
		stu.name = "IT吴彦祖";
		stu.age = 22;
		stu.gender = "男";
		
		//调用成员方法 对象名.方法名()
		stu.eat();
		stu.playGame();
		//哪个对象调用该方法 打印的就是那个对象的属性
		stu.sayHi();
}

eg:学生类:

class Student{
	//属性(成员变量 实例变量) 
	//书写位置:类中方法外
	//行为(方法 函数) 跟函数一样 就static先不写
	//书写位置:类中
	//思考 没有给成员变量初值 成员变量 有没有值?
	String name;
	int age;
	String gender;
	
	
	//成员方法/实例方法
	public void eat() {
		System.out.println("吃饭");
	}
	public void sleep() {
		System.out.println("睡觉");
	}
	public void playGame() {
		System.out.println("打游戏");
	}
	public void sayHi() {
		System.out.println("姓名"+ name );
		System.out.println("性别"+ gender );
		System.out.println("年龄"+ age );
	}
}

二.

成员变量 和 局部变量

1.书写位置

成员变量:类中 方法外

局部变量:方法中或方法上(在方法上即参数部分的变量)

2.在内存中的表现

成员变量:堆内存中

局部变量:栈内存中

3.生命周期

成员变量:随着对象进入堆内存中创建 随着对象销毁而销毁

局部变量:随着方法的调用而入栈 随着方法的结束而销毁

4.作用域

成员变量:整个类中

局部变量:方法中

5.初始值

成员变量:和堆内存一样 默认初始值

局部变量:默认没有初始值 不给初值直接编译报错

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();
	}

三.参数的类型

1.参数是基本数据类型

public static void fun1(int a) {
		System.out.println(a);
		a = 10;
	}

2.参数是引用数据类型

要什么类型就给什么类型

public static void fun2(Person p) {
		p.name = "Naruto";
	}

在main函数中调用

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();
	}

四.匿名对象

匿名对象即没有名字的对象

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对象 并赋值
		//将重复代码 抽成一个方法
		Person p1 =new Person();
		p1.name = "Naruto";
		p1.age = 16;
		p1.sayHi();
		
		Person p2 =new Person();
		p2.name = "Sakura";
		p2.age = 18;
		p2.sayHi();
		
		setNameAndAge(p2, "辰", 17);
		
		//使用匿名对象 当方法参数
		//好处:减少代码量 使用方便
		setNameAndAge(new Person(), "haha", 20);
		//匿名对象也是对象 也可以复制属性 调用成员方法
		new Person().name = "xxx";
		new Person().age = 30;
		new Person().sayHi();
		//只调用方法可以使用匿名对象
		//测试方法时  可能会使用
		new Person().fun();
	}

五.封装

写方法就是封装的一种

相当于隐藏代码的实现和属性 不能随意修改

需要开放访问方式(方法) 获取 修改

好处:

1.提高代码的复用性

2.提高代码的安全性

关键字(权限修饰符):private

被private 修饰的属性 只能在本类中访问

//java bean对象(java 的实体类 创建出来的对象)

1.声明成员变量 都需要私有化

2.给每一个成员变量提供set 和 get方法

3.必须提供无参的构造方法

class Phone{
	private String phoneName;
	private String color;
	//对外开放访问方式
	//获取方法
	//命名规范
	//获取 get + 成员变量名(首字母大写)
	//修改 set+ 成员变量名(首字母大写)
	//标准写法 set方法是没有返回值的
	public String getPhoneName() {
		return phoneName;
	}
	//修改方法(设置方法)
	public void setPhoneName(String phoneName) {	
		//关键字 this 代表的是本类的对象
		//this.成员变量 获取本类的成员变量
		//this.成员方法 调用本类的成员方法
		this.phoneName = phoneName;
		//谁调用了这个方法 谁就是this	
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public void sayHi() {
		System.out.println(phoneName + "" + color);
	}
}

六.构造方法

对对象的成员变量进行初始化

写法:

1.没有返回值类型的位置(连void都不用写)

2.构造方法方法名要与类名完全一致

创建一个pen类

类中的书写顺序:

1.成员变量

2.构造方法

3.成员方法

4.set/get方法

class Pen{
	private String name;
	private String color;	
	//构造方法(无参)
	public Pen () {
		//初始化成员变量(给成员变量赋值)
		this.name = "圆珠笔";
		this.color = "绿色";
		System.out.println("我是Pen类的无参构造方法");
	}
	//构造方法(有参)(构造方法的重载)
	//为了在创建对象的同时 给成员变量赋值
	public Pen(String name,String color){
		this.name = name;
		this.color = color;
		System.out.println("我是有参的构造方法");
	}
			
	//介绍自己的方法
	public void sayHi() {
		//使用this可以区分成员变量和局部变量
		System.out.println(this.name + " " + this.color);
	}
		
	//set/get 方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
}

在main函数中创建一个pen对象

构造方法是系统帮你调的

只要创建对象 系统就会帮你调用构造方法

构造方法只会执行一遍

public static void main(String[] args) {
		Pen p = new Pen();
		p.sayHi();
		//测试有参的构造方法
		//你传参数系统就会去找你有参的构造方法调用
		Pen p1 = new Pen("钢笔", "蓝色");
	}
/*
		 * 类中写什么?
		 * 成员变量
		 * 无参构造方法
		 * 有参构造方法(有没有都可以)
		 * 成员方法
		 * set/get方法
		 */

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值