(07)Java学习笔记——面向对象01

面向过程——面向过程思想,强调的是过程(动作)。

面向对象——面向对象思想,强调的是对象(实体),然后由对象去调用功能。


面向对象的特点:

1/面向对象就是一种常见的思想,符合人们的思考习惯。

2/面向对象的出现将复杂的问题简单化。

3/面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。


如何才能更符合面向对象思想呢?

a/有哪些类?

——a/ 呵呵分析有哪些类呢?UML,名词提取法。

b/每个类有哪些东西?

c/类与类之间的关系是什么?


例如:

把大象装进冰箱的分析:

a/ 有哪些类?

大象 冰箱 Demo

b/每个类有哪些东西呢?

大象:进去

冰箱:开门 / 关门

Demo: main方法

c/类与类之间的关系是什么呢?

Demo中使用大象和冰箱类的功能。


代码体现:

class Demo 
{
	public static void main(String[] args) 
	{
		冰箱调用开门方法;
		大象调用装进大象方法;
		冰箱调用关门方法;
	}
}

calss 大象
{
	public static void in()
	{
		System.out.println("装进大象");
	}
}

class 冰箱
{
	public static void open()
	{
		System.out.println("打开冰箱门");
	}

	public static void close()
	{
		System.out.println("关闭冰箱门");
	}
}


面向对象的开发,设计,特征:

a/ 面向对象开发

就是不断的创建对象,使用对象,指挥对象做事。


b/面向对象设计

就是在管理和维护对象之间的关系。


c/面向对象特征:

封装 / 继承  / 多态


——————————————————————————————————————


类 与 对象的关系

类:

Java语言通过类的形式对事物进行描述。

通过两个方面描绘事物:

1/属性 (成员变量)

2/行为 (成员方法)


成员变量 —— 就是事物的属性 (和以前变量的定义是一样的格式,但是微智不同,在类中方法外)

成员方法 —— 就是事物的行为  

定义类其实就是定义类的成员(成员变量和成员方法


类与对象之间的关系:

类:事物的描述,相关属性和行为的集合,是一个抽象概念。

对象:该类事物的具体表现形式,具体存在的个体。在java中通过new来创建的。


如何定义一个类:

范例:定义一个学生类

//定义一个学生类
calss student
{
	//定义成员变量
	//姓名
	String name;
	//年龄
	int age;
	//地址
	String address;

	//定义成员方法
	//学习
	public void study()
	{
		System.out.println("学生爱学习");
	}

	//吃饭
	public void study()
	{
		System.out.println("学生吃饭");
	}

	//睡觉
	public void sleep()
	{
		System.out.println("学生睡觉");
	}
}



如何使用一个类:

创建对象使用类

格式:

类名  对象名 = new 类名();


如何使用成员变量?

格式:

对象名 . 变量名;


如何使用成员方法?

格式:

对象名 . 方法名(参数);


范例:学生类

//定义一个学生类
class student
{
	//定义成员变量
	//姓名
	String name;
	//年龄
	int age;
	//地址
	String address;

	//定义成员方法
	//学习
	public void study()
	{
		System.out.println("学生爱学习");
	}

	//吃饭
	public void eat()
	{
		System.out.println("学生吃饭");
	}

	//睡觉
	public void sleep()
	{
		System.out.println("学生睡觉");
	}
}

class studentDemo
{
	public static void main(String[] args)
	{
		student s = new student();	//	创建一个学生对象 格式:类名 对象名 = new 类名();

		System.out.println(s.name+"----"+s.age+"----"+s.address);	//输出成员初始变量值(使用成员变量 格式:类名.成员名;)

		//给成员变量赋值
		s.name = "阿朱";
		s.age = 18;
		s.address = "解放大街";

		System.out.println(s.name+"----"+s.age+"----"+s.address);	//赋值后输出

		//调用方法
		s.study();	//调用类的方法,格式:类名.方法名();
		s.eat();
		s.sleep();
 	}
}


范例:对“小汽车“的描述:

	/*
	描述小汽车
	分析:
	1/属性:轮胎数,颜色
	2/行为:运行
	*/

class  ObjectDemo
{
	public static void main(String[] args) 
	{
		Car c = new Car();	//在计算机中创建一个car的实例。通过new关键字来创建。Car是一个类(下面定义的用来描述的类), c就是一个类类型的引用变量,指向了该类的对象。

		c.num=4;		//对对象的变量赋值
		c.color="red";	//对对象的变量赋值
		c.run();	//要使用对象中的内容可以通过  对象.成员 的形式来完成调用。					
		
	}
}

class Car	//通过创建一个类,来描述一个事物。
{
	int num;	//属性:通过函数来定义。函数定义属性。(成员变量)
	String color;

	void run()		//行为:通过函数来定义。函数定义一个功能。(成员函数)

	{
		System.out.println(num+"...."+color);
	}

}


——————————————————————————————————————————————————————————————


成员变量和局部变量的区别:


1/成员变量定义在类中,方法外。
局部变量定义在方法,语句,局部代码块中,只在所属的区域有效。


2/成员变量存在于堆内存的对象中
局部变量存在于栈内存的方法中


3/成员变量随着对象的创建而存在,随着对象的消失而消失
局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。


4/成员变量都有默认初始化值
局部变量没有默认初始化值,必须定于赋值才能使用。


注意事项:

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


范例:

class VariableDemo_01 
{
	public static void main(String[] args) 
	{
		Variable v = new Variable();

		System.out.println(v.num); //访问成员变量

		v.show();

	}
}

class Variable
{
	int num;	//在类中,方法外变量:成员变量

	public void show()
	{
		int num1=20;	//在方法中的变量,局部变量
		System.out.println(num1);

		int num = 100;
		System.out.println(num);	//局部变量在方法中使用的时候,采用就近原则,所以这个sum=100
	}
}


——————————————————————————————————————


方法的形式参数:

形式参数的问题:

基本类型:形式参数改变不影响实际参数

引用类型:形式参数的改变影响实际参数


如果看到一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。

范例:

class Demo
{
	public int sum(int a, int b)
	{
		return a+b;
	}
}

class Student
{	
	public void show()
	{
		System.out.println("学生爱学习");
	}
}

class StudentDemo
{	//如果看到一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象
	public void method(Student s)	//调用时候,把main方法中的s地址传递到了这里 (Student s = new Student();)
	{
		s.show();
	}
}

class ArgsTest_01 
{
	public static void main(String[] args) 
	{
		//形式参数是基本类型调用
		Demo d = new Demo();
		int result = d.sum(10,20);
		System.out.println("result:"+result);
		System.out.println("---------------------------");

		//形式参数是引用类型的调用
		//需求:要调用StudentDemo类中的Method()方法:
		StudentDemo sd = new StudentDemo();

		//创建学生对象
		Student s=new Student();
		sd.method(s);	//把s的地址给到了这里

	}
}


——————————————————————————————————————————————


匿名对象
没有名字的对象。
new Car();    //匿名对象,其实就是定义对象的简写格式。

匿名对象调用方法格式:

new 类名() . 方法名()

new Car().run();   

当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。

范例:

class Student
{
	public void show()
	{
		System.out.println("我爱学习");
	}
}

class  NoNameDemo_01
{
	public static void main(String[] args) 
	{
		//带名字的对象调用方法
		Student s = new Student();
		s.show();

		System.out.println("---------------------------");

		//匿名对象调用方法
		new Student().show();

	}
}

匿名对象可以作为实际参数传递。



————————————————————————————————————————————————


封装


指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
private  /* 私有 */  //只在本类中有效,外界不能访问。是一个权限修饰符,用于修饰成员(成员变量和成员方法)。只能修饰成员。
私有仅仅是封装的一种体现。


例:private int age;  //用于修饰类里面的成员。


封装的好处:


1/将变化隔离,将属性隔离,用方法来对属性进行可控。
2/便于使用
3/提高重用性
4/提高安全性


封装的原则:


1/将不需要对外提供的内容都隐藏起来
2/把属性都隐藏,对外提供公共访问的方法。


封装范例:

class Student
{
	//定义成员变量
	String name;
	private int age;	//用private 私有修饰成员变量,配合setAge()使用
	
	//定义一个成员方法进行输出
	public void show()
	{
		System.out.println("姓名:"+name);
		System.out.println("年龄:"+age);
	}

	//增加一个逻辑校验方法
	public void setAge(int a)	//对外提供一个公共访问方式,隐藏了属性细节
	{
		if (a>0 && a<120)	//设置Age的范围
		{
			age = a;
		}
		else
		{
			System.out.println("请输入正确的年龄:");
		}
	}

		
}

class	StudentDemo_03  
{
	public static void main(String[] args) 
	{
		Student s = new Student();

		s.name="阿紫";
		s.setAge(44);

		s.show();

	}
}


private的应用:

特点:

a/ 可以修饰成员(包括成员变量和成员方法)

b/ 被private修饰的成员只能在本类中才能访问


最常见的应用:

1/ 把成员变量用private修饰

2/ 提供对应的getXxx()   和 setXxx()方法对外访问


范例:

class Student
{
	//定义成员变量
	private String name;
	private int age;	//用private 私有修饰成员变量,配合setAge()使用
	
	//定义一个成员方法进行输出
	public void show()
	{
		System.out.println("姓名:"+getName());
		System.out.println("年龄:"+getAge());
	}

	//增加一个逻辑校验方法
	public void setAge(int a)	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		if (a>0 && a<120)	//设置Age的范围
		{
			age = a;
		}
		else
		{
			System.out.println("请输入正确的年龄:");
		}
	}

	public String getName()	//对外提供一个公共访问方式,隐藏了属性细节   **注意返回值类型
	{
		return name;
	}

	public void setName(String b)	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		name =b;
	}

	public int getAge()	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		return age;
	}
}

class	StudentDemo_03  
{
	public static void main(String[] args) 
	{
		Student s = new Student();

		s.setName("阿朱");
		s.setAge(25);

		s.show();
	}
}


this 关键字

代表当前类的一个对象。 谁调用这个方法,在该方法内部的this就代表谁。

范例:

class Student
{
	//定义成员变量
	private String name;
	private int age;	//用private 私有修饰成员变量,配合setAge()使用
	
	//定义一个成员方法进行输出
	public void show()
	{
		System.out.println("姓名:"+getName());
		System.out.println("年龄:"+getAge());
	}

	//增加一个逻辑校验方法
	public void setAge(int age)	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		if (age>0 && age<120)	//设置Age的范围
		{
			this.age = age;	//用this进行当前类对象引用,它就代表当前类的一个对象。
		}
		else
		{
			System.out.println("请输入正确的年龄:");
		}
	}

	public String getName()	//对外提供一个公共访问方式,隐藏了属性细节   **注意返回值类型
	{
		return name;
	}

	public void setName(String name)	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		this.name =name;
	}

	public int getAge()	//对外提供一个公共访问方式,隐藏了属性细节  **注意返回值类型
	{
		return age;
	}
}

class	StudentDemo_03  
{
	public static void main(String[] args) 
	{
		Student s = new Student();

		s.setName("阿朱");
		s.setAge(25);

		s.show();
	}
}

练习01:一个手机类

/*
手机类:
成员变量:
品牌: String brand;
价格:int price;
颜色: String color;

成员方法:
针对每一个成员变量给出对应的set() 和 get() 方法。

输出:
创建一个对象,通过get()方法输出成员变量的值,这一次结果是:null----0----null
然后通过set()方法给成员变量赋值,再次输出结果,这次的结果是:小米----1999----土豪金

*/

class Photo
{
	private String brand;
	private int price;
	private String color;

	public void setBrand(String brand)
	{
		this.brand = brand;
	}

	public void setPrice(int price)
	{
		this.price = price;
	}

	public void setColor(String color)
	{
		this.color = color;
	}

	public String getBrand()
	{
		return brand;
	}

	public int getPrice()
	{
		return price;
	}

	public String getColor()
	{
		return color;
	}

}


class  PhotoTest_01
{
	public static void main(String[] args) 
	{
		Photo p = new Photo();
		System.out.println(p.getBrand()+"----"+p.getPrice()+"----"+p.getColor());

		System.out.println("------------------------------");

		p.setBrand("小米");
		p.setPrice(1999);
		p.setColor("土豪金");

		System.out.println(p.getBrand()+"----"+p.getPrice()+"----"+p.getColor());
	}
}


————————————————————————————————————————————————————


构造方法

给对象的数据进行初始化


特点:
1/函数名与类名相同
2/不用定义返回值类型,连void都没有
3/没有具体返回值,不用return返回东西

格式范例:

class Student
{
	public Student()	//构造方法名同类名,且没有返回值类型,
	{
		System.out.println("这是构造方法");
	}
}


class ConstructionDemo 
{
	public static void main(String[] args) 
	{
		Student s = new Student();
	}
}


注意事项和作用:

给对象进行初始化 (创建对象都必须要通过构造函数进行初始化)。
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。


一般函数和构造函数的区别:
1/构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要该函数功能时才调用。
2/构造函数:对象创建时会调用,只会调用一次
一般函数:对象创建时会依据需要调用多次。


什么时候定义构造函数?
在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中。


构造函数的重载:(与函数的重载相似)

可以给不同的对象进行不同的初始化。

class  ConsTest02
{
	public static void main(String[] args) 
	{
		Person p = new Person();	//创建第一个对象,调用相应的初始化构造函数
		p.speak();
		Person p1 = new Person("东东");	//创建第二个对象,调用相应的初始化构造函数
		p1.speak();

		p1.setName("花花");		//可以重复调用Person类中一般函数
		p1.speak();

		Person p2 = new Person("小黑",3);	//创建第三个对象,调用相应的初始化构造函数
		p2.speak();

	}
}

class Person	//定义一个描述人属性的类
{
	private String name;	//将属性私有
	private int age;		//将属性私有

	Person ()				//提供公共借口方法
	{
		name = "baby";
		age = 1;
	}

	Person (String name01)		//相同的函数名,但是不同的参数类型或者参数个数
	{
		name = name01;
	}

	Person (String name02,int age02)	//相同的函数名,但是不同的参数类型或者参数个数
	{
		name = name02;
		age = age02;
	}

	public void setName(String name01)	//一般方法,可重复调用多次,进行不同的参数赋值
	{
		name = name01;
	}

	public void speak()			//创建一个函数描述动作
	{
		System.out.println(name+"...."+age);
	}

}


构造函数可以调用一般方法。一般方法不能调用构造函数


——————————————————————————————————————————————————————————


类的组成:

A / 成员变量


B / 构造方法

-----| 无参构造方法

-----|带参构造方法


C / 成员方法

-----|setXxx();

-----|getXxx();


_________________________________________________________________________________


练习01:

定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试

class Demo	//定义一个类
{
	public int sum(int x, int y)	//定义类中的一个两数相加的方法
	{
		return x+y;
	}
}

class  Test_001  
{
	public static void main(String[] args) 
	{
		Demo d = new Demo();	//创建一个对象用来调用方法
		
		int result = d.sum(5,8);
		System.out.println(result);
	}
}


什么时候定义成员变量:

如果这个变量是用来描述这个类的信息的,那么该变量就应该定义为成员变量。如果没有关系,就不要定义为成员变量。

变量的范围越小越好,因为能及时被回收。


练习02:

定义一个长方形类,定义求周长和面积的方法,然后测试

class Rectangle_01
{
	private int longside;	//将成员变量私有化
	private int shortside;

	public void setSide(int longside,int shortside)	//提供公共的方法给外部对象调用
	{
		this.longside=longside;
		this.shortside=shortside;
	}

	public Rectangle_01()	//构造函数初始化
	{
	}

	public int meter()	//定义一个计算周长的方法
	{
		int m =(longside+shortside)*2;
		return m;
	}

	public int area()	//定义一个计算面积方法
	{
		int ar = longside*shortside;
		return ar;
	}

}

class RectangleTest_01 
{
	public static void main(String[] args) 
	{
		Rectangle_01 re = new Rectangle_01();	//定义一个对象用来调用方法

		re.setSide(10,5);

		int result1 = re.meter();
		int result2 = re.area();

		System.out.println("长方形的周长是:"+result1);
		System.out.println("长方形的面积是:"+result2);


	}
}

练习03:

定义一个员工类,分析类成员,给出成员变量,构造方法,get()  set()方法,及显示成员信息的方法。测试

/*
员工的属性:
成员变量:
员工编号,名字,年龄
成员方法:
set()方法给变量赋值
输出员工信息

*/

class Person
{
	private int number;
	private String name;
	private int age;

	public void setNumber(int number)
	{
		this.number = number;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public void show()
	{
		System.out.println("编号是"+number+"的这个人是"+name+",他的年龄是"+age);
	}

}

class PersonTest_01 
{
	public static void main(String[] args) 
	{
		Person p = new Person();

		p.setNumber(33);
		p.setName("阿朱");
		p.setAge(26);

		p.show();
	}
}


————————————————————————————————————





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值