JAVA学习笔记09-面向对象、方法的复习、对象的创建
面向对象
面向过程的思想适用于一些简单的问题,比如“我要去上学”,那么处理这种问题我们直接用过程描述就可以了。但是随着问题越来越复杂,简单的用面向过程的思维来编程处理问题就有点力不从心了。
这个时候我们就需要用到面向对象的思维,比如“修一栋房子”,用面向过程的思想那么我要先打地基、然后架钢筋、铺水泥...等等,用面向对象的思维可以将问题分类,对这些问题独立思考,造房子可以分为设计部、工程部、水泥工、木工...其实面向对象的思维方式也符合对我们日常生活的思维的抽象。
对Java语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
面向对象编程(OOP)的本质:以类的方式组织代码,以对象的方式封装数据。
面向对象三大特性
-
封装
封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。封装的目的在于保护信息。具体的数据和方法我们都是保存在类和对象当中的,只留下接口供外部调用,这就像U盘里面的数据不论如何改变,只要USB接口标准,那么就不会影响用户的使用。 -
继承
如同生活中的子女继承父母拥有的所有财产,程序中的继承性是指子类拥有父类的全部特征和行为,这是类之间的一种关系。Java只支持单继承。C++是支持多继承的,但是多继承有时会引起混乱。 -
多态
面向对象的多态性,即“一个接口,多个方法”。多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。多态性允许一个接口被多个同类使用,弥补了单继承的不足。
方法的复习
静态方法
有static关键字修饰的方法就称为静态方法。静态方法是和类一起加载的,类出现的时候就有了静态方法。
- 静态方法是属于类的,调用的方式是通过:
类名.方法名()

- 静态方法是不能访问非静态成员的:
![]()
如果我们将nAge成员加上static修饰,静态方法就可以调用了:
![]()
非静态方法
没有被static修饰的方法,也叫做实例方法。实例方法是类实例化之后才存在。
- 实例方法属于对象,调用方式是:
实例化对象.方法()

- 实例方法可以直接访问静态成员
![]()
值传递与引用传递
我们的JAVA都是值传递,比如以下的代码是不能改变变量本身的值的:
public class Demo1 {
public static void main(String[] args)
{
int a = 1;
Demo1.numChange(a);
System.out.println(a);
}
public static void numChange(int a){
a= 100;
}
}
以上代码运行后,我们的变量a的大小仍然是1。
//引用传递,操作对象,实质上仍然是值传递
public class Demo1 {
public static void main(String[] args)
{
Person person1 = new Person();
System.out.println(person1.name);
Demo1.change(person1);
System.out.println(person1.name);
}
public static void change(Person person){
person.name = "test";
}
}
class Person{
String name;
}
以上代码运行后结果如下:

因为我们操作的是一个实例化的对象。
创建与初始化对象
- 使用
new关键字创建对象:
类名 对象名 = new 类名()
在使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
构造器
构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
比如我们直接实例化一个Demo5类,Demo5中是没有任何其他代码,但是程序运行是不会报错的,这就说明实际上Java在我们实例化对象前对类做了一些初始化操作,这就是构造函数。

我们去观察Demo5生成的class文件,可以发现它自己生成了一个和类名一致的方法,这就是构造方法:

这就说明,一个类就算什么都不写,那么它也会存在一个方法,我们在使用new关键字实例化一个对象的时候,其实本质就是在调用构造器。
构造函数分为无参构造和有参构造:
- 无参构造
public class Demo5 {
//显式地定义一个构造
public Demo5(){
}
}
- 有参构造
构造函数可以用来初始化一些值,那么这个时候就需要有参构造:
public class Demo5 {
String Sname;
//显式地定义一个构造
public Demo5(){
}
//有参构造
public Demo5(String name) {
this.Sname = name;
}
}
注意:如果定义了有参构造,那么无参构造就必须显式地定义:

IDEA的alt + insert
IDEA中的ALT+INSERT可以帮助我们生成构造函数:




浙公网安备 33010602011771号