Java中this关键词与构造函数,构造代码块的理解
目录
- 一、构造函数的理解
- 1.一个类的创建
- 二、代码块的理解
- 三、this关键词的理解
一、构造函数的理解
1.一个类的创建
public class Person {String name; // 姓名int age; // 年龄// 构造方法Person(String name,int age){ //两个参数的构造函数this.name = name; // 给对象赋予name值this.age = age; // 给对象赋予age值}Person(int age){ //一个参数的构造函数this.age = age; // 给对象赋予age值}Person(){ //无参的构造函数}public static void main(String[] args) {Person p = new Person("张三",1); // 创建了Person类型的p对象,并且调用构造方法赋予该对象属性值System.out.println("姓名: " + p.name + " 年龄: " + p.age); // name = 张三, age = 1;//这个小孩刚出生的时候已经有了姓名和年龄}
以上述例子来说,在类的创建过程中包含了两个基础属性,姓名和年龄,但是都没有初始值。
类在被实例化的时候,如果没有构造函数,会自动的执行无参构造函数。。
一个类中可以有多个构造函数,会根据参数的个数自动识别执行哪个。
如上述代码中,在实例化的过程中有两个参数,所以自动执行含有两个参数的构造函数。
二、代码块的理解
代码块就是在构造函数之前运行的代码区域,只要实例化类就会自动运行的区域。
class Perosn{private int id;private String name;private int age;{happy();// 每个Person对象创建出来都会执行这里的代码}public Perosn(){happy();}public Perosn(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}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;}public void happy(){System.out.println("哈哈哈....");}}
在上面的类中,只要被实例化都会自动执行
{ happy(); // 每个Person对象创建出来都会执行这里的代码 }
这一段代码。
三、this关键词的理解
实例化某一个类之后,类中的实例变量将被创建,在各方法中会存在相同变量名的局部变量
如果在方法内局部变量的命名与实例变量的命名相同,根据内部屏蔽外部的原则,实例变量在这个方法内暂时失效。这时如果想在该方法中使用实例变量,则需要在变量名前显示的加上"this.",用来指明此变量是实例变量。默认格式如下(前者指向的是实例变量,后者指向的是局部变量):this.变量名=变量名。
Person(String name,int age){ //两个参数的构造函数this.name = name; // 给对象赋予name值this.age = age; // 给对象赋予age值}
例如在这个构造函数中,this.name 指的是自己,也就是类中的实例变量。name指的是构造函数中的传入参数。
下面给一个实例变量与局部变量的改变过程的案例。
public class Test {String s = "Hello";public Test(String s) {//构造方法中的参数,与类中成员变量s重名.System.out.println("s = " + s); // 输出的是HelloWorld!//这里的s就是传参传入的值。System.out.println("onethis.s = " + this.s); //输出的是Hello//把参数值(局部变量)赋给成员变量,成员变量的值改变this.s = s;System.out.println("twothis.s = " + this.s); //输出HelloWorld!}public static void main(String[] args) {Test x = new Test("HelloWorld!");//验证成员变量值的改变System.out.println("最后的s=" + x.s); //输出HelloWorld!}
}
Java中this关键词与构造函数,构造代码块的理解相关推荐
- 构造函数 构造代码块_构造函数必须没有代码
构造函数 构造代码块 构造函数中应完成多少工作? 在构造函数内部进行一些计算然后封装结果似乎是合理的. 这样,当对象方法需要结果时,我们将准备好它们. 听起来是个好方法? 不,这不对. 这是一个坏主意 ...
- java中你知道这四种代码块吗?
大家好,我是雄雄,今天给大家分享的是:java中构造代码块的用法. 什么叫代码块?代码块将多行代码封装到一个{}中,形成一个独立的代码区,这就够成了代码块,一般常见的代码块是这样的: Java中,代码 ...
- java 中的静态变量,静态代码块,动态代码块,构造方法执行顺序的深入探究
要想完全弄懂这个执行顺序,需要我们先了解几个概念. 首先是类加载与对象的构造,类加载就是在第一次调用这个类的时候jvm虚拟机会通过类加载器在一个叫做方法区的逻辑内存中将所要用到的类的信息存放在里边,其 ...
- java 中的静态(static)代码块
类字面常量 final 静态域不会触发类的初始化操作 非 final static 静态域(以及构造器其实是一种隐式的静态方法) Class.forName():会自动的初始化: 使用 .class来 ...
- Java中异常处理之try和catch代码块的使用
转自:https://www.jb51.net/article/72901.htm Java try和catch的使用 尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自 ...
- java中普通代码块,构造代码块,静态代码块的区别及代码示例
本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...
- Java中普通代码块,构造代码块,静态代码块区别
Java中普通代码块,构造代码块,静态代码块区别及代码 示例 //执行顺序:(优先级从高到低.)静态代码块>mian方法 >构造代码块>构造方法. 其中静态代码块只执行一次.构造代码 ...
- 关于java中普通代码块、构造代码块与静态代码块
1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现"{普通代码的执行语句}"的就称为 ...
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
构造函数 public HelloA(){//构造函数} 关于构造函数,以下几点要注意: 1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的. 2.构造函数的作用是 ...
最新文章
- JAVA IO流复制文件夹及里面的所有文件
- mysql varchar 1024_mysql中的数据类型
- 深度学习-Tensorflow2.2-卷积神经网络{3}-电影评论数据分类/猫狗数据集实例-15
- linux定时任务crond
- java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing
- 学习笔记26_MVC前台强类型参数
- java项目使用junit_在Java 8之前的项目中使用JUnit 5
- redis-数据类型-有序集合
- 编译错误error:nbsp;invalidamp;nbsp…
- 工程日志(110316)-机房内电子信息设备电量估算
- 使用flash在IPAD2上播放FLV效率不高
- 使用Java语言开发微信公众平台(五)——获取access_token
- 2016年5月25日下午(妙味课堂js预热课程-4笔记一)
- Java SSM 项目实战 day08 方法级别的权限操作 服务器端的权限控制(JSR-250注解)(支持表达式的注解)(@Secured)以及页面端的权限控制
- Jira 史诗指南 (2022)
- 戴尔计算机主机型号,戴尔电脑在哪看型号_戴尔电脑型号怎么看
- python如何实现电子邮件的发送
- GitHub 上值得收藏的100个精选前端项目!你知道几个?
- Solr DIH使用说明
- SwiftUI - Shape(Circle, Rectangle,RoundedRectangle,Capsule,Path)
热门文章
- Quartz定时任务调度机制解析(CronTirgger、SimpleTrigger )
- UUID实现之一twitter的分布式自增IDsnowflake算法
- java Math类
- django “如何”系列4:如何编写自定义模板标签和过滤器
- spark内核揭秘-06-TaskSceduler启动源码解析初体验
- 《设计模式详解》行为型模式 - 职责链模式
- 【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面
- 【css练习】斑马线表格,美人尖,断线下划线
- java编码规范日常积累(持续更新)
- 球迷 如何在Linux纯命令行玩转谷歌浏览器,边看欧洲杯,边看足球宝贝