Java之——“类和对象” 在学完C语言之后,想必我们对编程有了初步的了解,接下来,我们将解锁新的语言——JAVA,请大家跟着我的步伐来一起更好的理解C语言中没有提到的“类和对象”吧~~

前言

  • 在学完C语言之后,想必我们对编程有了初步的了解,接下来,我们将解锁新的语言——JAVA,请大家跟着我的步伐来一起更好的理解C语言中没有提到的“类和对象”吧~~

【学习目标】

  1. 掌握类的定义方式以及对象的实例化
  2. 掌握类中成员的变量和成员方法的使用
  3. 掌握对象的整个初始化
  4. 掌握封装特性
  5. 掌握代码块


一、面向对象的初步认识

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;
 }
}
  1. 这里的boygirl是两个引用,指向的是Student这个对象,可以通过new关键字配合类名实例化多个对象;
  2. 对象的成员属性在没有赋值时,引用类型为null,简单类型是0;
  3. 使用.来访问对象中的属性和方法;
  4. 同一个类可以创建多个对象;
  5. 每次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范围privatedefaultprotectedpublic
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加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行

总结

如果大家有耐心能看到这里,那么恭喜你们,应该能比较好的掌握“类和对象”这一章的内容了(由于我们没有学抽象类和接口,内部类会不好理解,所以把内部类放到后面介绍)!!!
突然发现有个投票哈哈哈~可以试一下,如果觉得这篇文章总结的对你们有用处,受到了启发,可以为我投上一个“鼓励票”,若是发现我的文章里面有问题,请大家多多指点,可以投上一个“改进票”!!!谢谢宝儿们的支持!!!

作者:Hi_Lyn原文地址:https://blog.csdn.net/Hi_Lyn/article/details/145176250

%s 个评论

要回复文章请先登录注册