大家好,我是java菜鸟苏红乙.今天想说一下什么是面向对象以及构造方法,说的不好还请多多指正.
1.面向对象
1.什么是面向对象
面向对象是一种程序的设计思想,它既不是一种方法,也不是一种准则,而是指导我们从现实世界存在的事物出发,进行程序设计.
这样说好像就跟没说一样,那就换一种说法,我们把它跟面向过程进行一个对比.面向过程也是一种程序设计的思路.
打个比方我们有一个要完成的任务T,我们在完成它时,我们可以把它分解成一个一个的小任务T1,T2,T3...然后这样一步一步地解决,这样的完成方式就是面向过.而面向对象的解决思路是先把任务中会出现的事物独立出来,然后通过它们的相互联系完成任务,既把整个任务中出现的事物A,B,C...独立出来,然后针对不同的事物分配不同的任务.
面向过程的思路自然,但是当任务比较大且复杂时,一旦我们分解的某个小任务出现问题,这样就会引起很大的变动,我们所要重新组织整个任务就要费很大精力.但是如果把整件任务中出现的事物独立出来后,就算哪个事物出现问题,我们也只需要修改分配给这个事物的任务即可.
2.什么是类
类是客观事物的抽象,或者说是对现实生活中事物的一种描述(属性和行为).就比如"汽车"就是一个抽象的概念,这就是一个类,"汽车"类的属性有四个轮子,带个壳带个底盘等.还有"人"也是一个类,我们用"人"这个抽象的概念来表示我们这个群体.
3.什么是对象
对象就是客观存在的事物.在java中,万事万物皆对象.就好比汽车制造厂,汽车制造厂是制造"汽车"的,这个"汽车"还只是存在于概念中,这只是类.当汽车从生产线上下来跑起来,这才是一辆汽车,是一个实际存在的事物,是一个对象.
4.面向对象与面向过程的区别
都是一种思想,思维方式
面向过程: "我应该如何完成?"然后一步一步实现就可以了
面向对象: "我应该招谁来完成?" 关注的就是对象,而不关注实现过程
面向对象依托于面向过程
5.面向对象的优点
- 可以将复杂的问题简单化
- 面向对象更贴合与管理者,面向过程更贴合与执行者
- 面向对象思维方式更符合现实生活人们的思维方式
6.在一个java程序中如何定义一个类
一个类的定义格式如下:
修饰符 类名{
成员变量;//不被static关键字修饰的方法叫成员方法,成员变量可以只声明不赋值
成员方法;//不被static关键字修饰的方法叫成员方法
}
例:
class Student{
String name;//成员变量
int age;//成员变量
//成员方法
public void read(){
System.out.println("床前明月光");
}
}
7.对象的创建
在定义完一个类之后我们就可以对它进行实例化,创建对象.创建对象的例子如下:
class Student{
String name;//成员变量
int age;//成员变量
//构造方法
public Student(String sname,int sage){
name=sname;
age=sage;
}
//成员方法
public void read(){
System.out.println("床前明月光");
}
}
//公共类
public class Test{
//主方法
public static void main(String []args){
//创建对象
Student stu=new Student();//左边为声明,右边为创建
//赋值
stu.name="苏红乙";
stu.age=22;
stu.read();
}
}
从上面的例子可以看出,通过new关键字可以创建一个新的对象.其中new关键字创建对象的过程如下:
-
在堆中为对象开辟空间,成员属性跟随对象进入到堆内存中,并赋默认值
-
调用这个类的构造器为对象初始化信息 (第一次赋值就叫做初始化,就成员属性)
-
将地址返回给引用
2.构造方法
上面说了,在定义类是类中的成员变量可以只声明不赋值.在创建对象后,对成员变量的赋值可以直接赋值,就像
stu.name="苏红乙";
这样.也可以使用构造方法进行对成员变量进行初始化.
1.构造方法的定义
构造方法的定义格式如下:
class Demo{
//构造方法
修饰符 Demo(参数列表){
构造器....
}
}
-
构造方法没有返回值,它只是用来为对象初始化信息的,所以不用写返回值类型,连void也不需要;
-
方法名必须与类名一致;
-
不能和static,final,abstract一起使用;
-
如果没有自定义的为类定义构造方法,编译器就会为类默认提供一个无参构造方法,如果自定义了构造方法,那么编译器就不会再提供默认的无参构造方法.
-
构造方法的使用---->跟随new关键字,就比如:
Student stu=new Student("苏红乙",22);
2.构造方法的重载
构造方法只不过是一种特殊点的方法,也可以重载.
例如:
class Student{
String name;//成员变量
int age;//成员变量
//构造方法
public Student(){
System.out.println("我是无参构造方法");
}
//两参构造方法
public Student(String sname,int sage){
name=sname;
age=sage;
System.out.println("我是两参构造方法");
}
//成员方法
public void read(){
System.out.println("床前明月光");
}
}
//公共类
public class Test{
//主方法
public static void main(String []args){
//创建对象
Student stu=new Student();//左边为声明,右边为创建
//赋值
stu.name="苏红乙";
stu.age=22;
stu.read();
}
}