面向对象
面向对象是一种思考问题的方式,以对象的形式来思考问题
类:是对象描述 ,类是对象的抽象(抽象:提取对象的共性)
对象:是实实在在存在的个体,它是类具体实现,也叫做类的实例
对象创建的过程(new 类名()),叫做对象的实例化
类的定义:
[修饰符] class 类名
{
构造器 //对应的是对象的创建方式
成员变量 //对应的是对象的属性
成员方法 //对应的是对象的行为(功能)
}
构造器(构造方法,构造函数):
如果不提供有参数的构造器,jvm会提供一个默认的无参构造器
[修饰符] 类名()
{
方法体
}
如果类中提供了有参构造器,则jvm就不再提供无参构造器,如果需要使用无参构造,则需要自己定义
有参构造器
[修饰符] 类名(参数数据类型 参数名...)
{ }
如果一个类中同时存在,无参构造器和多个有参构造器,这个叫做构造器的重载
成员变量:
存在于类中,但是处于成员方法以外
作用域: 从声明的地方开始,到类的结束
成员变量是有默认值(缺省值)的,根据数据类型的不同,初始值是不同,如果是int类型的, 初始值是0 ,如果是引用类型,初始是null
成员变量,可以用修饰符修饰
局部变量:
存在于成员方法中,注意:参数是特殊的局部变量
作用域:从声明的地方开始,到方法的结束
局部变量没有默认值
只能用final修饰
成员方法:
[修饰符] void|返回值的数据类型 方法名([参数类型 参数名 , ...])
{
方法体 也叫作代码块
}
对象的创建和使用
对象的创建
类名 对象名 = new 类名([参数,...]);
对象的使用
获得对象的属性
数据类型 变量名 = 对象名.属性名
修改对象的属性
对象名.属性名 = 属性值 ;
调用对象的方法
对象名.方法名();
方法的重载
1,在同一个类中
2,方法名相同
3,参数不同:参数个数,参数顺序,参数类型 (满足其中之一,则视为参数不同)
this关键字的使用
每一个类中都有两个特殊的成员变量,一个是this,一个是super
this 里面存储的当当前对象的地址 ,代表就是当前对象
this有两个用法:
1,当成员变量名和局部变量名发生冲突的时候,可以使用 this.变量名 标注成员变量
2,当一个构造器需要调用本类的其他构造器时,可以使用this()进行调用,但是this()必须写在构造器方法体的第一行
static(静态的)是修饰符,可以用来修饰成员变量和成员方法
static 修饰成员变量
有static修饰的成员变量叫做类变量 也叫做 类成员变量 也叫做静态变量
没有static修饰的成员变量 叫做实例变量 这里的实例指的是对象
有static修改的成员变量,是所有对象共有的变量
使用及修改需要 用类名.变量名
static 修饰成员方法
有static修饰的成员方法叫做类方法,也叫做静态方法
没有static修饰的成员方法叫做实例方法 这里的实例指的是对象
有static修饰的成员方法是所有该类对象共有的方法
调用的时候,可以使用对象名.方法名(); 也可以使用类名.方法名();
java程序的运行,首先jvm将class文件加载到jvm中,这时会同时把静态变量和静态方法同时加载到jvm
当创建该类对象的时候,jvm才会加载实例变量和实例方法
静态方法可以访问静态变量和静态方法,但是不能访问实例变量和实例方法
实例方法可以访问静态方法和静态变量也可以访问实例方法和实例变量 即 实例方法可以访问类中所有的变量及方法
static 修饰代码块
代码块:一般用作初始化工作
{ 代码 }
有static修饰的代码块,叫静态代码块,一般用于初始化一些静态的变量
静态代码块,在class文件被加载时执行,程序运行期间,只会执行一次
当第一次创建对象的时候,执行顺序是
先加载class文件,然后是按照顺序 加载静态变量,静态方法,静态代码块(这里的顺序指的是源文件的编码的顺序)
然后会执行一次静态代码块
然后按照顺序 执行实例代码块
创建对象的时候是先执行实例代码块再执行构造器
没有static修饰的代码块,叫做实例代码块,一般用于初始化工作
实例代码块,每次创建对象时,都会执行一次
引用:
Person p = new Person() ;
这个p就是一个引用数据,其实p里存的不是真正的对象,而是对象在内存中的地址
Java中的内存 栈 堆 方法区
栈中的数据:如果是基本数据类型,则存储的是数据
如果是引用数据类型,则存储的是地址
所有的方法的运行都是在栈中,每运行一个方法,jvm就会在栈内存开辟一个空间,用来存储方法中的变量
引用数据类型,在栈中存储的是一个地址,这个地址指向的是对象在堆内存中的实际位置
每创建一个新的对象,jvm就会在堆内存中去开辟一个空间,存放该对象的属性,而方法存在于方法区
Java中的引用数据类型有哪些?
数组,类,接口
思考:数组中数,存在哪? //在堆内存中
int a = {1,2,3,4,5,6} ;
栈内存中的a的值是什么? 是地址 指的是数组中的数在堆内存中的实际的位置
引用
Person p = new Person() ;
p 中存储的是对象在内存中的地址
程序运行过程中,一旦新建对象,那么该对象时存储在堆内存中
方法的运行都是在栈内存中,每运行一个方法,jvm就会在栈内存中开辟一个空间,用于存储该方法运行时产生的变量
如果变量的数据类型是基本数据类型 则存储的是真实数据
如果变量的数据类型是引用数据类型 则存储的是数据在堆内存中的地址
this 关键字
Java的类中有两个特殊的成员变量,一个是this,代表当前对象的引用,this中存放的是当前对象的地址
另一个是super 代表的是当前对象的父类对象 super中存放的是当前对象的父类对象在堆内存中的地址
this关键字的作用:
1,当类中的成员变量和局部变量重名时,可以通过this.变量名来标注成员变量
2,当一个构造器需要调用类中其他的构造器时,可以使用this([参数...])来进行调用
注意:构造器只能被构造器所调用,不能再成员方法中调用构造器
如果一个构造器需要调用另一个构造器,则this([参数....])必须位于构造器方法体中的第一行
static关键字 就是一个修饰符 可以用来修饰成员变量,成员方法,代码块,类
static修饰成员变量
有static修饰的成员变量叫类变量 也叫做 静态变量 是该类所有对象共享的变量 调用方法推荐使用类名.变量名
没有static修饰的成员变量叫做实例变量 这里的实例指的是对象
static修饰成员方法
有static修饰的成员方法叫做类方法,也叫做静态方法,是该类所有对象共享的方法 ,调用 推荐使用 类名.方法名([参数...]);
没有static修饰的成员方法叫做实例方法,调用 对象名.方法名([参数....]);
static修饰代码块
有static修饰的代码块叫做静态代码块,主要就是用来做一些初始化工作,比如初始化静态变量
在程序运行的整个过程中,只会执行一次
没有static修饰的代码块叫做实例代码块,主要用于一些初始化的工作,比如初始化实例变量
每创建一个对象,就会执行一次
实例代码块和构造器谁先执行? 代码块先执行
注意:
1,静态代码块,静态方法只能访问静态变量,静态方法,不能访问实例方法,实例变量
2,实例方法,实例代码块 可以