一:面向对象的基本概念
1.1:面向对象的三大特性:
封装,继承,多态
2:类
把拥有相同特征、相同行为的群体称为类。 Java 中我们将拥有相同特征、行为的对象抽象成类 (class)
3:对象
指具体的某一个事物。在面向对象世界中,万事万物皆对象。
4:类和对象的关系
类是抽象表示,对象是具体的。类是对象的抽象(模板),对象是类的实例(具体)
1.2:定义类
1:定义类
(1)语法格式
[类修饰符] class 类名{ classBody }
(2):语法解析
类修饰符可以写,可以不写,目前一般用public
类名自定义,按照命名规范即可。类名的首字母要大写
class是声明类的关键字
classBody 可以有 类的成员、静态初始化、实例初始化、构造函数(方法)
(3):例题
public class Person{ }
2:类的字段
(1)定义字段的语法格式
[访问修饰符] 数据类型 字段名;
(2)例题
public class Person{ String name; //定义姓名字段 int age; //定义年龄字段 }
3:类的方法
(1)类的成员:
-
成员变量
-
类变量(static)
-
实例变量
-
-
成员方法
-
类方法(static)
-
实例方法
-
-
成员类/接口【后边介绍】
(2) 有 static 的方法属于类,叫做 类方法/static(静态)方法。用 类名.方法名([实参列表]) 来调用
-
没有 static 的属于 对象(实例),叫做 实例方法(instance-method)。 用 对象.方法名([实参列表]) 来调用
-
无论有无 static 都是成员方法, 都是类的成员
-
成员变量: 在类中(方法外)声明的变量, 在创建对象时会进行初始化(默认值)。
-
实例变量:: 每个对象的实例变量不共享。
(3)例题
在“人”的类中定义“介绍”的方法,用于描述人的行为。
public class Person { String name; //定义姓名字段 int age; //定义年龄字段 //定义工作方法 public void introduce() { System.out.printf("我是 %s,今年 %d 岁", name, age); } }
1.3:创建和使用对象
1:创建对象
类的对象可以调用类中的成员,如调用类的字段,调用类的方法等。
(1)创建对象的语法格式
类名 对象名 = new 类名();
(2)语法解析
new是关键字,称为实例化;
左边的类名为对象的数据类型;
右边的类名()称为类的构造方法。
2:使用对象
(1)语法格式
对象名.属性 对象名.方法名()
(2)例题
public class Person { //定义person类 String name; //定义姓名字段 String gender; int age; //定义introduce方法 public void introduce(){ System.out.printf("我是%s,性别是%s,今年%d岁了 \n",name,gender,age); } public static void main(String[] args) { Person songjiang = new Person(); //实例化对象宋江 //为各字段赋值 songjiang.name = "宋江"; songjiang.gender = "男"; songjiang.age = 18; songjiang.introduce(); //调用对象的introduce方法。 } }
二:对象的构造和初始化
调用构造方法时,步骤如下:
(1)分配新对象的空间,并进行默认的初始化。在 Java 中,这两步是不可分的,从而可 确保不会有没有初值的对象。
(2)执行显式的成员初始化。
(3)执行构造方法,构造方法是一个特殊的方法
2.1成员变量
2.1.1作用域
类中的字段是直接定义在类的内部、方法的外部的变量,称作成员变量。Person类中 的name、gender既不属于eat( )方法,也不属于work( )方法,而是属于Person类本身的 字段,它们都是Person类的成员变量,成员变量的作用域是整个类。当定义一个类的 成员变量时,可以选择在定义时进行初始化。这样做可以为成员变量指定一个默认 值。
举个例子,在Java中,你可以在定义一个Person类时将gender成员变量初始化 为"男",以表示性别默认为"男"。
2.1.2 成员变量和局部变量的区别
作用域不同。局部变量的作用域仅限定于定义它的方法,在该方法外无法被访 问。成员变量的作用域是在整个类内,所有的成员方法都可以使用它。如果访 问权限允许,还可以在类外部使用成员变量。 初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,Java会给它 赋一个默认值,byte、short、int、long类型的默认值是0,boolean类型的默认值 是false,char类型的默认值是'\u0000'(空字符),float、double类型的默认值是 0.0,引用类型的默认值是null。但是java不会给局部变量赋初始值,因此局部变 量在使用前必须初始化。
2.2 构造方法
2.2.1:构造方法的定义
[访问修饰符] 方法名 ([参数列表]){ //省略方法体的代码 }
构造方法的分类:默认构造方法和自定义构造方法。
语法解析
构造方法没有返回值
默认的构造方法没有参数
构造方法的方法名必须与类名相同。
例题
为person1类定义一个构造方法
public class Person1 { int age; String name; public Person1(){ this.name = "喵星人"; this.age = 23; }
2.2.3 方法重载
1:方法重载的定义
是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数或参数顺序。
2:如何构造方法的重载
3:static的作用:
static 表示静态的,可以修饰字段和方法。
被static修饰的字段或方法属于类,通过类名调用. 也可以被 对象调用 【但是不推荐】
没有 static 修饰的属于对象,通过对象来调用
static 成员可以相互调用(使用), non-static(instance)可以互相调用,也可以调用 static 的 static 成员属于类,多个对象共享
4:实例化的过程
-
第一次加载类时进行静态初始化(只执行一次)
-
每次创建对象时,先进行实例初始化再执行构造 ps: 实例初始化的位置会影响实例变量最终的值(Java代码优化)
-
执行构造
5:静态初始化
可以有多个,在类第一次被加载的时候执行,且只会执行一次。
初始化语法
static{ //静态初始化代码块 }
静态初始化的执行顺序是按照代码块在类中出现的顺序依次执行的。
实例初始化
在实例化的时候执行,且每次实例化都会执行。