JavaSE入门---认识类和对象

文章目录

  • 什么是面向对象?
  • 认识类
    • 类的定义格式
    • 类的实例化
  • 理解this引用
  • 对象的构造及初始化
    • 什么是构造方法?
    • 如何进行初始化?
      • 默认初始化
      • 就地初始化
  • 认识static
    • static修饰成员变量
    • static修饰成员方法
  • 认识代码块
    • 普通代码块
    • 构造代码块
    • 静态代码块
    • 同步代码块
  • 认识内部类
    • 实例内部类
    • 静态内部类
    • 局部内部类
    • 匿名内部类

什么是面向对象?

Java是一门面向对象的语言(Object Oriented Program,简称OOP)。而面向对象呢,则是一种解决问题的思想:它主要依靠对象之间的交互来完成一件事情。我们平时解决问题时通常会采用面向过程的思想,即:依靠一步步完成具体步骤来完成一件事情。那这两者有什么区别呢

我们以洗衣服为例:
在这里插入图片描述

注: 面向对象和面向过程都只是解决问题的方法,没有好坏之分,都有其对应的应用场景。 只是Java采用了面向对象的思想罢了。

认识类

既然我们是要面向对象编程,那么什么是对象呢? 对象就是现实生活中存在的实体(具体的东西,比如 洗衣机)。现实中我们操作洗衣机就需要知道它的各项参数,像最大容纳数、电压、功率等待;而我们在面向对象编程的时候同样也需要知道这些参数,那这些参数保存在哪里呢? 保存在类里! 类就是用来对一个实体对象进行描述的

类的定义格式

//创建类
class ClassName{  //ClassName是类名,可以根据场景自己定义 field;        //属性,也叫做成员属性method;       //行为,也叫做成员方法
}
//以洗衣机为例,具体完整的定义一个类
class WashMachine{public String brand;          //品牌public String type;           //型号public String color;          //颜色public double weight;         //重量public double length;         //长度public double height;         //高度public void washClothes(){    //洗衣服的行为}public void dryClothes(){     //甩干衣服的行为}
}

注: 类名使用大驼峰定义。

类的实例化

定义了一个类,就相当于在计算机中自定义了一种新的类型,与int、double这样的基本数据类型相似。要想使用就要借助变量来存储数据,只不过在使用类时这里的变量叫做“对象”罢了。

类的实例化:就是用类 类型来创建对象的过程。

 	public static void main(String[] args) {WashMachine washMachine = new WashMachine();   //用new来创建对象  类似于创建变量的过程String brand = washMachine.brand;              //使用对象来获取到属性washMachine.washClothes();                     //使用对象来使用类中的方法}

注:

  1. new关键字用于创建一个对象的实例。
  2. 使用 . 来访问对象中的属性和方法。
  3. 一个类可以创建多个对象,每个对象都包含这个类完整的属性和方法。

理解this引用

什么是this引用呢? this引用的是调用成员方法的对象,在成员方法中所有成员变量的属性,都是通过该引用去访问的

class WashMachine{public double weight;         //重量public double length;         //长度public double height;         //高度public void setValue(double weight,double length, double height){this.weight = weight;this.length = length;this.height = height;}
}
public class test {public static void main(String[] args) {WashMachine washMachine = new WashMachine();washMachine.setValue(20.0,100.0,80.0);}
}

在这里插入图片描述

注:

  1. this只能在成员方法中使用;
  2. 在成员方法中,this只能引用当前对象,不能引用其他对象。

对象的构造及初始化

通过new创建出对象后,对象内的属性值是空值,我们一般使用时都需要对其赋值。那怎样赋值呢? 就会用到构造方法。

什么是构造方法?

构造方法是一个特殊的成员方法,它的作用是对 对象中的成员进行初始化,并不负责给对象开辟内存空间。

	public WashMachine(double weight, double length, double height){this.weight = weight;this.length = length;this.height = height;}

注:

  1. 构造方法名字必须与类名相同。
  2. 没有返回值类型,设置成void也不行;
  3. 构造方法在创建对象时,由编译器自动调用,并且在对象的生命周期内只调用一次。
  4. 构造方法可以重载:用户可以根据自己的需求提供不同参数的构造方法
    public WashMachine(){}//带有一个参数的构造方法public WashMachine(double weight){this.weight = weight;}//带有俩个参数的构造方法public WashMachine(double weight, double length){this.weight = weight;this.length = length;}//带有三个参数的构造方法public WashMachine(double weight, double length, double height){this.weight = weight;this.length = length;this.height = height;} ```5. 如果用户没有显示定义,编译器会默认生成一个无参的构造方法。
6. 在构造方法中可以通过this调用其他的构造方法来简化代码。```java 	//无参的构造方法public WashMachine(){// 在无参的构造方法中通过this调用有三个参数的构造方法this(20.0,100.0,80.0);} ```+ 在这种情况下,this...)必须是构造方法的第一条语句,不然会报错。+ 不能形成环,即嵌套调用:```java 	//无参的构造方法public WashMachine(){// 在无参的构造方法中通过this调用有三个参数的构造方法this(20.0,100.0,80.0);}//带有三个参数的构造方法public WashMachine(double weight,double length,double height){// 在带有三个构造方法中调用无参的构造方法this();} ```7. 大部分情况下构造方法用public修饰,特殊情况下用private修饰(单例模式)

如何进行初始化?

默认初始化

在搞清楚默认初始化是怎样执行前,我们需要先明白new操作到底是怎样执行的(干了些什么事儿)?

  1. 检测对应的类是否加载了,如果没有则加载。

  2. 为对象分配内存空间

  3. 处理并发安全问题

  4. 初始化所分配的空间,这就是我们这里的默认初始化
    在这里插入图片描述

  5. 设置对象头信息

  6. 调用构造方法给对象中的每个成员赋值

就地初始化

在声明成员变量时,就直接给出初始值。 (不常用)

class WashMachine {public double weight = 20.0;         //重量public double length = 100.0;         //长度public double height = 80.0;         //高度
}

认识static

在Java中,被static修饰的成员称为静态成员,也可以称为类成员。其不属于某个具体的对象,而是所有对象共享的(所有对象都公有的一个属性)

static修饰成员变量

class WashMachine{public double weight = 20.0;public double length = 100.0;public static double height = 80.0;
}
public class test {public static void main(String[] args) {//可以直接通过类名访问double height = WashMachine.height;//也可以通过对象访问WashMachine washMachine = new WashMachine();double height1 = washMachine.height;}
}

注:

  1. 既可以通过对象访问,又可以通过类名访问。更推荐用类名访问。
  2. 生命周期伴随类的一生:随类的加载而创建,随类的卸载而销毁。

static修饰成员方法

class WashMachine{public static double height = 80.0;public static void sayHi(){System.out.println("hi");}
}
public class test {public static void main(String[] args) {//通过类名访问静态方法WashMachine.sayHi();//通过对象访问静态方法WashMachine washMachine = new WashMachine();washMachine.sayHi();}
}

注:

  1. 可以使用对象调用,也可以使用类名调用。更推荐使用类名调用。
  2. 不能在静态方法中访问任何的非静态成员变量。因为静态方法是随着类加载而加载的,而非静态的成员变量得创建对象时才有加载的时机较晚,在使用静态方法时还没有非静态的成员变量

认识代码块

使用{}定义的一段代码称为代码块。根据代码块定义的位置和关键字,可以分为以下四种。

普通代码块

普通代码块:定义在方法中的代码块 (使用较少)

	public static void main(String[] args) {{int a = 10;System.out.println(a);}System.out.println("执行了普通代码块");}

构造代码块

构造代码块:定义在类中的代码块(也叫实例代码块),一般用于初始化成员变量。

class WashMachine{public double weight;public double length;public double height;{this.weight = 20.0;this.length = 100.0;this.height = 80.0;}}

静态代码块

静态代码块:在类中使用static定义的代码块,一般用于初始化静态成员变量。

class WashMachine{public double weight;public double length;public static double height;{this.weight = 20.0;this.length = 100.0;}static {height = 80.0;}}

注: 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并成一个静态代码块。

同步代码块

后续多线程介绍。

认识内部类

当一个事物的内部还有一个部分需要一个完整的结构来进行描述,而这个完整的结构又只为外部事物提供服务,那么这个内部的完整的结构最好使用内部类。

在Java中,内部类可以定义在一个类内部或者一个方法内部。

注:

  1. 定义在class 类名{} 花括号外部的,即使在一个文件里都不能称为内部类。
  2. 内部类和外部类共用同一个Java源文件,但是经过编译之后,内部类会形成单独的字节码文件。

实例内部类

实例内部类:在外部类里,未被static修饰的成员内部类(成员位置确定)。

class OutClass{public int a = 1;class InnerClass{public int a = 1;public static final int data = 5;}
}

注:

  1. 要想在实例内部类里定义静态的成员变量,则 这个静态成员变量必须被final修饰。
  2. 不能在实例内部类中定义静态的成员方法。
  3. 在实例内部类中可以直接访问外部类里:任意访问限定修饰符修饰的成员。
  4. 如果内部类和外部类中具有相同名称成员时,内部类访问时优先访问的是自己的;要想访问外部类同名成员时,必须:外部类名称 . this . 同名成员名字。如果这个同名成员还时静态的,则直接:外部类名称 . 同名成员名字。
  5. 创建内部类的两种方式: 都必须依赖外部类
    1> 直接创建 ```java
    OutClass.InnerClass innerClass = new OutClass().new InnerClass();
   ```java 	OutClass outClass = new OutClass();OutClass.InnerClass innerClass = outClass.new InnerClass(); ```6. 外部类中不能直接访问实例内部类中的成员,如果要访问必须要先创建外部类的对象。

静态内部类

静态内部类:在外部类里,被static修饰的成员内部类。

class OutClass{public int a = 1;static class InnerClass{public int a = 1;}
}

注:

  1. 在静态内部类中只能访问外部类中的静态成员。
  2. 创建静态内部类对象时不需要先创建外部类对象
        OutClass.InnerClass innerClass = new OutClass.InnerClass();

局部内部类

局部内部类:定义在外部类的方法体或者{}中,该内部类只能在其定义的位置使用。(一般使用非常少)

class OutClass{public int a = 1;public void method(){class InnerClass{public void print(){System.out.println(a);}}InnerClass innerClass = new InnerClass();innerClass.print();}}

注:

  1. 局部内部类只能在其定义的方法体内部使用。
  2. 不能被public等修饰符修饰。
  3. 编译器也会生成自己的独立的字节码文件 命名格式:外部类名字$内部类名字.class

匿名内部类

匿名内部类:定义在外部类的方法体或者{}中,没有明确的类名。

 	public static void main(String[] args) {Thread thread = new Thread(){@Overridepublic void run() {System.out.println("这是匿名内部类");}};}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164861.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第五十七天 | 392.判断子序列、115.不同的子序列

392.判断子序列 链接: 代码随想录 115.不同的子序列 链接: 代码随想录

零基础新手也能会的H5邀请函制作教程

随着科技的的发展,H5邀请函已经成为了各种活动、婚礼、会议等场合的常见邀约方式。它们不仅可以提供动态、互动的体验,还能让邀请内容更加丰富多彩。下面,我们将通过乔拓云平台,带领大家一步步完成H5邀请函的制作。 1. 选择可靠的…

Windows + Msys 下编译 TensorFlow 2.14

安装基本工具 宁滥毋缺 pacman -S --noconfirm --needed base-devel vim tar wget unzip protobufpacman -S --noconfirm --needed \${MINGW_PACKAGE_PREFIX}-cmake \${MINGW_PACKAGE_PREFIX}-gcc \${MINGW_PACKAGE_PREFIX}-toolchain \${MINGW_PACKAGE_PREFIX}-boost \${MING…

Go语言入门心法(十):Go语言操作MYSQL(CRUD)|事务处理

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

设置hadoop+安装java环境

上一篇 http://t.csdnimg.cn/K3MFS 基本操作 接着上一篇 先导入之前导出的虚拟机 选择导出到对应的文件夹中 这里修改一下保存虚拟机的位置(当然你默认也可以) 改一个名字 新建一个share文件夹用来存放共享软件的文件夹 在虚拟机的设置中找到这个设置…

使用socket对http站点的访问

使用socket对http站点的访问 步骤: 1、实现TCP客户端 2、设置访问的网站地址 3、创建发送的请求报文 4、连接和发送报文到百度 5、显示百度回复的内容 import socket # 建立TCP连接 s socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 与服务器建立连接 host …

【Java 进阶篇】JavaScript BOM History 详解

当用户浏览网页时,可以使用JavaScript的BOM (Browser Object Model)中的History对象来访问浏览器的历史记录。这个对象允许您在不更改页面的情况下导航到不同的历史记录项,或者查看有关用户访问过的页面的信息。 在本篇博客中,我们将围绕Jav…

【软考-中级】系统集成项目管理工程师-合同管理历年案例

持续更新。。。。。。。。。。。。。。。 目录 2018 下 试题一(17分)系列文章 2018 下 试题一(17分) 阅读下列说明,回答问题 1至问题 3,将解答填入答题纸的对应栏内     某大型央企 A 公司计划开展云数据中心建设项目,并将公司主要业务应…

[BigData:Hadoop]:安装部署篇

文章目录 一:机器103设置密钥对免密登录二:机器102设置密钥对免密登录三:机器103安装Hadoop安装包3.1:wget拉取安装Hadoop包3.2:解压移到指定目录3.2.1:解压移动路径异常信息3.2.2:切换指定目录…

windows设置右键打开 vscode的方法(简易版)

实现效果如下: 如果安装VScode时没有选择下面两项,则无法通过快捷键打开 如何设置右键打开VSCode? 具体步骤如下: 找到 VSCode的快捷方式,右键选择 属性。 复制目标中的文件所在路径。 创建一个文本文档&#…

什么是低代码开发平台?有什么优势?

目录 一、低代码平台演进 1. 低代码概念 2. 低代码衍生历程 二、为什么要用低代码? (1)降本提效,便捷开发 (2)降低开发门槛,扩大应用开发劳动力 (3)加快数字化转型建设 三…

Leetcode—137.只出现一次的数字II【中等】

2023每日刷题&#xff08;二&#xff09; Leetcode—137.只出现一次的数字II 没有满足空间复杂度的Map题解 class Solution { public:int singleNumber(vector<int>& nums) {unordered_map<int, int>count;for(int iter: nums) {count[iter];}int ans 0;for(…

【Eclipse】查看版本号

1.在Eclipse的启动页面会出现版本号 2. Eclipse的关于里面 Help - About Eclipse IDE 如下图所示&#xff0c;就为其版本 3.通过查看readme_eclipse.html文件

Python合并同类别且相交的矩形框

Python合并同类别且相交的矩形框 前言前提条件相关介绍实验环境Python合并同类别且相交的矩形框代码实现 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小操作专栏、YOLO系列专栏、自然语言处理专栏或…

YOLOv5算法改进(13)— 如何去更换主干网络(2)(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。为了给后面YOLOv5算法的进阶改进奠定基础,本篇文章就继续通过案例的方式给大家讲解如何在YOLOv5算法中更换主干网络,本篇文章的特色就是比较浅显易懂,附加了很多的网络结构图,通过结构图的形式向大家娓娓道来,希望大家学习之后能够有所收获…

记一次mysql事务并发优化

记一次mysql事务并发优化 背景 事情的情况大致是这样的。一个扣减库存的业务上线以后&#xff0c;隔几天会报一次错&#xff0c;错误内容如下&#xff1a; ERROR - exception: UncategorizedSQLException,"detail":"org.springframework.jdbc.UncategorizedSQ…

【Electron】Not allowed to load local resource

问题描述 使用 audio 标签播放音频文件&#xff0c;控制台报错 Not allowed to load local resource。 Not allowed to load local resource原因分析 通常是安全策略所引起的。Electron 默认情况下禁止加载本地资源&#xff0c;以防止潜在的安全风险。 解决方案 在 main.js…

协同创新、奔赴未来——“华为云杯”2023人工智能创新应用大赛华丽谢幕

9月27日&#xff0c;在苏州工业园区管理委员会、华为云计算技术有限公司的指导下&#xff0c;由SISPARK&#xff08;苏州国际科技园&#xff09;、华为&#xff08;苏州&#xff09;人工智能创新中心联合主办&#xff0c;东北大学工业智能与系统优化国家级前沿科学中心、浙江大…

批量xls转换为xlsx

import win32com.client as win32 import os# 另存为xlsx的文件路径 xlsx_file r"F:\志丹\1020Excel汇总\成果表备份\xlsx" xls_file r"F:\志丹\1020Excel汇总\成果表备份" for file in os.scandir(xls_file):suffix file.name.split(".")[-1…

虚实融合 智兴百业 | 赵捷副市长莅临拓世科技集团筹备展台指导,本月19号!拓世科技集团与您相约世界VR产业大会

新时代科技革命中&#xff0c;虚拟现实技术、5G和“元宇宙”概念崛起&#xff0c;助力全球范围内的数字经济和产业转型。我国也正迈向高质量发展攻坚阶段&#xff0c;在中部腹地的江西&#xff0c;政府结合全球技术趋势和自身发展需求&#xff0c;选择虚拟现实为新的经济增长点…