java 构造 statict_java学习:构造方法、static、final

在了解了java的基本数据结构后,开始学习java的类。

java中的类也是一种数据结构,我认为它和C中的结构体挺像。类中可以有属性和方法。类的方法中比较特别的是构造方法。

java中类的构造方法要和类名相同,且没有返回值。构造方法主要用于为类的对象定义初始化状态,在new一个对象时,就会调用构造方法。每个java类都至少有一个构造方法,如果没有显式的定义构造方法,java编译器会为我们提供一个默认的不带参数的构造方法。构造方法不能够直接调用,必须通过new关键字自动调用。

在学习构造方法的过程中,为了能够看到默认的构造方法,使用了jdk提供的工具javap。这个反编译工具在JDK安装目录的bin目录下,使用javap反编译工具,在控制台下输入javap point(类名,javap加载的一个类),就会将类的属性和方法输出。

在使用new关键字创建类的实例时,主要分为三个步骤,即为对象分配内存空间,引起对象构造方法的调用,并为对象返回一个引用。

当使用默认的构造方法初始化对象时,系统会默认的初始化对象的属性,各个数据类型的默认值是:数值-0、boolean-false、char-‘\0’、对象-null。

this变量代表对象本身,当类中有两个同名变量,一个是类的属性,一个是方法中的局部变量,则用this区分类的属性和局部变量。另外,也可以使用this简化构造函数的调用,如:

Point(int n)

{

this.n = n;

}

Point()

{

this(1);

}

有了this的特性,一个类所有的对象调用的方法在内存中就可以只有一份拷贝,尽管在内存中可能有多个对象。但是数据成员在每个对象所在内存中都有一份拷贝。this允许了相同的方法为不同的对象工作。当一个对象调用一个方法时,this变量将被设置为引用该方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据相关联。

static关键字

在方法的返回值前或者变量的类型前加上static修饰,这些方法叫静态方法,变量叫静态变量。

静态方法和静态变量都属于一个类,而不是属于类的对象,也就是说,它在内存中只有一份拷贝。

静态方法和静态变量的可以通过类名直接引用,当然也可以通过对象调用静态的方法。如静态方法static void staticMethod(){} 引用方式可以为:A.staticMethod()、obj.staticMethod(),其中A为类名,obj为类的对象。

需要注意的是在静态方法中不能够调用非静态的方法和使用非静态的成员变量,假如静态方法中使用了非静态的变量或者调用了非静态的方法,那么在使用类名引用该静态方法时,系统无法知道这些非静态的方法和变量如何处理。

final关键字

在java中没有define,如果要定义常量的话,可以使用final来定义。常量在运行的时候不能被修改,所以常量需要在定义的时候赋值,如final int a = 3;另外一种方式是在构造函数中赋初值,如果有多个构造函数,则需要在每个构造函数中都赋值,但是如果某个构造函数中调用了其他的构造函数,则需要注意的是,要保证只能赋值一次。例如:

final int a;

Point(int n)

{

a = 3;

}

Point()

{

a = 4;

this(2);

}

如果没有this(2)这句,上面的代码编译可以通过。如果有了this(2)这句,因为在Point()构造函数中调用了Point(int n)这个构造函数,而Point(int n)这个构造函数也对常量a赋值了,所以相当于对常量a进行了两次的赋值,编译就会报错了。

为了节省内存,通常把常量也声明为static。

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

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

相关文章

微信终于可以发送大文件了!

来源丨扩展迷EXTFANS(ID:infinitydaily)https://mp.weixin.qq.com/s/EAwYnq7435oMQnz6JqkHYg微信作为一款国民级的通讯软件,虽然用户基数庞大,但在用户体验方面一直饱受诟病,尤其是在部分功能方面&#xff…

Iterable 超级接口

这是一个老祖宗,一代一代往下拨 collection 的方法如下,是一个跟接口方法如下,见API collection : add():添加一个元素     addAll():添加一组元素 clear();清空     remove(Object o) :移除     removeAll():移除一组元素     isEmpty();判断集合…

pc寄存器or程序计数器

一:PC寄存器解释 二:PC寄存器的作用

项目设计基础:处理过程设计相关知识介绍​

处理过程设计关键是用一种适当的表示形式来描述每个模块执行过程。常用的表示形式有图形、语言、表格。比如传统的框图、判定表等。1、程序流程图(Program Flow Chart)程序流程图也成为程序框图,是最早、流行最广泛的一种图形表示方法。程序流…

关于JS中的定时器!!!

定时器: 周期性定时器 一次性定时器 1. 周期性定时器: 让程序每隔一段时间间隔,反复执行一项任务 何时使用: 只要连续,有规律的持续播放的动画 如何使用: 3件事: 1. ***任务函数: 定时器每次执行的任务 function task(){...} 任务函数通常要…

python 更新数据库历史_python 实现数据库中数据添加、查询与更新的示例代码

一、前言最近做web网站的测试,遇到很多需要批量造数据的功能;比如某个页面展示数据条数需要达到10000条进行测试,此时手动构造数据肯定是不可能的,此时只能通过python脚本进行自动构造数据;本次构造数据主要涉及到在某…

git冲突“accept theirs”和“accept yours”

Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的 Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的 我们选择Merge,自己手动行进选择、修改。 这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的res…

系统实施基础:系统实施的相关知识介绍

1、系统实施的目的系统实施属于新系统开发工作的最后一个阶段,属于交付系统给客户的最后阶段。2、系统实施的任务硬件准备:按照总体设计方案准备服务器、配置网络系统。主要包括计算机主机/云服务器、输入输出设备、存储设备、通信设备等。软件准备&…

线程同步以及yield()、wait()、Notify()、Notifyall()

一、线程同步 1、线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏。2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该…

面试:整理面试中常被问到的8种数据结构

数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当…

python绘制繁花曲线代码_使用python和pygame绘制繁花曲线的方法

前段时间看了一期《最强大脑》,里面各种繁花曲线组合成了非常美丽的图形,一时心血来潮,想尝试自己用代码绘制繁花曲线,想怎么组合就怎么组合。真实的繁花曲线使用一种称为繁花曲线规的小玩意绘制,繁花曲线规由相互契合…

Axure原型制作规范

一、 名词定义: Sitemap 导航图Widgets 组件Master 库Label 控件名Interactions 交互动作Annotations 注释Location and size 位置和尺寸二、 Widgets规范 本站常用widgets规范:命名规范:制定命名规范从而方便搜索和升级。 a. 全站使用&#…

系统测试相关知识笔记

1、系统测试的意义系统测试是为了发现系统中的错误而执行程序的过程,发现系统中存在的问题,及时处理掉,从而规避项目后续阶段顺利推进的风险、和高质量的软件交付给客户。2、系统测试的目的希望以最少的人力和时间发现潜在的各种错误和缺陷。…

最小生成树练习1(克鲁斯卡尔算法Kruskal)

今天刷一下水题练手入门,明天继续。 poj1861 Network(最小生成树)新手入门题。 题意:输出连接方案中最长的单根网线长度(必须使这个值是所有方案中最小的),然后输出方案。 题解:本题…

java变量不声明可以直接使用吗_我们可以在不使用Java进行初始化的情况下声明最终变量吗?...

在Java中,final是可与字段类和方法一起使用的access修饰符。当一个方法为final时,它不能被覆盖。当变量为最终变量时,其值无法进一步修改。当类结束时,不能扩展。无需初始化即可声明最终变量如果稍后声明了最终变量,则…

系统测试:单元测试相关知识笔记

一、单元测试概念单元测试也成为模块测试,在模块编写完成且无编译错误后就可以进行。单元测试侧重模块中的内部处理逻辑和数据结构。如果采用机器测试,一般用白盒测试法。二、单元测试检查模块特征1、模块接口模块接口保证了测试模块数据流可以正确地流入…

跨网段远程调试vs_如何提高后台服务应用问题的排查效率?日志 VS 远程调试

转眼间,距离Jerry最近一篇文章推送已经过去了一个多月的时间了。公众号更新的频率降低,不是因为Jerry偷懒,而是由于从春节过后,我所在的SAP成都研究院数字创新空间整个团队,一直在忙一个5月份需要交付的项目上。Jerry每…