类和对象
什么是类?
在java中,类是程序的最小组成单位,类是设计的图纸,是抽象出来的模型。
什么是对象?
也称为类的实例,对象是类的具体实现,是具体存在的实体,对象是类的实例,类是对象的模板。
如何定义一个类?
[修饰符] class 类名{ } 注意事项:
- 修饰符可以是public、abstract、final、或者是缺省(即包访问权限);
- abstract和final不能同时修饰程序元素,因为这样是矛盾的;
- 类名必须是合法的标识符,且最好遵循大驼峰命名法;
public class Person {// 成员变量。String name;int age;// 两只眼睛static int eyeNum = 2;// 方法public void hey(String name){System.out.println("hello, " + name);}// 构造器public Person(){}public Person(String name, int age){this.name = name;this.age = age;}}
如何使用对象?
通过new关键字创建对象,并借助构造器完成类的初始化; 对象在堆内存创建好之后,可以声明一个对象引用指向该对象;
public class Main{public static void main(String[] args){// p不是一个对象,p是一个引用,指向内存中的Person对象实例Person p = new Person("zhao", 21);// 调用方法p.hey("feng");}}
注意:
- 在Java中,一个对象被创建出来,保存在堆内存中;
- Java程序不能直接访问堆内存的对象,只能通过该对象的引用操作;
- 堆内存的对象可以有多个引用,多个引用指向同一个对象;
- 如果堆内存中的对象没有引用指向,程序就无法访问该对象,此时jvm会进行垃圾回收
类的成员
成员变量
定义成员变量
【修饰符】类型 成员变量名 【 = 默认值】
分类方式:
根据定义变量的位置分:
- 成员变量(直接在类中定义)
- 实例变量
- 类变量
- 局部变量
类变量:
使用static修饰的成员变量; 其生命周期是:从该类的准备阶段开始存在,直到系统完全销毁这个类
注意事项:
- 成员变量无须显示初始化,系统会为之进行默认初始化(与数组动态初始化时数组元素赋值规则一致)
- 静态成员不能直接 访问非静态成员
成员变量和局部变量的区别
- 局部变量除形参外,都必须显示初始化,否则不可以访问
- 在同一个类中,成员变量整个类都有效
- 当成员变量和局部变量重名时,可使用this或者类名作为调用者来调用
- 变量遵循就近原则
方法
定义方法
[修饰符] 返回值类型 方法名(形参列表){ // 0..N 条可执行语句构成的方法体 // return ; } 修饰符:public、protected、缺省、private、static、final、abstract 返回值类型:void、java中的基本数据类型和引用数据类型 return语句:根据方法签名的返回值类型一致
方法概述
方法是类或对象的行为特征的抽象;方法是类的重要组成部分 在Java语言中,方法不能独立存在,它要么属于类,要么属于对象; 定义方法必须在类体中,不能独立定义一个方法; 使用static修饰的方法是类方法,这个方法属于类;反之,属于类的实例; 同一个类里不同方法之间相互调用,被调方法是类方法,使用类作为调用者;
方法的参数传递机制
值传递:将实际参数值的副本传入方法内,而参数本身不会受到影响。
可变形参
在定义方法时,最后一个形式参数类型后增加
...,表示该参数可以接收0个或多个值
递归方法
本身在方法体内调用本身,通过设置的条件结束递归
方法重载
在同一个类中,可以存在多个同名方法,但其形参列表不同
构造器
[修饰符] 构造器名(形参列表){ // 0..N 条可执行语句构成的构造器体 } 修饰符:public、protected、缺省、private 构造器名:与类名一致 注:构造器不能定义返回值类型; 不能使用void声明构造器没有返回值; 当定义一个类时,若没有提供构造器,则系统默认提供一个无参的构造器;若显示提供,则只存在显示提供的; 构造器也支持重载,要求形参列表不一致; 构造器用用来完成对象的初始化工作,并不是创建对象;
创建对象的过程分析:
class Person{int age = 90;String name;Person(String name, int age){this.name = name;this.age = age;}}// 在main方法中执行// Person p = new Person("zhao", 21);
- 加载Person类信息,只加载一次
- 在堆中分配空间
- 完成对象的初始化
- 默认初始化(age = 0, name = null)
- 显示初始化(age = 90,name = null)
- 构造器初始化(age = 21, name = “zhao”)
- 实例对象在堆中的地址返回给p,p是对象的引用
代码块
内部类
Java关键字
this
