JAVA SE 类和对象

类和对象

  • 类定义和使用
    • 类的定义格式
  • 类的实例化
    • 什么是实例化
  • this 引用
    • this引用的特性
  • 对象的构造及初始化
    • 如何初始化对象
    • 构造方法
      • 概念
      • 特性
    • 在这里插入图片描述 **注意**:
  • 封装
    • 封装的概念
    • 封装扩展之包
      • 导入包中的类
      • 自定义包
      • 包的访问权限控制举例
  • static成员
    • static修饰成员变量
    • static修饰成员方法
    • static成员变量初始化
  • 代码块
    • 普通代码块
    • 构造代码块
    • 静态代码块
    • 注意:

类定义和使用

面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是计算机并不认识洗衣机,需要我们告诉它什么是洗衣机。
在这里插入图片描述上图右侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认识),但是这些简单的抽象结果计算机也不能识别,开发人员可以采用某种面向对象的变成语言来进行描述,比如:Java语言。

类的定义格式

在java中定义类时需要用到class关键字,具体语法如下:

//创建类
class ClassName{field;  //字段(属性)或者成员变量method;//行为或成员方法
}

class为定义类的关键字,ClassName为类的名字,{}为类中的主体。

类中包含的内容称为类的成员。属性主要是用来描述类的,称为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

class WashMachine{public String brand;public String type;public double weight;public void washClothes(){System.out.println("洗衣服");}public void dryClothes(){System.out.println("脱水");}
}

注意:

    1. 类名采用大驼峰定义。
    2. main方法所在的类一般要用public修饰
    3. public修饰的类必须要和文件名相同
    4. 不要轻易修改public修饰的类的名称,如果要修改,通过Refactor->Rename

在这里插入图片描述

类的实例化

什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int、double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一种新的类型,比如刚刚的洗衣机WashMachine类。有了自定义的类型以后,就可以使用这些类来定义实例(或者称为对象)。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

public class Dog {public String name;public String color;public void bark(){System.out.println("旺旺旺");}public void wag(){System.out.println("摇尾巴");}public static void main(String args[]){Dog dog1=new Dog();dog1.name="大黄";dog1.color="黄";dog1.bark();dog1.wag();Dog dog2=new Dog();dog2.name="大黑";dog2.color="黑";dog2.bark();dog2.wag();}
}

在这里插入图片描述
注意:

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

this 引用

this引用指向当前对象(调用某成员方法的对象),以免因成员变量和形参名相同,造成误解。

public class Date {public int year;public int month;public int day;public void setDay(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDate(){System.out.println(this.year+"-"+month+"-"+day);}public static void main(String args[]){Date d=new Date();d.setDay(2020,9,15);d.printDate();}
}

this引用的特性

1.this的类型:对应类类型引用,即那个对象调用就是哪个对象的引用类型
2.this只能在“成员方法”中使用
3.在“成员方法”中,this只能引用当前对象,不能再引用其他对象
4.this是“成员方法”第一个隐藏的参数,写不写都无所谓,编译器帮你传递了。

对象的构造及初始化

如何初始化对象

java内部定义一个局部变量时,必须要初始化,否则会编译失败。
在这里插入图片描述

要让上述代码通过编译,只需要在正式使用之前,给a设置一个初始值即可。如果是对象:
在这里插入图片描述
我们发现,可以正常运行,但只有通过调用setDay方法才能将具体的日期设置到对象中。

我们就此发现两个问题:

1.每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?
2.局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?

构造方法

概念

构造方法(也称为构造器)是一个特殊的成员方法,名字必须和类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
在这里插入图片描述注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

特性

1.名字必须与类名相同
2.没有返回值类型,设置为void也不行
3.创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)。
4.构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)。
5.如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的某人构造方法一定是无参的。

注意:一旦用户定义了构造方法,编译器就不会再生成了,所谓“救急不救贫”。
在这里插入图片描述

6.构造方法中,可以通过this调用其他构造方法来简化代码

在这里插入图片描述
注意

  1. this(……)必须是构造方法中第一条语句
  2. 不能形成环
    在这里插入图片描述7.绝大多数情况下,使用public来修饰,特殊场景下会被private修饰。

封装

封装的概念

面向对象程序三大特性:封装、继承、多态。类和对象阶段,主要研究的就是封装特性。

封装扩展之包

为了更好的管理类,把多个类收集在一起成为一组,称为软件包。也就是位于同一个文件夹下的类。包是对类、接口等的封装机制的体现,是一种对类或接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

导入包中的类

Java中已经提供了很多现成的类供我们使用,例如Date类:可以使用java.util.Date 导入java.util这个包中的Date类。

public class test {public static void main(String[] args){java.util.Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

但是这种写法比较麻烦,可以使用import语句导入包

import java.util.Date;public class test {public static void main(String[] args){Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

如果需要使用java.util中的其他类,可以使用import java.util. *

import java.util.*;public class test {public static void main(String[] args){Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

但是我们更建议显式的指定要导入的类名,否则还是容易出现冲突的情况。如以下案例:
在这里插入图片描述可以使用import static导入包中静态的方法和字段。

import static java.lang.Math.*;
public class test {public static void main(String[] args){double x=30;double y=40;double result = sqrt(pow(x,2)+pow(y,2));System.out.println(result);}
}

自定义包

基本规则:

  • 1.在文件的最上方加上一个package语句指定该代码在哪个包中。
    2.包名需要尽量指定成唯一的名字,通常会用公司的域名的颠倒形式,例如com.alibaba.demo1
    3.建包方法
    在这里插入图片描述

包的访问权限控制举例

Computer类位于com.bit.demo1包中,TestComputer位于com.bit.demo2包中:

package com.bit.demo1;public class Computer {private String cpu;private String memory;public String screen;String brand;public Computer(String brand,String cpu,String memory,String screen){this.brand=brand;this.cpu=cpu;this.memory=memory;this.screen=screen;}public void Boot(){System.out.println("开机");}public void PowerOff(){System.out.println("关机");}public void SurfInternet(){System.out.println("上网");}
}
package com.bit.demo2;
import com.bit.demo1.Computer;
import jdk.swing.interop.SwingInterOpUtils;public class TestComputer {public static void main(String[] args){Computer p=new Computer("HW","I7","8G","13*14");System.out.println(p.screen);//System.out.println(p.cpu);//System.out.println(p.brand);//cpu 和brand都是私有的,不允许被其他包中的类访问}
}

static成员

static修饰成员变量

static修饰的成员变量,称为静态成员变量,不属于某个具体的对象,是所有对象所共享的。
静态成员变量特性:

  • 1.既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
    2.类变量存储在方法区当中
    3.生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

static修饰成员方法

一般类中的数据成员都设置为private,而成员方法设置为public。被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
在这里插入图片描述
在这里插入图片描述
静态方法特性:

  • 1.不属于某个具体的对象,是类方法
    2.可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐后者
    3.不能在静态方法中访问任何非静态成员变量(this也不能用)
    在这里插入图片描述 4.静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

static成员变量初始化

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。
静态成员变量的初始化分为两种:就地初始化静态代码块初始化
就地初始化指定是在定义类的时候,直接给出静态成员变量的初始值。

代码块

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

  • 普通代码块

  • 构造块

  • 静态块

  • 同步代码块

普通代码块

在这里插入图片描述

构造代码块

构造代码块一般用于初始化实例成员变量
在这里插入图片描述

静态代码块

一般用于初始化静态成员变量,静态代码块不管生成多少个对象,只会执行一次。

注意:

执行的先后顺序为:
①字段(成员变量)
②静态代码块
③实例代码块
④构造方法
这个执行顺序和他们3个的前后定义顺序没有关系,但如果都是同一类代码块,则执行顺序为定义顺序

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

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

相关文章

【计算机网络】TCP协议详解

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 1、引言2、udp和tcp协议的异同3、tcp服务器3.1、接口认识3.2、服务器设计 4、tcp客户端4.1、客户端设计4.2、说明 5、再研Tcp服务端5.1、多进程版5.2、多线程版 5、守护进程化5.1、什么是守护进程5.2…

古籍双层PDF制作教程:保姆级古籍数字化教程

在智慧古籍数字化项目中,很多图书馆要求将古籍导出为双层PDF,并且确保输出双层PDF底层文本与上层图片偏移量控制在1毫米以内。那么本教程带你使用古籍数字化平台,3分钟把一个古籍书籍转化为双侧PDF。 第1步:上传古籍 点批量上传…

云服务器Ubuntu18.04进行Nginx配置

云服务器镜像版本信息:Ubuntu 18.04 server 64bit,本文记录了在改版本镜像上安装Nginx,并介绍了Nginx配置文件目录,便于后面再次有需求时进行复习。 文章目录 Nginx的安装Nginx配置文件分析 Nginx的安装 1.执行下面命令进行安装…

玩转CSS:用ul li +JS 模拟select,避坑浏览器不兼容。

玩转CSS:用ul li JS 模拟select,避坑浏览器不兼容。 在前端的工作中,经常会遇到 selcet控件,但我们用css来写它的样式时候,总是不那么令人满意,各种浏览器不兼容啊有没有? 那么,我…

西电网络空间安全综合953考研分享||西安电子科技大学

一、院校选择 如何选择适合自己的学校以及专业 1. 首先要对自己选择的学校有热情,选择自己最想去的学校 2. 其次选择在自己能力范围内努力能考上的学校,综合考虑地区(不同地区公共课分数有一定的差别)、学校(建议跨…

Vue3计算属性终极实战:可媲美Element Plus Tree组件研发之节点勾选

前面完成了JuanTree组件的节点编辑和保存功能后,我们把精力放到节点勾选功能实现上来。**注意,对于组件的开发者来说,要充分考虑用户的使用场景,组件提供的多个特性同时启用时必须要工作良好。**就拿Tree组件来说,用户…

如何保证前后端交互信息不被篡改。

先说说前后端有哪些认证方式来保证: 基于 session 的认证方式:前端在用户登录成功后,后端会在服务器端生成一个唯一的 session ID,并将该 session ID 返回给前端,在后续的请求中,前端需要带上该 session ID…

【CUDA Runtime】第一个“Hello World“程序

文章目录 前言前提须知CUDA Runtime 简介核心功能优势和应用 使用CudaRuntime进行第一个"Hello world"程序创建CudaRuntime工程选择GPU函数原型参数返回值作用 获取支持Cuda的GPU信息获取支持Cuda的GPU数量获取设备属性运行展示 在GPU上分配内存把需要运行的主机内存…

数据库密码实现加盐加密处理

在实际的开发中,我们的数据库密码一般都是明文的方式存储在数据库中,但是,这种操作非常不安全,容易被黑! 那么,此时我们就需要对其进行加密处理,市面上比较常见的就是MD5加密了,但是…

【Linux】syscall sys_write流程摸索

这是通过tty进行摸索sys_write的流程。 在前面的博客里,我们可以看到基于内核C语言源代码日志打印,在打印的日志里边包含:日期,时间,当前文件所在代码目录,当前执行函数名,当前文件执行行号&am…

运维团队如何借助分布式部署提升监控效率与可靠性

随着企业IT基础设施的日益复杂和分布式架构的广泛应用,传统的监控解决方案已经难以满足现代运维团队的需求。在这样的背景下,分布式部署作为一种新型的监控架构,以其灵活性、可扩展性和高可用性,成为了运维团队提升监控效率与可靠…

C++模版基础知识与STL基本介绍

目录 一. 泛型编程 二. 函数模板 1. 概念 2. 函数模版格式 3. 函数模版的原理 4. 模版函数的实例化 (1). 隐式实例化 (2.) 显式实例化 5. 模版参数的匹配原则 三. 类模板 1. 类模板的定义格式 2. 类模板的实例化 四. STL的介绍 1. 什么是STL? 2. STL的版…

3.5-RNN文本生成

1语言模型生成文本的顺序 前面我们已经能够实现使用下图的LSTM网络进行语言建模; 对于一个已经在语料库上学习好的LSTM模型;如果语料库就只是you say goobye and i say hello;那么当把单词i输入到模型中,Time xxx层的第一个LSTM…

苍穹外卖01

0. 配置maven (仅一次的操作 1.项目导入idea 2. 保证nginx服务器运行 (nginx.exe要在非中文的目录下) 开启服务: start nginx 查看任务进程是否存在: tasklist /fi "imagename eq nginx.exe" 关闭ngi…

中文之美,美在辞藻富丽,也美在情感含蓄内敛。

文章目录 引言句句不提幸福,句句都是幸福句句不提释怀,句句都是释怀句句不提爱意,句句都是爱意句句不提安慰,句句都是安慰句句不提遗憾,句句都是遗憾句句不提思念,句句都是思念引言 许多句子没有将主题直抒胸臆,却通过字词间的呼应、碰撞,让人感受到“言未表而意无穷”…

java高级——Exception异常类基本解读

java高级——Exception异常类基本解读 前情提要文章介绍继承结构异常详解1. 异常的定义2. 异常的分类3.3 异常的处理机制3.3.1 try catch finally语句3.3.2 throw关键字3.3.3 throws关键字 4. 浅谈如何有效的避免异常的发生5. 自定义异常6. 常见的RuntimeException 总结 前情提…

JDBC(Java访问数据库)

Java Database Connectivity:Java访问数据库的解决方案 JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数…

HDU1056——HangOver,HDU1057——A New Growth Industry,HDU1058——Humble Numbers

目录 HDU1056——HangOver 题目描述 运行代码 代码思路 HDU1057——A New Growth Industry 题目描述 运行代码 代码思路 HDU1058——Humble Numbers 题目描述 运行代码 代码思路 HDU1056——HangOver 题目描述 Problem - 1056 运行代码 #include <iostream&…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…

【SpringBoot】2 项目搭建

创建项目 1&#xff09;确实本地 jdk 版本 打开命令行窗口&#xff1a;快捷键 Windows R&#xff0c;输入 CMD&#xff0c;敲回车 执行命令&#xff1a;java -version 2&#xff09;在项目 clone 的位置创建 Spring Boot 项目&#xff0c;使用 Maven 进行依赖管理&#xff…