学习日志 Day 9

学习日志 Day 9

//2020年3月27日21:31:40 磊子

Java Day 8

  • 面向对象于面向过程
    面向对象思想: 面向对象是基于面向过程的编程思想。

    面向过程:强调的是每一个功能的步骤
    面向对象:强调的是对象,然后由对象去调用功能

面向对象的思想特点:
A:是一种更符合我们思考习惯的思想
B:可以将复杂的事情简单化
C:将我们从执行者变成了指挥者

举例:
买电脑:
面向过程:我要买电脑–我要明确买电脑的意义–上网查对应的参数信息–去中关村买电脑–讨价还价–买回电脑
面向对象:我要买电脑–班长去给我买电脑–买回电脑
洗衣服:
面向过程:把衣服脱下来–找一个盆–放点洗衣粉–加点水–浸泡10分钟–揉一揉–清洗衣服–拧干–晾起来
面向对象:把衣服脱下来–打开全自动洗衣机–扔衣服–按钮–晾起来

  • 类和对象
    我们学习编程语言,其实就是为了把现实世界的事物模拟出来,实现信息化。

我们是如何表示现实世界的事物的呢?
A:属性 就是事物的描述信息
B:行为 就是事物能够做什么
举例:学生

Java语言最基本的单位是类,所以,我们在后面的学习过程中,是通过类来体现现实世界事物的。

类:是一组相关的属性和行为的集合
对象:就是该事物的具体体现
举例:
类 学生
对象 班长

  • 类的定义
package com.itheima_02;
/*
 * 类的定义:
 * 		类是用来描述现实世界的事物的
 * 
 * 事物:
 * 		属性	事物的描述信息
 * 		行为	事物能够做什么
 * 
 * 类是如何和事物进行对应的呢?
 * 		类:
 * 			成员变量
 * 			成员方法
 * 
 * 需求:写一个学生类
 * 
 * 学生事物:
 * 		属性:姓名,年龄...
 * 		行为:学习,吃饭...
 * 
 * 学生类:
 * 		成员变量:姓名,年龄
 * 		成员方法:学习,吃饭
 *
 * 成员变量:和我们前面学习过的变量的定义是一样的。
 * 		位置不同:类中,方法外
 * 		初始化值:不需要给初始化值
 * 成员方法:和我们前面学习过的方法的定义是一样的。
 * 		去掉static关键字
 */
public class Student {
	//成员变量
	//姓名
	String name;
	//年龄
	int age;
	
	//成员方法
	//学习的方法
	public void study() {
		System.out.println("好好学习,天天向上");
	}
	
	//吃饭的方法
	public void eat() {
		System.out.println("学习饿了要吃饭");
	}
}
  • 学生类的使用
package com.itheima_02;
/*
 * Student是一个学生事物描述类,main方法不适合放在它里面。
 * 
 * 使用一个类,其实就是使用该类的成员。(成员变量和成员方法)
 * 而我们要想使用一个类的成员,就必须首先拥有该类的对象。
 * 我们如何拥有一个类的对象呢?
 * 		创建对象就可以了?
 * 我们如何创建对象呢?
 * 		格式:类名 对象名 = new 类名();
 * 对象如何访问成员呢?
 * 		成员变量:对象名.变量名
 * 		成员方法:对象名.方法名(...)
 */
public class StudentDemo {
	public static void main(String[] args) {
		//格式:类名 对象名 = new 类名();
		Student s = new Student();
		//System.out.println("s:"+s); //com.itheima_02.Student@193c0cf
		
		//直接输出成员变量值
		System.out.println("姓名:"+s.name); //null
		System.out.println("年龄:"+s.age); //0
		System.out.println("----------");
		
		//给成员变量赋值
		s.name = "林青霞";
		s.age = 28;
		
		//再次输出成员变量的值
		System.out.println("姓名:"+s.name); //林青霞
		System.out.println("年龄:"+s.age); //28
		System.out.println("----------");
		
		//调用成员方法
		s.study();
		s.eat();
	}
}

  • 一个对象的内存图
    在这里插入图片描述
  • 方法共用的内存图
    在这里插入图片描述
  • 两个引用指向同一个对象的内存图
    在这里插入图片描述
  • 成员变量和局部变量
package com.itheima_04;
/*
 * 成员变量和局部变量的区别:
 * 		A:在类中的位置不同
 * 			成员变量:类中,方法外
 * 			局部变量:方法中或者方法声明上(形式参数)
 * 		B:在内存中的位置不同
 * 			成员变量:堆内存
 * 			局部变量:栈内存
 * 		C:生命周期不同
 * 			成员变量:随着对象的创建而存在,随着对象的消失而消失
 * 			局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
 * 		D:初始化值的问题
 * 			成员变量:有默认值
 * 			局部变量:没有默认值。必须先定义,赋值,最后使用
 */
public class Variable {
	int x;//成员变量
	
	public void show() {
		int y = 0;//局部变量
		
		System.out.println(x);
		System.out.println(y);
	}
}
  • private关键字的用法
package com.itheima_05;
/*
 * 学生类
 * 
 * 通过对象直接访问成员变量,会存在数据安全问题
 * 这个时候,我们就想能不能不让外界的对象直接访问成员变量呢?
 * 能。
 * 如何实现呢?
 * 		private关键字
 * 
 * private:
 * 		是一个修饰符
 * 		可以修饰成员变量,也可以修饰成员方法
 * 		被private修饰的成员只能在本类中被访问
 * 
 * 针对private修饰的成员变量,我们会相应的提供getXxx()和setXxx()用于获取和设置成员变量的值,方法用public修饰
 */
public class Student {
	String name;
	//int age;
	private int age;
	
	public void setAge(int a) {
		if(a<0 || a>200) {
			System.out.println("你给的年龄有误");
		}else {
			age = a;
		}
	}
	
	public int getAge() {
		return age;
	}
	
	public void show() {
		System.out.println("姓名是:"+name+",年龄是:"+age);
	}
}



//类
package com.itheima_05;
/*
 * 学生类的测试类
 */
public class StudentDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s = new Student();
		s.show();
		
		s.name = "林青霞";
		//s.age = 28;
		//s.age = -28;
		//s.setAge(-28);
		s.setAge(28);
		s.show();
	}
}
  • this关键字的用法
package com.itheima_07;
/*
 * 学生类
 * 
 * 起名字我们要求做到见名知意。
 * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进。
 * 
 * 如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近的原则。
 * 
 * 我们有没有办法把局部变量的name赋值给成员变量的name呢?
 * 有。
 * 
 * 什么办法呢?
 * 		用this关键字就可以解决这个问题
 * 
 * this:代表所在类的对象引用
 * 		方法被哪个对象调用,this就代表那个对象
 * 
 * 使用场景:
 * 		局部变量隐藏成员变量
 */
public class Student {
	private String name;
	private int age;
	
	public void setName(String name) { //"林青霞"
		//name = name;
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void setAge(int age) {
		//age = age;
		this.age = age;
	}
	
	public int getAge() {
		return age;
	}
}
  • 构造方法
package com.itheima_08;
/*
 * 构造方法:
 * 		给对象的数据进行初始化
 * 
 * 格式:
 * 		方法名和类名相同
 * 		没有返回值类型,连void都不能写
 * 		没有具体的返回值
 * 
 * 构造方法的注意事项:
 * 		A:如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用。
 * 		B:如果我们给出了构造方法,系统将不在提供默认的无参构造方法供我们使用。
 *        这个时候,如果我们想使用无参构造方法,就必须自己提供。
 *        推荐:自己给无参构造方法
 *      C:构造方法也是可以重载的
 * 
 * 成员变量赋值:
 * 		A:setXxx()方法
 * 		B:带参构造方法	
 */
public class Student {
	private String name;
	private int age;
	
	/*
	public Student() {
		System.out.println("这是构造方法");
	}
	*/
	
	public Student() {}
	
	public Student(String name) {
		this.name = name;
	}
	
	public Student(int age) {
		this.age = age;
	}
	
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void show() {
		System.out.println(name+"---"+age);
	}
}


package com.itheima_08;

public class StudentDemo {
	public static void main(String[] args) {
		//如何调用构造方法呢?
		//通过new关键字调用
		//格式:类名 对象名 = new 构造方法(...);
		Student s = new Student();
		s.show();
		
		//public Student(String name)
		Student s2 = new Student("林青霞");
		s2.show();
		
		//public Student(int age)
		Student s3 = new Student(28);
		s3.show();
		
		//public Student(String name,int age)
		Student s4 = new Student("林青霞",28);
		s4.show();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值