【java初学】面向对象了解

面向对象

1. 面向对象
1.1 生活中的面向对象和面向过程
烤羊排:
	军力烧烤
        1. 组团到军力烧烤
        2. 排队
        3. 点烤羊排!!!
        4. 吃
        5. 结账 走人
	
	刘氏烤羊排制作流程
		1. 买羊排 宁夏盐滩羊
		2. 腌制 洋葱 姜片 孜然粉 盐 自来水 30分钟
		3. 冷水焯水 大葱 姜片 筷子可以扎透
        4. 预热烤箱 预热上下火210度 5分钟
        5,放入羊排 烤制20分钟 最后5分钟 放入洋葱 温度 ==> 190
        6. 盐 孜然粉 辣椒 
        7. 吃
        8. 收拾东西
       
红烧肉
	大塘
    	1. 带上你的对象(可能没有)去大塘
    	2. 点菜 红烧肉 招牌炒饭 蒜蓉西兰花
    	3. 吃
    	4. 结账 走人
    
    刘氏红烧肉制作流程
    	1. 买五花肉 一斤半
    	2. 用铁锅烙皮
    	3. 钢丝球洗肉
    	4. 2cm一块
    	5. 焯水 料酒 小葱 姜片 
		6. 炒糖色
		7. 炒制 上色 桂皮 八角 香叶 花椒 姜片 
		8. 加啤酒,两罐 加老抽 生抽 耗油 葱段
		9. 30分钟 小火 小料挑出来 加盐
		10. 20分钟 3分钟大火收汁
		11. 吃
		12. 收拾东西

生活中的
	面向对象
		找合适的人,做合适的事
	面向过程
		自力更生,丰衣足食,亲力亲为
1.2 类和对象
对象
人类马云爸爸,麻花藤,乔布斯Jobs,雷布斯,王校长
狗类王可可,锅碗瓢盆,忠犬八公,哮天犬
猫类Tom,黑猫警长,虹猫,蓝猫,加菲猫,哆啦A梦
羊类喜羊羊,美羊羊,懒羊羊,沸羊羊,慢羊羊,暖羊羊
超级英雄孙悟空,钢铁侠,绿巨人,奇异博士,鹰眼,寡姐
类
	是对于一类事物的统称,可以描述当前【事物的属性】和【行为】

对象
	独立的,特殊的,唯一的个体
1.3 Java中定义类的格式
class 类名 {
	属性描述【成员变量 Field】
	行为描述【成员方法 Method】
}

属性描述【成员变量】
	是用于描述当前类对应的个体有什么属性,这里没有明确的数据,只是用于告知当前类对
	应的个体有哪些数据内容。

class Person {
	// 属性描述【成员变量 Field】
	/**I
	* id是int类型,描述当前Person类id属性
	*/
	int id;
	
	/**
	* name是String类型,字符串。描述当前Person类name属性
	*/
	String name;
	
	/**
	* age是int类型,描述当前Person类的age属性
	*/
	int age;
	
	// 行为描述【成员方法 Method】
	/**
	* Person类内的eat方法,用于描述Person类的吃饭行为
	*
	* @param food 字符串类型,确定今天中午吃什么
	*/
	public void eat(String food) {
		System.out.println("中午吃" + food);
	}
	
	/**
	* Person类内sleep方法,用于描述Person类睡觉行为
	*/
	public void sleep() {
		System.out.println("说出来,你可能不信,是床先动的手");
	}
	
	/**
	* Person类内的game方法,用于描述Person类型游戏行为
	*
	* @param gameName String类型参数,是传入对应的游戏名
	*/
	public void game(String gameName) {
		System.out.println("玩" + gameName);
	}	
}
1.4 Java中创建对象的方式[new 对象]
比葫芦画瓢
	Scanner sc = new Scanner(System.in);
	Scanner 
		数据类型 Scanner类 Java中的扫描器类
	sc 
		Scanner的变量,Scanner类对象,同时也是引用数据类型变量变量
	new
		1. 跟系统申请一块内存【堆区】空间
		2. 将该空间的所有数据全部清除
	Scanner()
		Scanner【构造方法 Constructor】
		用于和new关键字联用,创建对象,构造方法方法名要求和类名一致

格式:
	类名 对象名 = new 构造方法();
    				类名();
/*
这里创建了一个Person类对象,对象名p1
Java中的类名是首字母大写,变量名和方法名是首字母小写
*/
Person p1 = new Person();

/*
Person@15db9742
	Person是数据类型,当前p1是Person类对象
	@表示当前对象在哪里
	15db9742 是当前Person类对象在内存【堆区】首地址
*/
System.out.println(p1);
1.5 通过类对象操作使用类内的成员变量
比葫芦画瓢
	int[] arr = new int[10];
	arr.length 获取数组的容量
	. ==> 的

格式:
	通过类对象操作成员变量
	类对象.成员变量名字
/* 通过Person类对象p1操作使用类内的成员变量 */
p1.id = 1;
p1.name = "骚磊";
p1.age = 16;

System.out.println("ID : " + p1.id + " Name : " + p1.name + " Age : " + p1.age);
1.6 通过类对象操作使用类内的成员方法
比葫芦画瓢
	Scanner sc = new Scanner(System.in);
	sc.nextInt();
	sc.nextFloat();	
	通过Scanner类对象sc调用类内的成员方法

格式:
	类对象.成员方法();
/* 通过Person类对象p1操作使用类内的成员方法 */
p1.eat("鲱鱼罐头");
p1.sleep();
p1.game("狼人杀");	
1.7 类对象内存分析图【重点】

在这里插入图片描述

2. 构造方法[没有不行,有了难受]
2.1 编译器自动补齐无参数构造方法演示[了解]
构造方法:
	类名(初始化参数);

	目前在代码中并没有显式定义无参数构造方法,但是代码的确可以使用一个无参数构造方法,哪里来的???
	通过反编译工具来看代码
		javap -c -l -private Person.class

在这里插入图片描述

	Java代码中如果没有显式自定义构造方法,Java编译器会在编译代码的过程中,自动完成一个无参数构造方法,供程序员使用。
2.2 构造方法格式和功能介绍
格式:
	public 类名(初始化参数) {
		初始化语句;
	}
	
	初始化参数 
		大多数情况下是和需要进行创建对象过程中赋值初始化的成员变量有关。
	初始化语句
		就是针对当前类内的成员变量,进行一个赋值操作
2.3 构造方法和成员方法区别
1. 功能
	构造方法用于初始化成员变量,或者其他初始化操作。
	成员方法只做功能性实现。

2. 格式区别
	构造方法没有返回值类型声明,并且构造方法有且只能是类名。
	成员方法必须有返回值类型声明,强制要求成员方法不得使用类名。

3. 使用要求
	构造方法无论什么情况下,必须提供一个无参数构造方法备用。
	成员方法根据实际需求来完成对应的成员方法。
3. 面向对象学习要求
1. 代码一定足够多,格式一定标准,注释一行不能少
2. 你需要掌握
	a. 如何定义一个类
	b. 如何创建一个类的对象
	c. 如何通过类对象调用成员方法,成员变量
	d. 学会代码中需要什么,就给什么
		例如:
			一个代码需要的数据类型是Person类型,你就给他Person类对象
			一个代码需要的数据类型是Student类型,你就给他Student类对象
			【数据类型一致化要求】
4. 作业
十二生肖
	1. 一个类对应一个文件
	2. 一个类内最少3个或者3个以上成员变量,并且12生肖成员变量不得重复
	3. 一个类内最少3个或者3个以上构造方法,强制要求必须有一个无参数构造方法
	4. 一个类内最少3个或者3个以上成员方法,强制要求最少一个方法带参数,一个方法带返回值。
	5. 需要使用所有的构造方法,创建对象,并且调用成员变量,成员方法,运行编译通过。
/**
* 自定义Cat类
*/
class Cat {
	/**
	* name属性,数据类型是String类型
	*/
	String name;
	
	/**
	* color属性,数据类型是String类型
	*/
	String color;
	
	/**
	* age属性,数据类型是int类型
	*/
	int age;
	
	/**
	* 无参数构造方法,【强制要求,必须有】
	*/
	public Cat() {}
	
	/**
	* 初始化name属性的构造方法
	*
	* @param n String类型数据,用于初始化name属性
	*/
	public Cat(String n) {
		name = n;
	}
	
	/**
	* 初始化name属性,color属性和age属性的构造方法
	*
	* @param n String类型数据,用于初始化name属性
	* @param c String类型数据,用于初始化color属性
	* @param a int类型数据,用于初始化age属性
	*/
	public Cat(String n, String c, int a) {
		name = n;
		color = c;
		age = a;
	}
	
	/**
	* 睡觉行为描述方法
	*/
	public void sleep() {
		System.out.println("据统计,猫每天睡18个小时");
	}
	
	/**
	* 获取Cat类对象age成员变量数据
	*
	* @return 返回Cat类对象age成员变量数据
	*/
	public int getAge() {
		return age;
	}
	
	/**
	* Cat类对象eat东西方法
	*
	* @param food String类型参数,吃什么食物
	*/
	public void eat(String food) {
		System.out.println("吃" + food);
	}
}

class Demo3 {
	public static void main(String[] args) {
		// 无参数构造方法调用
		Cat cat = new Cat();
		
		cat.name = "Tom";
		cat.color = "蓝色";
		cat.age = 30;
		
		System.out.println("Name: " + cat.name + " Color:" + cat.color + " Age:" + cat.age);
		
		cat.sleep();
		int age = cat.getAge();
		System.out.println("Cat.age : " + age);
		cat.eat("生肉");
		
		// 一个参数构造方法调用
		// 三个参数构造方法调用
	}
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值