java基础
后续添加
文章目录
前言
java是一门面向对象的语言,其中的类与对象的概念是必须要掌握的内容。
本章先介绍面向对象中类与对象的概念,下一章介绍面向对象中的其他概念。
一、面向对象概述
1.面向对象介绍
面向对象:是一种编程范式或编程思想,这种思想在思考和解决问题时会将问题中的事物抽象成为对象,然后通过分析对象间的交互来解决问题。
与之对应的另一个编程范式称为面向过程。
面向过程:在思考和解决问题时会思考每一步该做的步骤是什么,然后合理的使用这些步骤解决问题。
打个比方,如果一个人要吃火锅,那现在要解决吃火锅的问题,两种思想的解决步骤可能如下:
面向对象:
我要吃火锅要以下这些对象:锅、筷子、碗。
然后它们有如下功能:
锅:煮菜
筷子:夹菜
碗:盛菜
然后我们使用锅煮菜、使用筷子夹菜、使用碗盛菜成功吃上火锅。
面向过程:
我们要吃火锅,那么我应该按以下步骤执行:
- 将菜放到锅里煮
- 用筷子夹起菜
- 把菜放到碗里吃
2.三特性
要学习java的面向对象,先了解其具有的三大特性:封装、继承、多态。
- 封装:将数据以及相关联的操作放到一起成为一个整体,将这个整体(对象)提供给外部使用。
- 继承:不同的对象之间可以有父子关系,让子可以具有父的一些东西(数据、特性等)
- 多态:子类除了有父类的特性外,还可以有自己的特性。不同子类之间的特性也可以不一样。
二、类
类是对一堆有共性的对象的描述,比如有两个人——张三、王五,它们作为人有这样一些共性:
从属性上说有这些共性:
有两只眼睛、一个鼻子(其他省略)。
从行为上说有这些共有行为:
直立行走(其他省略)。
于是我们在一个类(class)中来描述这些特征和行为。而张三和王五就是这个类的对象。
1.成员
一个类中可以存放数据和方法,对应来描述特征和行为。
public class Student {
// 成员属性
int a=10;
// 成员方法
public void setA(int a) {
this.a = a;
}
}
2.权限修饰符
权限修饰符可以决定一个类的成员对外公开的程度。
- private:仅类内部可见
- default(默认情况):同包下其他类可见
- protected:同包其他类,子类可见
- public:不同包其他类也可见
3.局部变量
定义在代码块中的变量(方法体也是一个代码块),仅此代码块可用。
public class Student {
//成员变量,可以在类的任意位置使用
int c=10;
//对于method1方法来说,定义了a、b两个局部变量以供使用。
void method1(int a){
int b=0;
System.out.println(a+b);
}
}
在类中的方法中定义的变量,只能在当前代码块使用,这里需要注意的是,方法的参数也是一个可以使用的局部变量。
成员变量与局部变量的区别:
- 定义位置不同:局部变量定义在代码块中,成员变量定义在类中方法外。
- 在内存中的位置不同:成员变量随对象一起存储在堆内存中,但局部变量随方法调用时一起存储在栈内存中。
- 生命周期不同:成员变量随对象存在和消失,局部变量随方法调用存在方法调用完消失。
- 初始化不同:变量在使用前必须初始化,成员变量如果我们不显式赋值初始化则会由jvm赋予一个默认值。但局部变量必须由我们进行显式赋值进行初始化。
4.this关键字
this关键字中会存储当前对象的地址。
当前对象:即使用this的对象。
当方法中的局部变量名与成员变量名起冲突时,可以使用this关键字来标记成员变量,用以区分。
当然,this也有其他的应用场景,这里先不多说。
public class Student {
int a=10;
public void setA(int a) {
//被this引用的是成员变量
this.a = a;
}
}
5.构造方法
构造方法也是类的成员,但他与普通方法不一样,构造方法用来创建类的对象。也可以在创建对象时初始化对象的属性。
public class Student {
int a=10;
//构造方法,名称要与类名一致
public Student(int a) {
this.a = a;
}
}
特点
- 构造方法没有返回值且与类同名,一般用来进行一些初始化操作
- 如果不手动定义,则会由jvm虚拟机创建一个默认的无参构造器给该类。
- 如果自己仅手动定义了有参构造器,则jvm也不会再提供无参构造器。
三、对象
对象是类的实例,类是对对象的抽象描述。
1.对象的创建与使用
创建对象
类名 对象名=new 类名()
public class Demo2 extends Exception{
public static void main(String[] args) {
Student s = new Student(1);
System.out.println(s.a);
}
}
有一个名为Student的类,使用new Student()已经创建好的该类的对象,前面的s是被引用来存放该对象的变量,使用new Student()和使用s是等效的.于是有时会见到链式写法:
new Student().a
调用对象属性
对象名.成员变量(属性)
调用对象方法
对象名.成员方法()
2.对象的销毁
当对象的生命周期结束,应该回收对象所占用的内存,java有完整的垃圾回收机制
可以自动销毁垃圾对象。
会被当作“垃圾”的对象有:
超过其作用范围的对象;
被置为“null”的对象
即可以理解为:当一个对象不再被使用,就会被垃圾回收机制定义为垃圾,并等待回收。
object类中有一个finalize()方法,在自己的类中重写此方法可以在销毁对象前做一些工作但该方法在已被标记为过时。
垃圾回收器自动工作,但必要时也可以使用system.gc()方法强制开启
3.内存分析
待补
总结
本章简单介绍了一些面向对象中类与对象的概念