Java之——“类和对象” 在学完C语言之后,想必我们对编程有了初步的了解,接下来,我们将解锁新的语言——JAVA,请大家跟着我的步伐来一起更好的理解C语言中没有提到的“类和对象”吧~~
前言
- 在学完C语言之后,想必我们对编程有了初步的了解,接下来,我们将解锁新的语言——JAVA,请大家跟着我的步伐来一起更好的理解C语言中没有提到的“类和对象”吧~~
【学习目标】
- 掌握类的定义方式以及对象的实例化
- 掌握类中成员的变量和成员方法的使用
- 掌握对象的整个初始化
- 掌握封装特性
- 掌握代码块
类和对象
- 前言
- 一、面向对象的初步认识
- 二、类的定义和使用
- 三、类的实例化
- 四、`this`引用(重点!!!)
- 五、对象的构造及初始化
- 六、封装
- 1.封装的概念
- 2.访问限定符
- 3.封装扩展之包
- 4.自定义包(字母全小写)
- 自定义包操作步骤
- 1.在IDEA中先新建一个包:右键src>新建>包
- 2.在弹出的对话框中输入包名,例如com.csdn.lyn
- 3.在包中创建类,右键包名>新建>类,然后输入类名即可
- 4.此时可以看到我们的磁盘上的目录结构已经被IDEA自动创建出来了
- 同时我们也看到在新建的text1.java文件的最上方就出现了一个package语句
- 七、`static`成员
- 八、代码块
- 总结
一、面向对象的初步认识
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 用面向对象的思想来涉及程序,更符合人们对事物的认识,对于大型程序的设计、扩展以及维护都非常友好。
1.面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2.注意
面向过程和面向对象并不是一门语言,而是解决问题的方法,没有好坏之分,都有其专门的应用场景!!!
对象的产生依赖于类,那么,什么是类呢?
二、类的定义和使用
类是用来对一个实体(对象)来进行描述的
1.类的定义格式
在Java中定义类时需要用到class
关键字,具体语法如下
代码如下
class Student{
//成员属性
public String name;//姓名
public int age;//年龄
public double aveScore;//平均分
//成员方法
public void studentGreet(){
System.out.println("大家好!");
}
public void studentAge(){
System.out.println("我今年18岁了!");
}
}
这里的class
为定义类的关键字,Student
为类的名字,{ }
中为类的主体。
类中包含的内容成为类的成员;属性主要是用来描述类的,称之为类的成员属性或者类成员变量;方法主要说明类具有哪些功能,称之为类的成员方法。
2.注意
- 类名注意采用大驼峰定义
补充:
1.大驼峰约定只有一个单词的时候,首字母大写;有多个单词的时候,每个单词首字母均大写。例如(Student、MyFirstName)
2.小驼峰约定只有一个单词的时候, 首字母小写;有多个单词的时候,第一个单词首字母小写,其余均大写。例如(student、myFirstName )
- 一般一个文件中只定义一个类
public
修饰的类必须要和文件名相同main
方法所在的类一般要使用public
修饰
三、类的实例化
1.什么是实例化
用类类型创建对象的过程,称为类的实例化,具体方法如下
代码如下
public class text {
public static void main(String[] args) {
Student boy = new Student();//通过new实例化第一个对象
boy.name = "小明";
boy.age = 18;
boy.aveScore = 91.94;
Student girl = new Student();//通过new实例化第二个对象
girl.name = "丽丽";
girl.age = 19;
girl.aveScore = 92.09;
}
}
- 这里的
boy
和girl
是两个引用,指向的是Student
这个对象,可以通过new
关键字配合类名实例化多个对象; - 对象的成员属性在没有赋值时,引用类型为
null
,简单类型是0; - 使用
.
来访问对象中的属性和方法; - 同一个类可以创建多个对象;
- 每次
new
一个对象都会在堆上开辟一块内存,如下介绍。
2.对于对象在堆上存放的理解
3.类和对象的说明
- 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员
- 类是一种自定义的类型,可以用来定义变量
- 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
- 打个比方:类实例化出的对象就像现实中使用建筑设计图建造出的房子,类就像是设计图
四、this
引用(重点!!!)
1.引出this
引用
形参名不小心与成员变量名相同:
代码如下
public void setStudent(String name,int age,double aveScore){
name = name;
age = age;
aveScore = aveScore;
}
那函数体中变量到底是给谁赋值?成员变量给成员赋值?参数给参数?参数给成员变量?估计自己都搞不清楚了
接下来让我们一起让this
引用来揭开这层神秘的面纱
2. 什么是this
引用
this
引用指向当前对象,在成员方法中所有成员变量的操作,都是通过该引用去访问- 通过
this
引用可以访问当前对象的成员属性,建议所有变量都加this
this
引用的是调用成员方法的对象- 谁调用了当前的
setStudent
方法谁就是this
代码如下
public void setStudent(String name,int age,double aveScore){
this.name = name;
this.age = age;
this.aveScore = aveScore;
}
3.this
引用的特性
this
的类型:对应类类型引用,即哪个对象调用就是哪个对象的类型this
只能在“成员方法”中使用- 在“成员方法”中,
this
只能引用当前对象,不能再引用其他对象
五、对象的构造及初始化
1.构造方法(非常特殊的一个方法)
- 名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次
- 当一个类中没有任何一个构造方法时,Java会自动帮你提供一个不带参数的构造方法。当一个类中有一个构造方法时,Java不会帮你再提供构造方法
- 构造方法间可以构成重载
- 注意:构造方法的作用是对对象中的成员进行初始化,并不负责给对象开辟空间
代码如下
public Student(String name,int age,double aveScore){
this.name = name;
this.age = age;
this.aveScore = aveScore;
}
输出结果
- 构造方法中,可以通过
this
调用当前类中其他构造方法来简化代码 - 调用的时候,
this()
只能放在构造方法中的第一行
代码如下
public Student(){
System.out.println("测试调用构造方法");
}
public Student(String name, int age, double aveScore){
this();
}
2.就地初始化
- 在声明成员变量时,直接给出了初始值
代码如下
public String name = "李华";//姓名
public int age = 19;//年龄
public double aveScore = 91.23;//平均分
六、封装
1.封装的概念
- 面向对象程序三大特性:封装,继承,多态
- 什么是封装?
封装是对类的成员进行隐藏,通过关键字private
只对类外提供公开的接口 - 封装的意义?
可以隐藏类的实现细节,从而达到安全性
2.访问限定符
NO | 范围 | private | default | protected | public |
---|---|---|---|---|---|
1 | 同一包中的同一类 | √ | √ | √ | √ |
2 | 同一包中的不同类 | √ | √ | √ | |
3 | 不同包中的子类 | √ | √ | ||
4 | 不同包中的非子类 | √ |
public
:可以理解为一个人的外貌特征,谁都可以看到default
:对于自己家族中(同一个包中)不是什么秘密,对于其他人来说是隐私private
:只有自己知道,其他人都不知道,只能在当前类内直接使用
3.封装扩展之包
为了更好的管理类。把多个类收集在一起成为一组,称为软件包,有点类似于目录。
包是对类、接口的封装机制的体现,是一种对类或者接口的很好的组织方式,在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
4.自定义包(字母全小写)
- 在文件的最上方加上一个
package
语句指定改代码在哪个包中 - 包名需要尽量指定成唯一的名字,通常会用公司的域名的颠倒形式
- 包名要和代码路径匹配
- 如果一个类没有
package
语句,那么该类被存放到一个默认包中
自定义包操作步骤
1.在IDEA中先新建一个包:右键src>新建>包
2.在弹出的对话框中输入包名,例如com.csdn.lyn
3.在包中创建类,右键包名>新建>类,然后输入类名即可
4.此时可以看到我们的磁盘上的目录结构已经被IDEA自动创建出来了
同时我们也看到在新建的text1.java文件的最上方就出现了一个package语句
七、static
成员
1.引入
- 在Java中,被
static
修饰的成员,称之为静态成员,也可以成为类成员,其不属于某个具体的对象,是所有对象所共享的 static
修饰的成员变量,称之为静态成员变量,不依赖于对象- 【静态成员变量特性】
1.不存储在某个对象的空间中
2.既可以通过对象访问,也可以通过类名访问,但一般更推荐类型访问
3.类变量存放在方法区中
4.生命周期伴随类的一生,随类的加载而创建,随类的卸载而销毁
5.static
方法中不能使用this
2.static
修饰、访问成员方法
class Student{
private static String name = "李华";
public static String getStudentName(){
return name;
}
}
public class text {
public static void main(String[] args) {
System.out.println(Student.getStudentName());
}
}
八、代码块
代码块概念以及分类
- 使用
{}
定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可以分为以下四种
- 普通代码块
- 构造块
- 静态块
- 同步代码块
执行顺序:静态>实例>构造
1. 普通代码块(比较少见)
定义在方法中的代码块
public class text2 {
public static void main(String[] args) {
{
int x = 10;
System.out.println("x1= "+x);
}
int x =100;
System.out.println("x2= "+x);
}
}
/输出结果/
x1= 10
x2= 100
Process finished with exit code 0
2.构造代码块
定义在类中的代码块,也叫实例代码块,构造代码块一般用于初始化实例成员变量,位于方法外,类中。
实例代码块只有在创建对象时才会执行
public String name;
public int age;
//实例代码块
{
this.name = "李华";
this.age = 12;
}
public void show(){
System.out.println("姓名:"+name+"年龄"+age);
}
3.静态代码块
使用static
定义的代码块称为静态代码块,一般用于初始化静态变量
private static String name;
private static int age;
//静态代码块
static {
name = "李华";
age = 18;
}
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行
总结
如果大家有耐心能看到这里,那么恭喜你们,应该能比较好的掌握“类和对象”这一章的内容了(由于我们没有学抽象类和接口,内部类会不好理解,所以把内部类放到后面介绍)!!!
突然发现有个投票哈哈哈~可以试一下,如果觉得这篇文章总结的对你们有用处,受到了启发,可以为我投上一个“鼓励票”,若是发现我的文章里面有问题,请大家多多指点,可以投上一个“改进票”!!!谢谢宝儿们的支持!!!