java类的定义方式和实例化、this引用、对象的构造及其初始化、封装特性、static修饰成员变量、static修饰成员方法

java类的定义方式和实例化

类的定义和使用

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

在Java中定义类需要用到class关键字具体如下

// 创建类
class ClassName{  field;//成员变量method;//成员方法      
}

具体在实践中用类描述对象,并创建对象可以简单表示如下

public class Date {public int year;public int month;public int day;public void print(){System.out.println("year:"+this.year+" month:"+this.month+" day:"+this.day);}public static void main(String[] args) {Date day1=new Date();//这里用类创建实例就是通过newday1.print();使用成员方法就是类(新建类名.)}
}

类的注意事项

  • 类名注意采用大驼峰定义
  • 成员前写法统一为public
  • 此处写的方法不带 static 关键字
  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.

this引用

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 + "/" + this.month + "/" + this.day);}

 

 this引用的注意事项

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在"成员方法"中使用
  3. "成员方法"中,this只能引用当前对象,不能再引用其他对象对象的构造及初始化

对象的构造及初始化

在java内部定义一个局部变量,如果不初始化会编译失败,但是在定义一个类之后怎么初始化就要用到构造了,构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次

public class Date {public int year;public int month;public int day;// 构造方法:// 名字与类名相同,没有返回值类型,设置为void也不行// 一般情况下使用public修饰// 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次public Date(int year, int month, int day){this.year = year;this.month = month;this.day = day;System.out.println("Date(int,int,int)方法被调用了");}public void printDate(){System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {// 此处创建了一个Date类型的对象,并没有显式调用构造方法Date d = new Date(2021,6,9);   // 输出Date(int,int,int)方法被调用了d.printDate();    // 2021-6-9}}

构造方法的注意事项 

  • 名字必须与类名相同
  •  没有返回值类型,设置为void也不行
  •  创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  •  构造方法可以重载,无参,选择参数等等(ideal快捷generate->constructor->选择参数)

三种初始化方式

  1. 构造不传参,默认初始化
  2. 构造传参,自定义初始化
  3. 直接在函数里设置,就地初始化

三种方法如下:

public class Date {public int year;public int month;public int day;public Date() {
//        this.year = 2022;
//        this.month = 2022;
//        this.day = 2022;//   this(2,2,2);System.out.println("不带参数的的构造方法");//1}public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;System.out.println("带参数的的构造方法");//2}public void print(){System.out.println("year:"+this.year+" month:"+this.month+" day:"+this.day);//必须加this}public static void main(String[] args) {Date day1=new Date();//默认初始化day1.print();Date day2=new Date(2000,2000,2000);//直接传参day2.print();Date day3=new Date();//直接赋值day3.year=1;//3day3.month=1;day3.day=1;day3.print();}
}

封装

         简单点说封装就是对于一个电脑主机,用户只需要知道有个开关和usb接口就行了,不需要了解其内部构造,所以封装就是将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

封装里面需要认识的访问限定符有public、default、private

public:可以理解为一个人的外貌特征,谁都可以看得到

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:只有自己知道,其他人都不知道

这里着重讲解使用private:

public class Person {private String name;private int age;public Person(String name,int age){this.name=name;this.age=age;}public String getName(){return name;}public void setName(String name){this.name=name;}public int getAge(){return age;}public void SetAge(int age){this.age=age;}
}

        上面例子中,name和age被声明为private,只能在Person类中被访问,在其他类中不能被访问,通过定义个getName和getAge方法,提供对name和age的访问,通过setName和setAge方法,提供对name和age的修改,这种方式实现了封装的效果,确保了隐私性的同时也能确保name和age只能通过方法进行访问和修改,设置getter和setter的快捷键(鼠标右键,Generate,选择Getter and Setter)

包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。

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 Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}

如果在导包里加上通配符 * ,就可以使用java.util中包括Date在内的其他类,用到谁就会导入谁

import java.util.*;

 可以使用import static导入包中静态的方法和字段。

import static java.lang.Math.*;
public class Test {public static void main(String[] args) {double x = 30;double y = 40;//未使用import static使用方法需要加上包名// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));// 静态导入的方式写起来更方便一些.double result = sqrt(pow(x, 2) + pow(y, 2));System.out.println(result);}
}

static成员

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

需要注意的是静态变量属于类,而不是对象,常用于实现全局变量,但静态变量不是全局变量

static修饰成员变量

static 修饰的成员变量,称为静态成员变量 ,静态成员变量最大的特性: 不属于某个具体的对象,是所有对象所共 享的,会同时访问修改。
public class Student{public String name;public String gender;public int age;public double score;public static String classRoom = "Bit306";// ...结构体public static void main(String[] args) {// 静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);//直接-》类名.静态变量Student s1 = new Student("Li leilei", "男", 18, 3.8);Student s2 = new Student("Han MeiMei", "女", 19, 4.0);Student s3 = new Student("Jim", "男", 18, 2.6);// 也可以通过对象访问:但是classRoom是三个对象共享的System.out.println(s1.classRoom);//新建对象.静态变量System.out.println(s2.classRoom);System.out.println(s3.classRoom);}
}

static修饰成员变量方法 

Java 中, static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的 。静态成员一般是通过静态方法(静态方法只能访问静态变量)来访问的。
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom = "Bit306";// ...public static String getClassRoom(){//静态方法,返回classroom值return classRoom;}
}public class TestStudent {public static void main(String[] args) {System.out.println(Student.getClassRoom());}
}

静态成员变量特性

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3. 类变量存储在方法区当中
  4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

 

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

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

相关文章

API网关-Apisix路由配置教程(数据编辑器方式)

文章目录 前言一、端口修改1. apisix 端口修改2. dashboard 端口修改3. 登录密码修改 二、常用插件介绍1. 常用转换插件1.1 proxy-rewrite插件1.1.1 属性字段1.1.2 配置示例 2. 常用认证插件2.1 key-auth插件2.1.1 消费者端字段2.1.2 路由端字段2.1.3 配置示例 2.2 basic-auth插…

Oracle 19cADG集群补丁升级

Oracle 19cADG集群补丁升级 文章目录 Oracle 19cADG集群补丁升级1.备库备份2.备库升级Opatch3.备库应用补丁4.主库备份 oracle_home目录5.主库升级Opatch6.注册补丁7.编译无效对象8.检查主库的补丁注册情况9.备库切换主库完成补丁注册 1.备库备份 su - oracle cd $ORACLE_HOME…

[webpack-cli] Invalid options object 报错

[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema devServer: {contentBase: ./src, // 告诉服务器从哪里提供内容,默认情况下,它会使用当前工作目录作为根目录c…

深度学习pytorch——减少过拟合的几种方法(持续更新)

1、增加数据集 2、正则化(Regularization) 正则化:得到一个更加简单的模型的方法。 以一个多项式为例: 随着最高次的增加,会得到一个更加复杂模型,模型越复杂就会更好的拟合输入数据的模型(图-1)&#…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决: 方法一:①查询指定条件;②根据查询出的指定条件结果在执行…

阿里云国际DDoS高防的定制场景策略

DDoS高防的定制场景策略允许您在特定的业务突增时段(例如新业务上线、双11大促销等)选择应用独立于通用防护策略的定制防护策略模板,保证适应业务需求的防护效果。您可以根据需要设置定制场景策略。 背景信息 定制场景策略提供基于业务场景…

【图论 | 数据结构】用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表)。这种方法的优点是存储空间小,查询速度快,尤其适…

金融投贷通--功能测试分析与设计

金融投贷通功能测试分析与设计 测试点分析借款业务测试点投资业务测试点 测试用例借款业务测试用例投资业务测试用例 缺陷面试题 测试报告 测试点分析 借款业务测试点 投资业务测试点 测试用例 借款业务测试用例 借款成功(主业务)、借款成功&#xff…

iOS——【CGD】

GCD 什么是GCD GCD指的是Grand Central Dispatch,它是苹果公司开发的一套多线程编程技术。GCD提供了一种简单而有效的方式来管理应用程序中的并发任务。它通过将任务提交到适当的队列(串行队列或并发队列)来管理并发执行的任务,…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容,人们在智能手机上将其视为视觉叠加。 然而,WebAR 可在手机的普通网络浏览器上运行,无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

跟张良均老师学大数据人工智能——数据挖掘集训营开营

集训营特色: 知识点深入浅出,实现以学促用 以业务内容为主线,数据挖掘技能嵌入 多行业项目实战,全面提升职业素养 全程线上辅导,助力熟练掌握技能 惊喜优惠: 限时“六折”! 师傅带练 方向…

Qt|读写数据库管理图片资源工具

文章目录 创建项目设置UI布局控制数据库类实现界面实现类主函数 功能:用来管理数据库中图像资源 开发环境:windows10VS2017Qt5.14.2开发 创建项目 首先创建Qt Widgets Application next->next->finish就创建好了 设置UI布局 打开已经创建好的U…

笔记本如何调节亮度?笔记本亮度调节方法

对于经常长时间面对笔记本电脑的小伙伴们来说,屏幕亮度过暗或者过亮,都会对眼睛造成伤害。那么,我们如何调节笔记本亮度至适中呢?下面为大家介绍3种简单的调节屏幕亮度的方法,一起来看看吧! 笔记本亮度调节方法一: 1、…

Amuse:.NET application for stable diffusion

目录 Welcome to Amuse! Features Why Choose Amuse? Key Highlights Paint To Image Text To Image Image To Image Image Inpaint Model Manager Hardware Requirements Compute Requirements Memory Requirements System Requirements Realtime Requirements…

Electron 入门 - 创建应用的全流程 - npm 踩坑版

说明 本文记录一下,使用Electron创建一个简单的客户端应用的全流程。 在官方文档的基础上,针对依赖安装过程中出现的异常,进行了补充,确保可以正常的创建应用。 创建步骤 0、校验node版本 官方文档建议使用 最新版本的 NodeJS …

Codigger用户篇:安全、稳定、高效的运行环境(一)

在当今数字化时代,个人数据的安全与隐私保护显得尤为重要。为了满足用户对数据信息的安全需求,我们推出Codigger分布式操作系统,它提供了一个运行私有应用程序的平台,旨在为用户提供一个安全、稳定、高效的私人应用运行环境。Codi…

html 元素宽度自适应 占据剩余宽度

弹性盒实现 父元素设置display: flex; 需要自适应宽度的子元素设置flex: 1; <html lang"en"> <head><style>*{margin: 0;padding: 0;}.main{display: flex;}.box1,.box2{width: 100px;height: 200px;}.box1{background: rgb(134 187 233);}.box2…

【javaWeb 第五篇】后端-Http协议学习

HTTP协议 HTTP概述HTTP-请求数据格式HTTP响应格式HTTP-协议解析 HTTP概述 Hyper Text Transfer Protocol,超文本传输协议&#xff0c;规定了浏览器和服务器之间的数据传输规则 简述概念就是&#xff0c;浏览器需要向服务器发送请求&#xff0c;想要得到服务器中的数据&#xff…

2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…

Share-ChatGPT官网UI/文件上传/联网搜索/GPTS 一并同步

地址&#xff1a;Share-ChatGPT 文章目录 界面UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&#xff0c;写论文视频演示仓库地址 界面 支持多账号同时管理&#xff0c;合理利用资源&#xff1a; UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&a…