什么是面向对象的编程?
一、从语言角度出发
c语言:面向过程的
c++:一半面向过程一半面向对象的
java:完全面向对象的
二、什么是面向过程?
答:注重的是实现某一个功能的步骤,重要的是每一步与每一步之间的关系,形成一个个子模块,对于小型项目来说,采用面向过程的编程,效率更高
三、什么是面向对象?
答:先构建一个整体,里面有整体共同的数据,以及可以操作数据的方法,在编写时,把这一个大的整体划分为一个个小的对象,每个对象都是整体的一部分,对这些对象进行编程,更加符合人类的思维,这也是java和Python相对于c简单易学的原因。
四、java中面向对象的三大特点:
很重要!!!每一点都需要掌握,分别是封装,多态,继承。
如何定义一个类?
类,就相当于我们前面说的整体,定义了这个整体之后,我们才能创建出整体的对象!
[修饰符列表] class 类名{
类的属性;
类的方法;
}
其中,属性在代码中是变量的形式,方法则是描述的是这个整体的共同行为
通过变量的声明位置,我们还可以对变量进行分类
在方法中声明的:局部变量(方法结束后被释放)
在方法体外声明的:成员变量(就是我们上面说的属性)
案例:创建一个学生类
观察学生有什么共同的属性?
学号,姓名,年龄,性别,家庭地址等等,那么这些共同属性就是我们学生类中的变量
共同的行为:去上学,那这就是我们在学生类的方法
public class student
{
int xuehao;//这种成员变量又叫实例变量,要通过创建对象才能访问。
String xingming;
int age;
int xingbie;
String zhuzhi;
public static void goschool{//描述整体的行为
System.oit.println("学生去上学");
}
}
成员变量的默认值
当我们通过类这个整体去创建对象时,那么这个对象之中就有我们在整体中定义的成员变量,倘若没有进行赋值,系统会给这些成员变量赋一个初始值
byte:0
int:0
short:0
long:0
float:0.0
double:0.0
char:\u0000
boolean:false
对象:null
对象的创建与使用
基础语法:
类名 变量名 = new 类名();
访问对象中的成员变量:
变量名.成员变量名
就拿我们刚刚说的学生类来举例子
//定义一个学生类
student s1 = new student ();
//定义第二个
student s2 = new student ();
//访问实例变量
//由于我们没有赋值,所以这里输出的都是默认值
System.out.println(s1.xuehao);//0
System.out.println(s1.xingming);//null
System.out.println(s1.age);//0
System.out.println(s1.zhuzhi);//null
//对对象中的成员变量进行赋值
s1.age=100;
s1.xingming="张三";
System.out.println(s1.age);//100
System.out.println(s1.xingming);//张三
s1.zhuzhi="M78星云";
System.out.println(s1.zhuzhi);//M78星云
注意,创建的对象时,用的new运算符,实际上作用是在堆内存中开辟一块空间,而我们定义的变量名只是保存这块堆内存中的地址而已,接下来我们看一下创建对象是堆内存的内存变化。
(图片来源于动力节点杜老师的课程,本人不会画画 QAQ)
所以,我们创建的对象本质上和我们所熟悉的int等是一样的,都是保存了一个值而已,那么对象之间也可以相互赋值
student s3 = s1;//把s1储存的地址赋值给s3,相当于int a = 100;
//输出结果同上
System.out.println(s3.age);
System.out.println(s3.xingming);
System.out.println(s3.zhuzhi);
构造方法
构造方法是类中必不可少的元素
作用:在创建对象时对对象中的成员变量赋初值
注意(构造方法):
1.修饰符列表目前统一写:public
2.构造方法名和类名必须一致
3.构造方法名不需要返回值类型,也不能写void。
4.通常在构造方法体中属性赋值,完成初始化
5.重点:当一个类没有提供任何构造方法,系统会提供一个无参数的构造方法
6.调用构造方法:使用new运算符,new 构造方法名(实际参数列表)
7.构造方法的语法结构:[修饰符列表] 构造方法名(形参列表){
构造方法体;
}
8.当一个类中手动提供了构造方法,就不在提供无参数构造方法了,若还想调用无参数的构造方法,需要在手动写一个
9.有参数的和无参数的构造方法都可以调用
10.构造方法也支持前面说的方法重载
案例:
class user
{
int id;
String name;
int age;
boolean sex;
public user (){//无参数构造方法,可以为所有的成员变量附上初值
/*
id=0;
name=null;
age=30;
这三行代码被省略了!
*/
}
//有参数的构造方法
public user (int huiyuanhao,String xingming){
id=huiyuanhao;
name=xingming;
//没有被赋值的实例变量系统都会进行默认赋值
}
}
接下来,学习如何调用不同的构造方法来创建对象
public static void main (String[] srgs){
//调用无参数的
user i = new user();
System.out.println(i.id);//0
System.out.println(i.name);//null
System.out.println(i.age);//0
//调用不同的构造方法来创建对象
user j = new user (111,"张三");
System.out.println(j.id);//111
System.out.println(j.name);//张三
System.out.println(j.age);//0
}