首页 > 编程语言 >Java类和对象详解(上)

Java类和对象详解(上)

时间:2024-10-24 19:50:46浏览次数:3  
标签:Java 构造方法 对象 成员 构造 int 详解 public

目录

前言

 一.类和对象的定义

1.什么是一个类?

2.类的定义格式 

3.一个类中应该有什么

 4.什么是对象

二.类的实例化

1.什么是实例化?

2.实例化在内存中的使用情况:

 三.构造方法(构造器)

1.什么是构造方法

2. 默认初始化

3.this关键字

3.1为什么要有this关键字

3.2什么是this引用

3.3this引用的特性

 4.构造器的使用

 四.封装

1.访问限制符

2.包的概念 

2.1怎样创建一个包

五.小结


前言

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人 们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

 一.类和对象的定义

1.什么是一个类?

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

比如:小猫,在Java中可以将其看成一个类别。

属性:毛皮颜色,四条腿的长短,体重,身高……

功能:喵喵叫,玩绣球

2.类的定义格式 

在java中定义类时需要用到class关键字,如下图,我们打开idea选择Class然后输入想创建的Name,点击回车,就会创建一个类。

3.一个类中应该有什么

如下:

// 创建类 class ClassName{      

            field;           // 字段(属性) 或者 成员变量

            method;      // 行为 或者 成员方法

}

 这里有一些注意事项需要注意:

  1. 类名注意采用大驼峰定义
  2. 成员前写法统一为public
  3. 此处写的方法不带 static 关键字

 4.什么是对象

当我们构造完一个类,在此基础上,我们可以创建对象,通过对象可以对成员变量进行初始化,也可以调用成员方法。

二.类的实例化

1.什么是实例化?

通过new关键字,配合类名就可以实例化对象。用类类型创建对象的过程,称为类的实例化

Person p = new Person();

一些注意事项:

  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.
  • 同一个类可以创建对个实例.

2.实例化在内存中的使用情况:

 三.构造方法(构造器)

1.什么是构造方法

  • 构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
  • 构造器没有返回值,也没有返回类型(void也不行)。
  • 构造器可以进行方法的重载。
  • 构造器一般使用public修饰符
  • 构造方法不是必须的,因为会默认给一个构造器。
  • 构造方法只能通过new或this调用。
  • this(...)必须是构造方法中第一条语句

2. 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

这是因为在Java中,对象成员(即成员变量)的默认初始值取决于其数据类型。以下是常见数据类型及其默认值:

数据类型默认值
byte       0
char'\u0000'
short0
int0
long0L
booleanfalse
float0.0f
double0.0
referencenull

对象空间被申请好之后,对象中包含的成员已经设置好了初始值。

3.this关键字

3.1为什么要有this关键字

请看下面代码

public class Date {
    public int year;
    public int month;
    public int day;

    public void setDay(int y, int m,int d){
        year=y;
        month=m;
        day=d;
    }
    public void printDate(){
        System.out.println(year + "/" +month +"/"+day);
    }

    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();

        d1.setDay(2020,9,15);
        d1.setDay(2020,9,16);
        d1.setDay(2020,9,17);

        d1.printDate();
        d2.printDate();
        d3.printDate();
    }
}

以上代码定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打 印,代码整体逻辑非常简单,没有任何问题。

但是仔细思考一下你会发现如下疑问:

1. 形参名不小心与成员变量名相同:(like this)

public void setDay(int year, int month, int day){
    year = year;
    month = month;
    day = day;
}

那函数体中到底是谁给谁赋值?这是一个问题。

那么我们该如何解决这个问题呢?

那就是this关键字。

3.2什么是this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该 引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

虽然有时候并不影响代码,在我们学习了this之后,调用成员变量时最好都加上this,减少后期修改的工作量。

3.3this引用的特性

  • this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。
  • this只能在"成员方法"中使用。
  • 在"成员方法"中,this只能引用当前对象,不能再引用其他对象。
  • this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收。

 4.构造器的使用

1.

  • 不是说构造器是类的一部分吗?为什么我们不定义构造器代码也能正常运行?
  • 这是因为啊。编译器在进行编译时,系统会自动增加一个无参数构造方法。

 2.

  • 提出一个问题,当我们定义了构造器后,系统还会自动增加无参构造器吗?
  • 当然不会,所以当我们定义了一个有参构造器时,我们还需要定义一个无参构造器,否则编译器就会报错!

 3.

  • 普通成员方法中 this 可以引用构造方法吗?
  • 不可以!! 但是可以引用其他成员方法,以及构造方法才能互相调用!

4.

  • 每个构造器都可以互相调用吗?
  • 不可以!!!构造方法之间的调用不能闭环

 5.

  •  与类同名的不一定就是构造方法。 比如在构造方法前加入变量类型就会变成一个成员方法,大家动手试试!

 四.封装

面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节

1.访问限制符

范围privatedefualtprotectedpublic
1同一包的同一类中
2同一包的不同类中
3不同包中的子类
4不同包中的非子类
  • public:可以理解为一个人的外貌特征,谁都可以看得到
  • default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了(也是什么都不写时的默认权限)
  • private:只有自己知道,其他人都不知道
  • protected:主要是用在继承中

2.包的概念 

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件 包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件 下,也可以对某个文件夹下的音乐进行更详细的分类。

2.1怎样创建一个包

包的命名一般是域名的倒置。创建方式如图:

倒置域名

小tips:不同包的类名可以重复

五.小结

本次分享到此结束,感谢您的阅读,如果您觉得我写的还不错或者对您有帮助,请留下您宝贵的点赞,如果您发现我写的有什么错误,欢迎评论区留言!

标签:Java,构造方法,对象,成员,构造,int,详解,public
From: https://blog.csdn.net/2402_83799883/article/details/143057732

相关文章

  • 日语学习《红宝书新日本语能力考试N1·N2·N3·N4·N5文字词汇(详解+练习)》PDF分享
    ​​《红宝书:新日本语能力考试文字词汇(详解+练习)》系列丛书自出版以来,广受好评,成为很多参加能力考试的学习者的必备用书。《红宝书:新日本语能力考试文字词汇(详解+练习)》按新日语能力考试指南和新真题编写,收录词汇量达6300多个:涵盖必须掌握的重点词汇3324个,涵盖重要补充词汇300......
  • 0基础学java之Day14
    Object含义:基类也叫做超类,Object是所有类的祖先类注意:如果一个类没有明确继承的父类,默认继承Objectequals:比较两个对象内存地址是否相同hashCode():获取对象的hash值注意:1.hash码是内存地址+散列算法得到的一个数字2.hash码不等于内存地址3.hash码可能相同getClass:......
  • Java类和对象详解(下)
    目录前言:一.static关键字 1.static修饰成员变量2..static修饰成员方法3.静态代码块 二.代码块 1.普通代码块2.静态代码块3.静态代码块三.继承1.什么是继承2.为什么要继承3.继承的使用 4.父类的访问(super关键字)5. 子类构造方法6.代码执行顺序 7.组......
  • 基于Java的高校成绩报送系统的设计与实现(11870)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • java启动命令详解
    java-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002-server-Xms4g-Xmx6g-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/data/data/dump.bin-Dfile.encoding=UTF-8-Djava.awt.headless=true-XX:+UseG1GC-XX:MaxGCPauseMillis=200-XX:G1H......
  • JavaFX+JavaCV实现批量视频处理及批量生成视频开发笔记--003,批量视频混剪功能设计与代
    我要使用JavaFX+JavaCV实现一个桌面应用,可以打包成Windows和Mac的桌面应用。实现的功能是:批量视频混剪。具体操作是:在界面上选择一个文件夹或多个视频文件,对文件夹中的所有视频文件(仅.mp4格式)或者选中的文件进行处理,随机截取原视频中指定长度的视频片段(如5秒),拼接成多个新的......
  • 梯度下降(Gradient Descent)详解
    梯度下降(GradientDescent)详解梯度下降是一种优化算法,广泛应用于机器学习和深度学习中,用于最小化损失函数,即通过调整参数来减少模型错误的方法。梯度下降的核心思想是:通过计算损失函数的梯度(即导数),然后沿着梯度下降的方向更新模型的参数,以达到减少损失的目的。基本原理......
  • 实验2 类和对象_基础编程1
    实验任务1:实验代码:1#include<string>23//类T:声明4classT{5//对象属性、方法6public:7T(intx=0,inty=0);//普通构造函数8T(constT&t);//复制构造函数9T(T&&t);//移动构造函数10~T();......
  • Day10 函数基础+函数三种定义形式 + 函数的返回值、对象和参数 + 可变长参数
    目录0上节课复习0.1文件是什么0.2操作文件的步骤0.3open0.4指针操作0.5文件的复制1函数基础1.1函数的作用1.2函数的定义形式1.3函数定义的两个阶段2定义函数的三种形式2.1无参函数2.2有参函数2.3空函数3函数的返回值4函数对象5函数参数的应用5.1函数定义分为两个......
  • 12万字的java面试题及答案整理(2024新版)
    前言本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***final有哪些用法?final也是很多面试喜欢问的地方,但我觉得这个......