java基础5(面向对象)
1. 面向对象:
object oriented programming 缩写 OOP面向对象的编程语言
-
以分类的方式进行思考和解决问题。
-
面向对象先对整体关系作出分类,然后根据不同的类深入细节的处理。
-
面向对象的思想符合人类的认知习惯。
例:
Q:小明把苹果从桌子1拿到桌子2
A(pop):1.小明从桌子1处拿起苹果;
2.小明从桌子1处走到桌子2处;
3.小明把苹果放到桌子2处。
A(oop):小明(拿起,放下);桌子;苹果
注:面向对象编程与面向过程编程是相辅相成的,不具有完全替代性
2.类
(1)什么是类? 类定义了一种抽象的数据类型 类就是模板 确定对象将会拥有的特征(属性)和行为(方法)
(2)类的特点 类就是对象的类型 具有相同属性和方法的一组对象的集合
(3) 类的结构
-
成员变量:事物属性的描述;
-
方法:事物的行为;(可以做的事情)
-
构造方法:用于创建对象;
-
内部类: 即在类体中声明的类。
-
块:一段没有名称的代码块
(4)类的定义(拿车来举例子---Car)
-
发现类
根据不同类型的车,抽象出“类”
类的声明格式为:
[访问权限修饰符] [修饰符] class Car{
}
访问修饰符有两种public,无(默认)
修饰符:final,abstract
关键字class用来定义一个类
-
第二步:发现类的共有属性(成员变量)
汽车类共有的特征:
1. 颜色
2. 名称
3. 型号
public class Car{
//成员变量定义
String name; //名称
String color; // 颜色
float price;//价格
}
-
第三步:发现类的方法
汽车类共有的行为:
1. 启动
2. 行驶
3. 刹车
方法声明格式为:
[访问权限修饰符] [修饰符]/ void start(){
System.out.println("汽车启动");
[return 返回值;]
}
public class Car{ String name; String color; float price; public void start(){ System.out.println("汽车启动"); } }
3.对象
对象:对象是类的一个实例,是以类为模板在内存中创建的实际存在的实例。
对象的创建和使用
class test{
public static void main(String[] args) {
Car c1 = new Car();
c1.name="奔驰";
c1.color="white";
c1.price=300000;
System.out.println("名字:"+ c1.name+"\n颜色:"+c1.color+"\n价格:"+c1.price);
}
}
Car c1:使用Car类作为类型声明一个变量c1.
new Car():使用new + Car类构造方法创建对象.
= :将右边创建的对象地址 赋给 左边的c1变量
使用c1变量访问对象中的成员变量和成员方法
4.变量
● 成员变量:
成员变量是定义在类中,方法体之外的变量。
成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量在创建对象的时候会从类中复制一份到对象中。
成员变量可以被类中方法、构造方法和特定类的语句块访问。
成员变量的作用范围为整个类体。
● 局部变量:
在方法、构造方法或者语句块中定义的变量被称为局部变量。
局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
局部变量在使用前必须初始化赋值。
变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
5方法
-
方法分类
● 成员方法:成员方法是定义在类中。
语法格式:
修饰符 返回值类型 方法名 ( 参数列表) {
方法体语句;
[return 返回值]
}
● 构造方法:用来初始化对象的方法
作用:在构造方法中为创建的对象初始化赋值
要点:(1)构造器通过new关键字调用;
(2)构造器虽然有返回值,但是不能定义返回值的类型(返回值的类型肯定是本类),不能再构造器里使
用return返回某个值。
(3)如果没有定义构造器,则编译器会自动定义一个无参的构造器(方法) 如果已定义 则编译器不会自
动添加。
(4)构造器的方法名必须和类名一致;
-
方法重载
● 方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法
● 参数不同(可以有三方面的不同)
(1) 数量不同
(2) 类型不同
(3) 顺序不同
public class Car { String name; String color; float price; Car(){} public Car(String c_name){ name=c_name; } public Car(String c_name,String c_color){ name=c_name; color=c_color; } public static void main(String[] args) { Car c1=new Car(); Car c2=new Car("宝马"); System.out.println(c2.name); Car c3= new Car("法拉利","蓝色"); System.out.println(c3.color+"的"+c3.name); } }
-
this关键字
this关键字代表当前对象
使用this关键字引用成员变量
使用this关键字引用成员方法
public class Person {
String name;
int age;
int height;
public Person(){}
public Person(String name, int age, int height){
name=name;
age=age;
height=height;
}
public void introduce(){
System.out.println("我是"+name+"今年"+age+"岁,我的身高是"+height+"cm");
}
public static void main(String[] args) {
Person p=new Person("张三",18,170);
p.introduce();
}
}
-
-
public class Person { String name; int age; int height; public Person(){} public Person(String name, int age, int height){ this.name=name; this.age=age; this.height=height; } public void introduce(){ System.out.println("我是"+name+"今年"+age+"岁,我的身高是"+height+"cm"); } public static void main(String[] args) { Person p=new Person("张三",18,170); p.introduce(); } }
-
static关键字
Static的特点
(1)static是一个修饰符,用于修饰成员
(2)static修饰的成员被所有的对象所共享
(3)static优先于对象存在,因为static的成员随着类的加载就已经存在了
(4)static修饰的成员多了一种调用方式,即可以直接被类名调用。类名.静态变量
(5)static修饰的数据是共享数据,对象中的存储的是特有数据
-
代码块
在类中或者方法中,使用{}括起来的一段代码,就称它是代码块。
代码块分为:局部代码块、初始化代码块、静态代码块三种
用法:
1.static代码块也叫静态代码块,作用就是对类进行初始化,且 它随着类的加载而执行,且只执行一次。
2.普通代码块被创建一次就会被调用一次,如果只是使用类的静态成员时(包括静态属性等)普通代码块不会被执行。
当new一个对象时普通代码块会被执行,和类的加载没关系。
3.创建一个对象时,在一个类中的调用顺序是:
一.先调用静态代码块和静态属性初始化。(注意:静态代码和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态属性初始化,则按照他们的定义顺序调用)
二. 调用普通代码块和普通代码块的初始化(注意同上)
三.调用构造器。(调用完上面再调用构造器)
4.构造器的最前面 其实隐藏了super和调用普通代码块,所以在执行构造器时先执行super和普通调用代码块和普通属性初始化
5.创建一个子类对象时(继承关系)他们的静态代码块静态属性初始化,普通代码块,普通代码块初始化,构造方法的调用顺序如下:
(1)父类的静态代码块和静态属性初始化,(优先级一样,按定义顺序执行)
(2)子类的静态代码块和属性初始化(同上)
(3)父类的普通代码块和普通属性初始化。(4)父类的构造方法;
(5)子类的普通代码块和普通属性初始化。
(6)子类的构造方法。
6.静态代码块之只能直接调用静态成员,普通代码块能调用所有成员。
总结:创建对象时(调用static代码块和static属性初始化)后执行普通代码块和普通属性(无先后看调用)。