android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

一、类和构造方法

(类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解;百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C++,书写格式不要和Java混淆!)

什么是类?什么是对象?对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们之间的关系是,对象是类的实例,类是对象的模板。

举个例子:老师是对所有老师的总称,李老师是老师行业里的一个老师。那么老师就可以理解为是类,它是抽象的;而李老师就可以理解为是对象,他是老师这个类的一个实例。

a)类

public class Teacher{

public string name;

public int age;

public static int num

public void TeacherRank(){

intgrade;

}

}

一个类可以包含三种变量:1、局部变量2、成员变量3、类变量(静态变量)

1、局部变量:顾名思义,局部的变量,在方法或者语句块中被定义的变量,在方法结束后,变量就会自动销毁。如上代码中,TeacherRank方法中的grade变量。

2、成员变量:定义在类中、方法之外的变量,可以被类中的方法和语句块访问,在创建对象的时候实例化。如上代码的name和age。

3、类变量(静态变量):声明在类中、方法体之外,用static修饰。如上代码中的num。

b)构造方法:

在类中,不得不提到构造方法,每个类都有构造方法,构造方法的名称必须与类同名,一个类可以有多个构造方法,然而在上文例程中并没有这个方法,并没有看到和类同名的构造方法,这是因为如果没有显式的定义构造方法的话,编译器将会为该类提供一个默认构造方法:public Teacher (){}。

其次,普通方法是用来定义对象具备的功能,只能被对象调用且可以多次调用;而构造函数是用于对象初始化,所以定义的是对象在建立时应该具备的内容,由Java虚拟机(JVM)调用,且只在创建对象时候调用。

那我们再修改上文代码,加入构造方法:

public class Teacher{

public string name;

public int age;

public static int num

public Teacher (){}

public Teacher (String name , Int age){

this.name= name;

this.age= age;

}

public void TeacherRank(){

intgrade;

}

}

二、对象

对象是通过new className(类名)产生的,在创建一个对象的时候,至少要调用一个构造方法。

例如:Teacher MrLi = new Teacher();

或者Teacher MrLi = new Teacher(“LiLei”,23);

可以看出创建对象有三步:声明、实例化、初始化。对应上面代码,声明Teacher的一个叫MrLi的对象,用关键字new来实例化,再使用构造方法来初始化对象。

三、访问权限控制

为供类库开发人员向客户端程序员指明哪些是可用的、哪些是不可用的,Java提供了访问权限修饰符,按照权限大到小排序:public、protected、无修饰词、private。

在说明访问权限控制之前,简单说明什么是包,包就是一组类在单一的名字空间之下被组织在一起,就像《Thinking in Java》一书中举的例子,在Java的标准发布中有一个工具库,被组织在java.util名字空间之下,里面有很多的工具类,那么java.util就是一个包。需要使用这些工具类的时候(拥有权限的情况下),需要使用import关键字将其导入或者直接在创建对象的时候指定包名,如import java.util.ArrayList和java.util.ArrayList list =new java.util.ArrayList()。

1.public:权限最大,允许所有类访问,但其他包下的类想要访问,使用import关键字将其导入。

2.Protected:不可以被其他包使用,可在本类、同包下以及继承类允许被访问。

3.无修饰词:只可以在本类、同包下允许被访问。

4.private:只在本类中允许被访问。

四、重载(overload)

为了方便理解重载,举个现实交流的例子:你去了你朋友家,你朋友家非常大,你想上厕所,这时候你就会问“我想去方便一下,你方便告诉我厕所在哪吗”,句子中两个“方便”却有不同的意思。那么这两个“方便”就构成了重载。

重载指的就是在一个类中,除参数以外,其他外部特征都一样的方法(方法名、返回值声明、修饰符)。

最典型的例子就是上面提到的构造方法,public Teacher (){}和public Teacher (String name , Intage){…}就构成了重载。

当然,凡是方法都可以构成重载。我们修改上面例程如下:

public class Teacher{

public Teacher (){}

public Teacher (String name , Int age){…}

publicTeacherRank(){…}

publicTeacherRank(Int rank){…}

}

方法TeacherRank()和方法TeacherRank(Int rank)也构成重载。

五、this关键字

在例程中,

public class Teacher{

public string name;

public int age;

public Teacher (String name , Int age){

this.name = name;

this.age = age;

}

}

你会发现Teacher类中有name和age两个成员变量,而Teacher (String name , Int age)方法中,也有两个名字相同的局部变量,那么问题来了,在Teacher (String name , Int age)中,我们如何区分哪个是成员变量的name和age?哪个是局部变量的name和age呢?为此有一个专门的关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。

那么答案非常明了了,在上面例程中,方法内this.name和this.age指的就是成员变量。因为类是通过对象来实现的,this表示当前对象,那么这里对象的name和age只能指的是那两个成员变量。

既然this表示当前对象的引用,那么自然就可以用this来实现构造器中调用构造器来达到避免重复代码。需要注意的是,可以用this调用一个,但是不能调用用两个,而且this的调用必须写在第一行,例程修改如下:

public class Teacher{

public string name;

public int age;

public TeacherRank(){…}

public TeacherRank(String name){

this.name = name;

}

public Teacher (String name , Int age){

this(name);

this.age =age;

}

}

六、static关键字

static(静态)可以修饰变量、方法以及代码块,被修饰的变量和方法分别可称为静态变量(类变量)和静态方法。

a)静态变量(类变量)如:public static int num = 0;

静态变量会被所有对象共享,同时,局部变量不能被声明为static变量(这里需要说明的误区是,static修饰之后不会影响访问权限。而且Java没有全局变量一说)。

b)静态方法如:public static voidnum(){…}

静态方法不依附于任何对象就可以被访问,正是因为其不依附于任何对象,所以不能访问类非静态方法/变量(因为非静态的是必须依附在对象上),相反的,类非静态方法是可以访问静态方法/变量的。

c)static修饰代码块

修改之前的例程如下:

public class Teacher{

static{

int youngage = 30;

}

public void AgeGroup(){

if(age < youngage){System.out.println(“年轻教师”);}

}

}

可以看出直接用static修饰{代码块}即可,但是这么用有什么区别呢?

那对比一下代码:

public class Teacher{

public void AgeGroup(){

int youngage = 30;

if(age < youngage){System.out.println(“年轻教师”);}

}

}

方法的功能上没什么区别,但是在每次调用方法AgeGroup ()时,都要创建youngage并赋值,而声明为static之后,只要创建,就一直存放在内存中。

七、final关键字

final,不可改变的,为了更好的设计或效率,常常需要final来声明。

a)final数据private final int i = 0;

final关键字修饰数据时,可以使数据恒定不变,如一个永不改变的编译时常量、一个运行时初始化之后就不会改变的值。

final定义常量:常量必须是基本数据类型,定义时必须对其进行赋值。

final修饰对象:对象引用初始化时指向一个对象之后,就无法再改变它,令它指向其他对象。

当final修饰参数时候,参数同上一样,不能被修改,只能被读取。

空白final:这里需要了解一下空白final,空白final即使声明为final之后未给初始值的情况,在Java中是允许存在的,如:private final int i。但是final在使用前必须被初始化。

b)final方法private final void i(){ };

final修饰方法的时候主要出于一个作用:把方法锁定,避免任何继承类修改其含义。(无法覆盖)。当然要注意的是,在早期的Java中,可以使用final方法来提高效率,但是在方法内程序代码很多,方法很大时就看不到任何效果,在Java SE5和6的时候,应该让编译器和JVM去处理效率问题。

c)final类

final修饰类的时候作用和方法差不多,就是不可以被继承,不存在子类。当一个类被定义为final时,其类内的所有方法都默认为final,不管类中的方法是否定义了final。

------------------------------------------------分割线----------------------------------------------------------

上文如有错误、写得不合理以及有疑惑的地方,希望您可以在评论区提出。

在下十分感谢。

如果只是想在评论区吐吐槽、聊聊心得、卖个萌,同样也十分欢迎。

祝大家生活美好,干杯!~( ゜▽゜)つロ

转载请注明原作者以及附上原文章地址,谢谢。

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

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

相关文章

『003』Shell命令

『001』索引-Linux Shell Command shell命令 《01》【线上查询及帮助】【001】-【001】 【001】- 点我快速打开文章【man】【help】【已改版】《02》【文件及目录操作】【002】-【008】 【002】- 点我快速打开文章【ls】【cd】【已改版】【003】- 点我快速打开文章【cp】【find…

尝试将WCF映射到Java术语

通过写这篇文章&#xff0c;我冒着被.NET和Java社区拒绝的巨大风险。 试图解释Java术语WCF &#xff08;代表Windows Communication Foundation&#xff09;是什么。 从WCF到Java的映射并不是很简单。 我缺乏对WFC使用者应该了解的与服务通信类型的了解&#xff1a;请求/响应或…

bootbox.js

bootbox:一个弹出框插件&#xff0c;官网看一下例子就好了&#xff1a;http://bootboxjs.com/examples.html 目前来说应该只要调用bootbox.js就可以了&#xff0c;没有css的问题 1.有最基本的调用就是 bootbox.alert("This is the default alert!"); 就什么都不做&…

android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

在android应用中&#xff0c;多屏滑动是一种很常见的风格&#xff0c;没有采用viewpager的代码实现会很长&#xff0c;如果采用ViewPager&#xff0c;代码就会短很多&#xff0c;但是使用ViewPager也有弊端&#xff1a;需要导入android-support-v4.jar、细节无法控制。不过现在…

相对路径./与../区别

一、基本概念 1、相对路径-顾名思义&#xff0c;相对路径就是相对于当前文件的路径。网页中一般表示路径使用这个方法。 2、绝对路径-绝对路径就是你的主页上的文件或目录在硬盘上真正的路径。绝对路径就是你的主页上的文件或目录在硬盘上真正的路径&#xff0c;比如&#xff0…

nodejs进程异常退出处理方法

1. 捕获uncaughtException process.on(uncaughtException, function (err) {//打印出错误console.log(err);//打印出错误的调用栈方便调试console.log(err.stack)&#xff1b; }); 2. 使用守护进程 例如&#xff1a;node-forever的守护和日志记录功能 安装非常容易 [sudo] npm …

关于Java的常见误解

Java是世界上使用最广泛的语言&#xff08;需要引用&#xff09;&#xff0c;每个人对此都有自己的见解。 由于它是主流&#xff0c;所以通常会嘲笑它&#xff0c;有时是正确的&#xff0c;但有时批评只是不切合实际。 我将尝试解释我最喜欢的5个关于Java的误解。 Java速度很慢…

tomcat中间件的默认端口号_修改tomcat默认端口号8080

修改tomcat端口号端口修改tomcattomcat服务器的默认端口号是80801 只启动一个tomcat的情况当我们不想使用8080端口&#xff0c;需要修改为其他端口时&#xff0c;我们可以:1, 打开tomcat安装目录下的conf目录&#xff0c;找到server.xml文件。找到以下代码connectionTimeout&qu…

我们的爱

对白-什么感觉怎么样?-跟冷风一起-怎么了?-感觉好么?-怎么叫,好不好-时间过的快么?-带他的时候还真不快-呵呵-我想我不用再买月卡了-嘛?-没什么-恩?说-你考虑清楚吧-什么?-我说你俩早上论坛里灌的那么开心呢-.-呵呵-看样子,又要闹革命了-我很冷静-转载于:https://www.cn…

this指向问题

我今天下午本来想做个就是tr鼠标移出之后过三秒把对应的input添加hiddens类 然后我就这样写了 $(.table>tbody>tr).mouseout(function(){var index$(this).index();setTimeout(function(){console.log(index);console.log($(this));$(this).parents(.table).siblings(.c…

shouji android输入法,安卓手机主流输入法对比

什么是合格的输入法&#xff1f;1. 按键布局合理2. 词库丰富且云识别准确3. 文字编辑4. 符号快捷输入5. 翻译功能6. 语音识别转文字对比五款主流输入法&#xff1a;触宝、百度、搜狗、讯飞、QQ均为默认皮肤和设置。1. 按键布局从哪进从哪出&#xff0c;这应该是一个输入法最基本…

DS博客作业06--图

1.本周学习总结 1.思维导图 2.谈谈你对图结构的认识及学习体会。 原本以为树已经够难的了&#xff0c;结果发现觉得太早了。图好难&#xff0c;看不懂。图是由两个集合V和E组成&#xff0c;V指的是顶点的有限集合&#xff0c;E代表两个不同顶点的边的有限集合&#xff0c;图也分…

c 给定字符串中查找_面试 | 查找类算法精析

点击上方蓝字设为星标每周一、三、五上午 8:30 准时推送下面开始今天的学习&#xff5e;前言查找&#xff0c;是使用计算机处理问题时的一个最基本的任务&#xff0c;因此也是算法面试中非常常见的一类问题。很多算法问题的本质&#xff0c;就是要能够高效使用查找。LeetCode 中…

Jiaozi帮忙买的Secret Garden的票拿到了,谢谢Jiaozi

10.7 晚 19&#xff1a;30文化艺术中心大剧院转载于:https://www.cnblogs.com/rexhost/archive/2004/09/28/47608.html

LInux安装MySQL5.7.24详情

安装包下载 MySQL 的官网下载地址&#xff1a;http://www.mysql.com/downloads/ 我安装的是5.7版本 第二步&#xff1a; 选择&#xff1a;TAR (mysql-5.7.24-el7-x86_64.tar) 点击下载 然后点击 No thanks, just start my download. 进行下载。 检查是否安装过mysql [rootmas…

正确设置JUnit测试名称

寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类&#xff0c;方法&#xff0c;变量&#xff0c;仅举几例。 但是&#xff0c;什么使名字成为好名字呢&#xff1f; 引用Oncle Bob的话&#xff1a;“三件事&#xff1a;可读性&#xff0c;可读性和可读性&#xff01…

angular学习的一些小笔记(中)之ng-disabled轻松实现按钮是否可点击状态

哇&#xff0c;这个可以轻松实现输入值就按钮可点击&#xff0c;输入框没有值则不可点击的状态呀 看代码 <!doctype html> <html ng-app""> <head><script src"https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.3/angular.js&q…

html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性

什么是 HTML5HTML的发展历程如下&#xff1a;产生于1990年1997年 HTML4 出现&#xff0c;成为互联网开发的标准2008年&#xff0c;HTML5正式出现&#xff0c;2002年趋于稳定HTML在发展过程中&#xff0c;HTML4.01 版本维持了长达十年的时间&#xff0c;之后 HTML5 标准才出现&a…

How to show out three rows from the same databand On A4?

How to show out three rows from the same databand On A4? QuotePost by DoraHuang Tue Mar 13, 2018 4:13 am Hello, there are few questions to ask,1. How to present a report from one DataBand to show out three info?My questions like the picture:it is A4 pag…

rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...

导读&#xff1a;本文将详细科普云计算的概念、云服务的发展现状&#xff0c;并逐一介绍各种云服务模式&#xff08;IaaS、PaaS、SaaS、DaaS&#xff09;&#xff0c;建议收藏&#xff01;01 云计算的概念云是一种服务&#xff0c;可以像使用水、电、煤那样按需使用、灵活付费&…