面向对象个人笔记

面向对象:

一、人把大象装进冰箱的
面向过程(pop):强调的是功能行为,以函数为最小单位,考虑怎么做。
1.把冰箱门打开

2.抬起大象,塞进冰箱

3.把冰箱门关闭
面向对象(oop):扯调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

人{

打开(冰箱){}

抬起(大象){}

关闭(冰箱){}

}



冰箱{

开门(){}

关门(){}

}

大象{

能够进入(冰箱){}

}

面向对象的两个要素:

类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)

面向对象程序设计的重点是类的设计

设计类,就是设计类的成员。

属性=成员变量= field =域、字段

方法=成员方法=函数=method

创建类的对象=类的实例化=实例化类|

二、类和对象的使用(面向对象思想落地的实现):

1.创建类,设计类的成员
2.创建类的对象
3.通过"对象.属性或对象.方法"调用对象的结构

//测试类
public class demo {
   
	//main方法提供测试入口
	public static void main(String[] args) {
   
		//创建Person类的对象
		Person p1=new Person();
		//调用对象的属性(对象.属性)
		p1.name="Tom";
		p1.isMale=true;
		System.out.println(p1.name);
		System.out.println(p1.isMale);
		System.out.println(p1.age);
				
		//调用对象的方法(对象.方法)
		p1.eat();
		p1.sleep();
		p1.talk("中文");
	
	}
}

class Person{
   
	//属性:
	String name;
	int age=1;
	boolean isMale;
	
	//行为,方法
	public void eat() {
   
		System.out.println("人可以吃东西");
	}
	public void sleep() {
   
		System.out.println("人可以睡觉");
	}
	public void talk(String langu) {
   
		System.out.println("人可以交流:"+langu);
	}		
}

运行结果:
在这里插入图片描述

三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)

意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

四:类中属性的应用
/*
* 类中属性的使用
*
*属性(成员变量)vs局部变量
*1.相同点:
*	1.1定义变量的格式:数据类型变量名=变量值
*	1.2先声明,后使用
*	1.3变量都有其对应的作用域
*
*2.不同点:
*	2.1在类中声明的位置的不同
*	属性:直接定义在类的一对{0}内
*	局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
*
*	2.2关于权限修饰符的不同
*	属性:可以在声明属性时,指明其权限,使用权限修饰符。
*	常用的权限修饰符:private. public、缺省、protected
*	局部变量:不可以使用权限修饰符
*
*	2.3默认初始化值的情况:
*		属性:类的属性,根据其类型,都有默认初始化值。
*		整型(byte. short. int、long) : 0
*		浮点型(float. double) : 0.0
*		字符型(char) : (0或'\lue000 ')
*		布尔型(boolean): false
*		引用数据类型(类、数组、接口): null
*	
*	局部变量:没有默认初始化值。
*		意味着,我们在调用局部变量之前,一定要显式赋值。
*		特别地:形参在调用时,我们赋值即可。
*
*	2.4在内存中加载的位置:
*	属性:加载到堆空间中(非static)
*	局部变量:加载到栈空间
*/
public class UserTest {
   
	public static void main(String[] args) {
   
		User u1=new User();
		System.out.println(u1.age);  //结果是:0
		System.out.println(u1.name); //结果是:null
		System.out.println(u1.isMale); //结果是:false
		
		u1.talk("中文"); //打印结果:我们使用中文进行交流
		u1.eat(); //打印结果:北方人爱吃烙饼
	}
}
//属性(成员变量)
class User{
   
	String name;
	int age;
	boolean isMale;
	
	public void talk(String language) {
   //language:形参,也是局部变量
		System.out.println("我们使用"+language+"进行交流");
	}
	
	public void eat() {
   
		String food="烙饼";
		System.out.println("北方人爱吃"+food);
	}
}
类中方法的声明和使用
*
*	方法:描述类应该具有的功能。
*	比如:Math:sqrt() \random() \...
*		scanner类:nextXxx() ...
*		Arrays: sort() \ binarySearch() \ toString() \ equals()
*
*	1.举例:
*	public void eat(){
   } //void无返回值的意思
*	public void sleep(int hour){
   }
*	public String getName(){
   }
*	public String getNation (String nation){
   }
*	
*	2.方法的声明:权限修饰符   返回值类型  方法名(形参列表){
   
*						方法体
*		}
*	3.说明:
*		3.1关于权限修饰符:默认方法的权限修饰符先都使用public
*		Java规定的4种权限修饰符:private.public、缺省、protected-->封装性再绍细讲
*
*		3.2返回值类型:有返回值vs没有返回值
*			3.2.1如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用
*					return关键字来返回指定类型的变量或常量。"return 数据"
*					如果方法没有返回值,则方法声明时,使用void来表示。
*					通常,没有返回值的方法中,就使用return.但是,如果使用的话,
*					只能"return;"表示结束此方法的意思。
*			3.2.2我们定义方法该不该有返回值?
*					题目要求
*					凭经验:具体问题具体分析
*		3.3 方法名:属于标识符,遵循标识符的规则和规范,"见名知意"
*		3.4 形参列表:方法可以声明0个,1个,或多个形参。
*				3.4.1格式:数据类型1形参1,数据类型2形参2,...
*				3.4.2是否需要形参
*				①题目要求
*				②凭经验:具体问题具体分析
*		3.5方法体:方法功能的实现
*/
类的设计课后练习题:
/*
 * 要求:
 * (1)创建Person类的对象,设置该对象的name、age和sex属性,
 * 调用study方法,输出字符串“studying”,
 * 调用showAge()方法显示age值,
 * 调用addAge()方法给对象的age属性值增加2岁。
 * (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
 *
 */
public class PersonTest {
   
	public static void main(String[] args) {
   
	Person p1=new Person();
	p1.name="Tom";
	p1.age=18;
	p1.sex=1;
	p1.study();
	p1.showaAge();
	int newage=p1.addAge(2);
	System.out.println(p1.name+"的新年龄为"+newage);
	System.out.println(p1.age);
	
	System.out.println("***********************");
	Person p2=new Person();
	p2.showaAge(); //打印结果是0
	p2.addAge(10);//给加上10岁
	p2.showaAge();//打印结果为10岁
	}
}

class Person{
   
	String name;
	int age;
	/**
	 * sex:1是男性,0是女性
	 */
	int sex;
	
	public void study() {
   
		System.out.println("studying");
	}
	public void showaAge() {
   
		System.out.println("age:"+age);
	}
	public int addAge(int i) {
   
		age+=i;
		return age;
	}
}

运行结果:

在这里插入图片描述

/*
 * 2.利用面向对象的编程方法,设计类Circle计算圆的面积。
 */
public class CircleTest {
   
	public static void main(String[] args) {
   
		Circle cl=new Circle();
		//方式1
//		double mj=cl.js(2);
//		System.out.println("面积为:"+mj);
		
		//方式2
		cl.radius=2;
		cl.js();
	}
}
class Circle{
   
	//属性:半径
	double radius;
	
	//方法:求圆的面积
	//方式1:有返回值
//	public double js(double r) {
   
//		double mj = 3.14*r*r;//3.14可以写成Math.PI
//		return mj;
//	}
	
	//方式2:无返回值
	public void js() {
   
		double mj1 = 3.14*radius*radius;//3.14可以写成Math.PI
		System.out.println("圆的面积为:"+mj1);
		
	}
}
/*
 * 3.1编写程序,声明一个method方法,在方法中打印一个10*8的*型矩形,在main方法中调用该方法()
 * 3.2修改上一个程序,在method方法中,除打印一个10*8的*型矩形外,再计算该矩形的面积,
 * 并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
 * 
 * 3.3修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,
 * 并计算该矩形的面积,将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
 * 
 */
public class Exer3Test {
   
		public static void main(String[] args) {
   
			Exer3Test test=new Exer3Test();
			//3.1的测试
			//test.method();
			
			//3.2的测试
//			int mj=test.method();
//			System.out.println("面积为:"+mj);
			
			//3.3测试
			int mj1=test.method(5, 4);
			System.out.println("面积为:"+mj1);
		}
		/*3.1
		public void method() {
			for(int i=0;i<10;i++) {
				for(int j=0;j<8;j++) {
					System.out.print("* ");
				}
				System.out.println();
			}
		}
		*/
		
		/*3.2
		public int method() {
			for(int i=0;i<10;i++) {
				for(int j=0;j<8;j++) {
					System.out.print("*");
				}
				System.out.println();
			}
			return 10*8;
		}
		*/
		/*3.3
		public int method(int m,int n) {
			for(int i=0;i<m;i++) {
				for(int j=0;j<n;j++) {
					System.out.print("*");
				}
				System.out.println();
			}
			return m * n;
		}
		*/
}

3.1的测试结果:

在这里插入图片描述

3.2的测试结果:

在这里插入图片描述

3.3的测试结果:

在这里插入图片描述

方法的重载:
/*
 * 方法的重载(overload) loading...
 * 1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
 * 		"两同一不同":同一个类、相同方法名
 * 					参数列表不同:参数个数不同,参数类型不同
 * 
 * 
 * 	2.举例:Arrays类中重载的sort() / binarySearch()
 * 
 * 	3.判断是否是重载:
 * 		跟方法的权限修饰符,形参变量名,方法体没有关系
 * 
 * 	4.在通过对象调用方法时,如何确定一个指定方法
 * 		方法名----->参数列表
 * 	
 */
public class OverLoadingTest {
   
	//以下四种方法构成重载
	public void getsum(int i,int j) {
   
		
	}
	public void getsum(double i,double j) {
   
			
		}
	public void getsum(String i,int j) {
   
		
	}
	public void getsum(int i,String j) {
   
		
	}
	/*未构成重载,参数名不影响
	public void getsum(int a,int b) {
		
	}
	*/
}
重载的练习:
/*
 * 1.编写程序,定义三个重载方法并调用。方法名为mOL。
	三个方法分别接收一个int参数、两个int参数、一个字符串参数。
	分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
	在主类的main ()方法中分别用参数区别调用三个方法。
	
	2.定义三个重载方法max(),
	第一个方法求两个int值中的最大值,
	第二个方法求两个double值中的最大值,
	第三个方法求三个double值中的最大值,并分别调用三个方法。

 * 	
 */
public class OverLoadingTest {
   
	public static void main(String[] args) {
   
		OverLoading ol=new OverLoading();
		ol.mOL(5);
		ol.mOL(5, 10);
		ol.mOL("我是第三个方法");
		
		ol.max(5, 9);
		double max1=ol.max(10.0, 15.0);
		System.out.println(max1);
		double max2=ol.max(7, 50, 40);
		System.out.println(max2);		
	}
}
class OverLoading{
   
	//1.以下三种方法构成重载
	public void mOL(int i) {
   
		System.out.println(i*i);
	}
	public void mOL(int i,int j) {
   
		System.out.println(i*j);
		}
	public void mOL(String i) {
   
		System.out.println(i);
}
	
	//2.以下三种方法构成重载
	public void max(int i,int j) {
   
		int max1;
		if(i>j) {
   
			max1=i;
		}else {
   
			max1=j;
		}
		System.out.println(i+"和"+j+"中较大的是"+max1);		
	}
	
	public double max(double i,double j) {
   
		return (i>j?i:j);
	}
	
	public double max(double i,double j,double k) {
   
		double  ma = (i>j)?i:j;
		return (ma>k)?ma:k;
	}	
}

运行结果:

在这里插入图片描述

递归的简单使用
/*
 * 递归方法的使用(了解)
 * 1.递归方法:一个方法体内调用它自身。
 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
 * 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
 */
public class RecursionTest {
   
	//例1:计算1到100的和
	public static void main(String[] args) {
   
		//方式一
		int sum=0;
		for(int i=1;i<=100;i++) {
   
			sum+=i;
		}
		System.out.println(sum);
		
		//方式二
		RecursionTest test=new RecursionTest();
		int sum1=test.sum(100);
		System.out.println(sum1);
	}
	public int sum(int n) {
   
		if(n==1) {
   
			return 1;
		}else {
   
			return n+sum(n
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值