文章目录
一.面向对象和面向过程的设计思想
1.面向过程
利用面向过程(缩写POP)的思想来解决问题,首先需要分析出解决问题的步骤,然后把步骤一步一步实现.面向过程的设计思想关注于流程.
2.面向对象
面向对象(缩写OOP)是以分类的方式进行思考和解决问题.
使用面向对象的思想解决问题,需要**先对整体关系作出分类.**根据不同的类深入的分析问题.面向对象的思想更符合人类的认知习惯.
3.面向过程与面向对象关系
面向对象无法取代面向过程,他们是相辅相成的.在解决问题的时候,面向对象在宏观上把握事物之间的关系,但是当要考虑实现那些细节的时候,仍然采用面向过程的思想.
二.Java类
1.什么是类?
类就是一个模板,他是描述一类事物的属性和行为的集合.
类是一个抽象的概念,他表示客观某类群体的一些基本特征.
比如生活中我们常说的车就是一个类.什么是车?能代步的,机械构造的就可以叫他车,不管是三轮四轮,都可以叫他车.这是一个大类.在这个类中我们可以细分,四轮轿车,四轮SUV…
2.类的结构
成员变量:事物属性的描述.
方法:事物的行为,也就是可以做的事情.
构造方法:初始化对象.
内部类:就是在类中声明的类.
块:一段没有名称的代码块.
最终在使用的时候,根据类实例化具体的对象.
3.类的定义
1.发现类
类的声明格式为:
[访问权限修饰符] [修饰符] class 类名{
}
访问修饰符有两种:public,无(默认).
修饰符:final,abstract.
关键字class用来定义一个类.
2.发现类的共有属性
声明成员变量的格式为
[访问权限修饰符][修饰符] type 变量名 = value;
例如:
public class Car{
String name;
float price;
[访问权限修饰符][修饰符] void start(){
System.out.println("汽车启动");
[return 返回值;]
}
}
注意:
成员变量是声明在类中,方法体之外的变量.
成员变量可以使用Java中的任意数据类型.
在定义成员变量时可以对其初始化.如果不对其初始化,Java使用默认值将其初始化.
成员变量在创建对象的时候会从类中复制一份到对象中.
成员变量可以被类中方法,构造方法和特定类的语句块访问.
成员变量的作用范围为整个类体.
三.Java对象
1.什么是对象
对象是类的一个实例,是以类为模板在内存中创建的实际存在.
比如上面我们提到的四轮汽车,那么我们说的奔驰E300L就是四轮汽车这个类的一个对象.这个对象具有类中定义的功能,可以被使用.
2.对象的创建和使用
在创建对象前必须先有类,比如我们说的汽车,先给他创建一个类.才能创建出具体的对象.
Car bmwx7 = new Car();//以Car为模板,在内存中创建出一个具体的对象.
“=”:将右边创建的对象地址赋给左边的变量.
Car bmwx7:使用Car为类型声明一个变量bmwx7.可以使用这个访问对象中的成员变量和成员方法.
同一类的每个对象有不同的成员变量存储空间.
同一类的每个对象共享该类的方法.
实际生活中是先有对象才有类.编程时候是先设计类才有对象.
四.类和对象的总结
类是一类事物的抽象概念,是一个模型.
对象是由这个模型所创造的一个具体存在的,实实在在存在的实例.
创建对象的过程也叫实例化对象.
五.变量分类
之前在基础语法里,提到过按照数据类型可以分为基本数据类型和引用数据类型.
在这块我们可以按照变量位置分为成员变量,局部变量.
1.成员变量
成员变量的位置以及具体的注意事项在上文Java类的第三节中已经提到过.
成员变量的存活周期是开始于对象的创建,结束于对象的销毁.
2.局部变量
局部变量是在方法,构造方法,或者语句块中定义的变量.
局部变量可以使用Java变量中的任一数据类型.但是不同的是,局部变量在使用前必须进行初始化.
局部变量的存活周期是开始于方法的调用入栈,结束于方法出栈.
六.方法分类
1.成员方法
成员方法是定义在类中的方法,主要是完成某种行为和功能.
语法格式:
[访问权限修饰符][修饰符] 返回值类型 方法名(参数列表){
方法体;
[return 返回值;]
}
2.构造方法
作用:构造方法是用来初始化对象的方法.
特点;构造方法名与类名相同,且没有返回值,不需要用void来修饰.
在创建一个对象的时候,至少要调用一个构造方法,每个类都有构造方法,**如果没有显示的为类定义构造方法,Java将会为该类提供一个默认的构造方法.**但是只要在一个Java类中定义了一个构造方法后,默认的构造方法将失效.
七.方法重载
方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法.
参数不同可以有三方面的不同:
1.数量不同
2.顺序不同
3.类型不同
例如:构造方法的重载
public class Car{
public Car(){
//无参数的构造方法
}
public Car(String name){
//有参数的构造方法
}
}
在调用的时候,会根据不同的参数表选择对应的方法
例如:
Car car1 = new Car();//调用无参数的构造方法
Car car2 = new Car("奥迪");//调用有参数的构造方法
注意:**方法重载跟方法的返回值类型没有任何关系.**两个方法的返回值类型不同,但是参数的数量,类型,顺序都相同. 即使系统不报错,也不能说是方法重载.
八.对象与引用
1.对象引用
Java语言中除基本类型之外的变量类型都称之为引用类型.
Java中的对象是通过引用对其操作的.
例如:
Car bm = new Car();
**通常把这条语句的动作称之为创建一个对象.**其实,它包含了三个动作:
1.右边的"new Car()",是以Car类为模板,在堆空间里创建一个Car类对象.(对象没有名字,也就没有办法直接访问它,需要通过对象引用来间接访问对象.)
2.左边的"Car bm"创建了一个**Car类型引用变量.**所谓Car类的引用,就是以后可以用来指向Car对象的对象的引用.
3."="操作符使对象引用指向刚创建的那个Car对象.
我们可以把这条语句拆分为两部分:
Car bm;
bm = new Car();
这样就比较容易理解,有两个实体,一个是对象引用变量,一个是对象本身.
对象就像一个气球,引用变量就像一根绳,可以用来系气球.
Car car1;//创建一个绳子car1,但是并没有系气球
Car car2;//创建一个绳子car2,也没有系气球
Car1 = new Car();//给car1系上气球
car2 = car1;//这里发生了复制行为,但是对象本身并没有被复制,被复制的只是对象引用
//最后的结果是,car2也指向car1所指向的对象,两根绳系的是同一个气球.
2.值传递与引用传递
Java中进行方法调用传递参数时,参数传递有两种:
1.值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,他们两个有着不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值.
public class Class{
public static void main(String[] args) {
int a = 10;
new Class().test(a);
System.out.println(a);
}
public void test(int b){
b = 20;
System.out.println(b);
}
}
输出结果是
20 10
2.引用传递:(形式参数类型是引用数据类型):也称为传地址.方法调用时,形式参数会复制实际参数的地址,使得形式参数和实际参数指向同一个对象.在方法执行下,对形式参数进行的操作实际上就是对对象的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变会影响实际参数.
基本类型传递的是该数据值本身.引用类型传递的是对象引用,而不是对象本身.
public class Class{
public static void main(String[] args) {
Car car1 = new Car();
car1.price = 10000;
new Class().test(car1);
System.out.println(car1.price);
}
public void test(Car car2){
car.price = 20000;
}
}
输出结果是
20000
九.this关键字
this关键字代表当前对象.
可以使用this关键字引用成员变量.也可以引用成员方法.
在一个类的方法或者构造方法内部,可以使用"this.成员变量名 "这样的格式来引用成员变量名.常常用来区分重名的成员变量和局部变量.
public class Car{
double price;
public Car(double price){
this.price = price;//右边的price就是形参,左边的就是Car类中的成员变量
}
}