java入门之面向对象

1、面向对象的概念

(1)java语言是一种纯面向对象的语言。

(2)历史:

C语言是一种面向过程的语言。
C++语言是一种既面向过程,又面向对象的语言。
Java来源于C++,是一种纯面向对象的语言。

(3)面向过程和面向对象的区别

他们都是解决问题的思想。
面向过程:通过过程来解决问题,没有对象的概念,只是如何解决这个问题的过程。
面向对象:通过对象来解决问题,需要先构建对象(赋予解决问题的能力),然后指挥对象去解决问题。

(4)对象

万事万物皆为对象。
对象是一个具体存在的能够解决问题的个体。

如何区别:通过对象的属性和行为。

属性是记录对象的特征的。
行为是对象解决问题的能力。

(5)类

类是创建对象的模板,有类才有对象。

在类里面定义对象应该有的属性和行为。

(6)面向对象

倒退:
遇到问题–>通过对象解决问题–>对象–>类

写程序:
遇到问题,分析问题;
通过分析,抽象成类;
通过类,创建对象;
通过对象,解决问题。

2、面向对象实战思路

(1)问题:小王是一个死胖子,通过努力,减肥成功(由200公斤到148斤)。

(2)类:

人类{
姓名,体重;
减肥;
}

(3)创建对象

小王=New 人类

(4)减肥

小王.减肥

3、面向对象实战编码

(1)类的定义

[修饰符public] class 类名{
1>属性
[修饰符public] 数据类型 属性名[=初始值];
2>方法
[修饰符public static] 返回值类型void 方法名([参数]){
//方法体:解决问题的过程
}
}
案例


public class Person {
public  String  name;
public  double  weight;
public  void   loseWeight() {
	System.out.println("减肥成功!");
}
}

(2)创建对象

类名 对象名=new 类名();
案例:
public static void main(String[] args) {
Person p=new Person();
}

(3)使用对象

对象名.属性名
对象名.方法名()
案例:
p.name=“小王”;
p.weight=200;
p.loseWeight();

4、创建对象的过程

调用
p.name p里面保存了对象在堆里的地址,通过这个地址找这个对象的存储空间,然后找到里面的name属性。
p.loseWeight() p里面保存了对象在堆里的地址,通过这个地址找这个对象的存储空间,然后找到loseWeight()方法,执行方法体。

5、OOP案例(长方形)


public class Rect {
	public  double  length;
	public  double  width;
	public  void  girth() {
		System.out.println("长方形的周长:"+(length+width)*2);
	}	
	public  void  area() {
		System.out.println("长方形的面积:"+length*width);
	}
	public static void main(String[] args) {
		Rect   r1=new  Rect();
		r1.length=2;
		r1.width=3;
		r1.girth();
		r1.area();	
		Rect   r2=new  Rect();
		r2.length=5;
		r2.width=5;
		r2.girth();
		r2.area();
	}
}

6、构造器的定义

(1)创建对象

new 类名();
这里调用的其实是构造器!!

(2)构造器

构造对象的过程。

定义
【修饰符】 构造器名字([参数]){
方法体
}
注意:构造器名字必须使用类名!!!!

案例
构造器:构造方法
public Circle() {
构造对象之后,用于初始化这个对象的属性操作
r=4;
}

(3)使用构造器

new 构造器名();
执行过程:
首先,通过类构造一个对象;
然后,执行方法体完成该对象的属性初始化。

(4)缺省构造器

如果类中没有定义构造器,系统会在编译时提供一个缺省的无参构造器。
缺省构造器:public 类名(){}

但是,如果你定义了构造器,系统就不会提供缺省构造器了。

案例


package day04;
public class Circle {
	public  double  r;
	public  double  PI=3.14;	
	public  void  grith() {
		System.out.println(PI*r*2);
	}
	public  void  area() {
		System.out.println(PI*r*r);
	}
	//构造器:构造方法
	public  Circle() {
		//构造对象之后,用于初始化这个对象的属性操作
		r=4;
	}
}

7、变量

(1)变量

分为两种:成员变量和局部变量。

成员变量:定义在类中,对象的属性。
局部变量:定义在方法体中的变量。

(2)成员变量与局部变量的区别

第一,声明位置不同:成员变量是定义在类中方法体外,局部变量定义在方法体内。
第二,修饰符不同:成员变量前可以使用各种修饰符修饰,局部变量只能使用final。
第三,作用范围(作用域)不同:成员变量可以作用所有方法体,局部变量只能作用于当前方法体。
第四,缺省值不同:成员变量有缺省值,局部变量没有缺省值。

(3)成员变量缺省值

整数类型,0
浮点类型,0.0
char类型,空白字符
布尔类型,false
引用类型,null

(4)变量重名问题

变量的作用域:一个变量只能在声明它的最小语句组中使用,超出这个语句组就不能使用。

重名规则
一个类中,所有的成员变量之间,不可以重名。
一个方法中,所有的局部变量之间,不可以重名。
成员变量可以和局部变量重名,方法内直接使用的是局部变量。

案例


package day04;
public class Student {
	//成员变量,也叫属性
	//public final  int     no=10;
	public  int     no;
	public  String  name;
	public  char    sex;
	public  boolean isGraduate;
	public   void  test() {
		//局部变量
		final int   a;
		a=10;
		//a=11;
		int   b=11;
		System.out.println(no);
		System.out.println(name);
		System.out.println(a);
		System.out.println(b);
	}
	public   void  test2() {
		System.out.println(no);
		System.out.println(name);
	//	System.out.println(a);
	//	System.out.println(b);	
		int  a=1;
		int  b=2;
		System.out.println(a);
		System.out.println(b);
	}
	public   void  test3() {
		int  a=1;
		{
			int  b=2;
			System.out.println(a);
			System.out.println(b);
		}	
	/	System.out.println(a);
	//	System.out.println(b);
		int  no;
	//	System.out.println(no);
	}
	public Student() {
		//局部变量
		int  c;
		int  d;
		System.out.println(no);
		System.out.println(name);
	//	System.out.println(a);
	//	System.out.println(b);
		
	//	System.out.println(c);
	//	System.out.println(d);	
		System.out.println(sex);
		System.out.println(isGraduate);
	}
	public static void main(String[] args) {
		new  Student();
	}
}

8、成员方法-参数

1)参数

作用:将数据动态传入方法体内使用

定义
定义在方法名或构造器后的小括号里;
参数的作用域是当前方法体;
参数类型 参数名,…

和局部变量比较
参数和局部变量一样,只能作用于当前方法体;
局部变量的数据是固定的,而参数的数据是可以变化的。

赋值
参数赋值,不是用等号,而是调用方法或构造器时通过小括号传入的。
调用方法或构造器时,如果定义了参数,那么需要传入数据,数据的顺序、类型、数量必须和定义时一致。

名称解释
形参,定义方法时小括号里面的参数。
实参,调用方法时传入的数据,使用实参给形参赋值。

重名问题:参数可以成员变量重名,不可以和局部变量重名。

案例


public class SumDemo {
	public  void   sum(int  a,int  b) {
		//int  a=10,b=20;
		System.out.println(a+b);
	}
	public static void main(String[] args) {
		SumDemo  sd=new SumDemo();
		sd.sum(1,2);
		sd.sum(3,4);
		sd.sum(10,20);
	}
}

(2)方法的重载

在同一类中,出现多个方法的方法名相同但是参数列表必须不同。

参数不同:
数量不同;
数量相同,但是对应顺序的参数类型至少有一个不同。
参数名在调用时,不能作为参数不同的依据。


public class SumDemo {
	public  void   sum() {		
		System.out.println(10+20);
	}
	public  void   sum(int  a,int  b) {	
		System.out.println(a+b);		
	}
	public  void   sum(int  a,int  b,int  c) {	
		System.out.println(a+b+c);
	}	
	public  void   sum(int  a,double  b) {		
		System.out.println("我们不一样:"+a+b);
	}	
	public  void   sum(double  a,int  b) {	
		System.out.println("我们不一样:"+a+b);
	}	
	public  void sum(double  c,double  d) {
		System.out.println("double 2:"+(c+d));
	}
	public static void main(String[] args) {
		SumDemo  sd=new SumDemo();
		sd.sum(1,2);
		sd.sum(3,4);
		sd.sum(10,20);		
		sd.sum();
		sd.sum(1, 2, 3);
		sd.sum(12.1, 12.2);
		sd.sum(1,2.0);
		sd.sum(2.0,1);
	}
}
***

(3)构造器的重载

在同一个类中允许定义多个构造器,但是参数必须不同,这种现象我们叫构造器重载。

主要目的:完成创建对象后的不同初始化需求。
//构造器:构造方法


public  Circle() {
	//构造对象之后,用于初始化这个对象的属性操作
	//r=4;
}
public  Circle(double  rr) {
	//构造对象之后,用于初始化这个对象的属性操作
	r=rr;
}
public  Circle(double  rr,double  tt) {
	//构造对象之后,用于初始化这个对象的属性操作
	r=rr;
	t=tt;
}
    Circle  c1=new  Circle();
	System.out.println(c1.r);
	System.out.println(c1.t);
	System.out.println(c1.PI);
	Circle  c2=new  Circle(3);
	System.out.println(c2.r);
	System.out.println(c2.t);
	System.out.println(c2.PI);
	Circle  c3=new  Circle(3,4);
	System.out.println(c3.r);
	System.out.println(c3.t);
	System.out.println(c3.PI);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值