Java--作用域,构造器,this

作用域基本使用

                在Java编程中,主要的变量就是属性(成员变量)和局部变量。

                我们说的局部变量一般是指在成员方法中定义的变量

                Java中作用域的分类

                        全局变量:也就是属性,作用域为整个类体

                        局部变量:也就是除了属性之外的其他变量,作用域为定义他的代码块中!

                全局变量可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。

注意事项和使用细节:

                属性和局部变量可以重名,访问时遵循就近原则。

                在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。

                作用域不同:

                        全局变量:可以被本类使用,或其他类使用(通过对象调用)。

                        局部变量:只能在本类中对应的方法中使用。

                修饰符不同:

                        全局变量/属性可以加修饰符。

                        局部变量不可以加修饰符。

构造器(也是构造方法)

                构造器需求:

                        在创建一个人类对象时,是先把一个对象创建好之后,再给他的年龄和姓名属性赋值,使用构造器就是在创建人类对象时,就直接指定这个对象的年龄和姓名。

                 他是类的一种特殊方法,主要作用是完成对新对象的初始化,

                基本语法:

        [修饰符] 方法名(形参列表){

                        方法体;

}

说明:构造器的修饰符可以默认,也可以是public,protected,private。

           构造器没有返回值。

           方法名必须和类名一样。

           形参列表和方法一样的规则。

           构造器的调用,由系统完成。

public class Main {public static void main(String[] args) {Person p1 = new Person("LiHua", 18);System.out.println("姓名:" + p1.name);System.out.println("年龄:" + p1.age);}
}class Person {//这里的name和age就是全局变量String name;int age;//构造器没有返回值,所以也不能写void//构造器的名称和类名一样public Person(String pname, int page) {name = pname;age = page;}
}

构造器的注意事项和使用细节

                一个类可以定义多个不同的构造器,即构造器重载。

    //下面的两个构造器就构成了构造器重载public Person(String pname, int page) {name = pname;age = page;}public Person(String pname) {name = pname;}

                构造器是完成对象的初始化,并不是创建对象。      

                如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)

public class Main {public static void main(String[] args) {Dog d1 = new Dog();}
}class Dog {/** 默认构造器 Dog() {* * }*/}

                一旦定义了自己的构造器,默认的构造器就覆盖了,就不能使用默认的无参构造器。

对象创建的流程分析

this的引出和入门

        

public class Main {public static void main(String[] args) {Dog d = new Dog("小狗", 18);d.out();}
}class Dog {String name;int age;//如果构造器的形参,能够直接写成属性名就好了。但会出现一个问题,根据变量的作用域原则://构造器的name,age是局部变量,而不是属性。/*public Dog(String dname, int dage) {name = dname;age = dage;}*///this关键字就很好的解决了上述问题public Dog(String name,int age){this.name = name;       //this.name 就是当前对象的属性namethis.age = age;         //this.age 就是当前对象的属性age}public void out() {System.out.println(name + "\t" + age);}
}

                                总结:简单的说,那个对象调用,this就代表那个对象。

this注意事项和使用细节:

                        1.this关键字可以用来访问本类的属性,方法,构造器。

                        2.this关键字用于区分当前类的属性和局部变量。

                        3.访问成员方法的语法:this.方法名(参数列表)。

public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {String name;int age;public void test1() {System.out.println("一狗");}public void test2() {System.out.println("二狗");this.test1();}
}

                        4.访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另一个构造器,必须放在第一条)

public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {public void test1(String name, int age) {System.out.println("一狗");}public void test2() {this.test1("小狗", 18);           //这个语句必须放在第一条System.out.println("二狗");}
}

                        5.this不能在类定义的外部使用,只能在类定义的方法中使用。

 

public class Main {public static void main(String[] args) {B b = new B();b.test1();}
}class B {String name = "小狗";int age = 18;public void test1() {System.out.println("name=" + this.name + "\n" + "age=" + this.age);}
}

Ending: 

        OK,本篇文章就到此结束了,非常感谢你能看到这里,所以如果你觉得这篇文章对你有帮助的话,请点一个大大的赞,支持一下博主,若你觉得有什么问题或疑问,欢迎私信博主或在评论区指出~      

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

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

相关文章

RHEL8_Linux访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建FNS服务器并通过NFS共享一个目录在客户端上访问NFS共享的目录自动挂载的配置和使用 1.访问NFS存储 前面介绍了本地存储,本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统,所实现的是 Linux 和 Linux 之间的共…

新手搭建知识付费平台必备攻略:如何以低成本实现高转化?

我有才知识付费平台 一、引言 随着知识经济的崛起,越来越多的知识提供者希望搭建自己的知识付费平台。然而,对于新手来说,如何以低成本、高效率地实现这一目标,同时满足自身需求并提高客户转化率,是一大挑战。本文将…

SPA, SEO, SSR总结

SPA单页面Web应用 SPA(Single page web application) 单页面Web应用 Web不再是一张张页面,而是一个整体的应用,一个由路由系统,数据系统,页面(组件)系统等等,组成的应用程序, 让用户不需要每次与服务器进行页面刷新来获得新的内容, 从而提供了更快,跟流畅的用户体验, 在SPA中…

参与创作①周年啦~

写在前面 今天看了消息才知道,原来开始创作已经一年了。此篇无干货,纯白话,纯记录。 机缘 参与CSDN创作已经一年有余,犹记得第一篇博文是为了整理好所学内容,方便自己复习。没想到后面也陆陆续续发了些其他内容&…

关于read函数阻塞的问题

关于read函数阻塞的问题 上一篇文章IO多路转接之select 末尾提到了一点,服务端读取每次是读取10个字节的,如果超过10个字节,需要读取多次,但是客户端只会read一次,第二次read的时候,直接阻塞了。 那么如何…

Windows server flask

1、Windows server 通过python的flask执行命令 from flask import Flask, request, abort import subprocess from flask_basicauth import BasicAuth app Flask(__name__) # 获取url是进行账号密码认证,设置url的账号密码 app.config[BASIC_AUTH_USERNAME] 账号…

12.8作业

1.头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QMovie>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nul…

spring-boot-starter-validation是什么Validation参数校验使用概要

spring-boot-starter-validation是什么&Validation参数校验使用概要 来源Valid和Validated的用法(区别)引入依赖Valid和Validated的用法 在日常的项目开发中&#xff0c;为了防止非法参数对业务造成的影响&#xff0c;需要对接口的参数做合法性校验&#xff0c;例如在创建用…

基于Docker安装Mysql:5.5

一、拉取镜像 sudo docker pull mysql:5.5二、启动mysql镜像 1. 创建MySQL的conf目录和data目录 mkdir -p /home/docker/mysql/conf /home/docker/mysql/data2. 利用镜像创建容器 sudo docker run --restartalways -d --name mysql -v /home/docker/mysql/conf/my.cnf:/etc…

系统设计-微服务架构

典型的微服务架构图 下图展示了一个典型的微服务架构。 负载均衡器&#xff1a;它将传入流量分配到多个后端服务。CDN&#xff08;内容交付网络&#xff09;&#xff1a;CDN 是一组地理上分布的服务器&#xff0c;用于保存静态内容以实现更快的交付。客户端首先在 CDN 中查找内…

methods

类型&#xff1a;{ [key: string]: Function } 详细&#xff1a; methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法&#xff0c;或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。 注意&#xff0c;不应该使用箭头函数来定义 method 函数 (例如…

临床骨科常用的肩关节疾病量表,医生必备!

根据骨科医生的量表使用情况&#xff0c;常笑医学整理了临床骨科常用的肩关节疾病量表&#xff0c;为大家分享临床常见的肩关节疾病量表评估内容&#xff0c;均支持量表下载和在线使用&#xff0c;建议收藏&#xff01; 1.臂、肩、手功能障碍&#xff08;disabilites of the ar…

useradd 在Linux原生应用开发过程中的简单应用

useradd命令是用于在Linux系统中创建新用户的命令。它可以创建一个新用户&#xff0c;并设置该用户的属性、家目录、默认shell等。useradd命令实际上是一个包装了一系列系统调用的高级命令。 在Linux系统中&#xff0c;用户信息存储在/etc/passwd文件中。当执行useradd命令时&…

flstudio21破解汉化版2024最新水果编曲使用教程

​ 如果你一直梦想制作自己的音乐(无论是作为一名制作人还是艺术家)&#xff0c;你可能会想你出生在这个时代是你的幸运星。这个水果圈工作室和上一版之间的改进水平确实令人钦佩。这仅仅是FL Studio 21所提供的皮毛。你的音乐项目的选择真的会让你大吃一惊。你以前从未有过这…

ChatGPT的常识

什么是ChatGPT&#xff1f; ChatGPT是一个基于GPT模型的聊天机器人&#xff0c;GPT即“Generative Pre-training Transformer”&#xff0c;是一种预训练的语言模型。ChatGPT使用GPT-2和GPT-3两种模型来生成自然语言响应&#xff0c;从而与人类进行真实的对话。 ChatGPT的设计…

2023年全球软件开发大会(QCon广州站2023)-核心PPT资料下载

一、峰会简介 本次峰会包含&#xff1a;泛娱乐时代的边缘计算与通讯、稳定性即生命线、下一代软件架构、出海的思考、现代数据架构、AGI 与 AIGC 落地、大前端技术探索、编程语言实战、DevOps vs 平台工程、新型数据库、AIGC 浪潮下的企业出海、AIGC 浪潮下的效能智能化、数据…

【池式组件】线程池的原理与实现

线程池的原理与实现 线程池简介1.线程池1.线程池2.数量固定的原因3.线程数量如何确定4.为什么需要线程池5.线程池结构 线程池的实现数据结构设计1.任务结构2.任务队列结构3.线程池结构 接口设计 线程池的应用reactorredis 中线程池skynet 中线程池 线程池简介 1.线程池 1.线程…

第7课 SQL入门之创建计算字段

文章目录 7.1 计算字段7.2 拼接字段使用别名 7.3 执行算术计算 这一课介绍什么是计算字段&#xff0c;如何创建计算字段&#xff0c;以及如何从应用程序中使用别名引用它们。 7.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式&#xff0c;下面举几个例子。 …

前端Excel导出实用方案(完整源码,可直接应用)

目录 前言&#xff1a; 技术选型&#xff1a; 主要功能点&#xff1a; 核心代码&#xff1a; 完整代码&#xff1a; 开发文档 前言&#xff1a; 在前后端分离开发为主流的时代&#xff0c;很多时候&#xff0c;excel导出已不再由后端主导&#xff0c;而是把导出的操作移…

关于锁的粒度问题——面试

锁的粒度划分主要有三种&#xff1a;表级锁、页级锁和行锁 1.表级锁&#xff1a; 对整张表加锁&#xff0c;粒度最大&#xff0c;加锁的并发度最低&#xff0c;会导致其他事务无法访问该表&#xff0c;只有当前事务提交或者回滚后才能释放锁。表级锁适用于对表进行全表操作的场…