Java SE 是什么,包括哪些内容(九)?

本文内容参考自Java8标准
Java中的基本类型有一个特性:它能自动从一个"较小"的类型转换成"较大"的类型!
上面这句话什么意思呢?指的就是byte、char、short等"较小"类型能自动转换成int类型,而不需要额外的其他操作。
因此,如果这个自动转换的过程涉及到重载,可能会造成混淆。
下面举例说明将基本类型传递给重载方法时的情况:

1、传入的参数类型小于等于重载方法的形式参数类型。
// 将基本类型传递给重载方法public class PrimitiveOverloading{//根据输出的字符串来确认调用的是哪一个方法。//方法f1()-f7()逐步减少重载的方法是采取了排除法。void f1(char x){System.out.print("f1(char)");}void f1(byte x){System.out.print("f1(byte)");}void f1(short x){System.out.print("f1(short)");}void f1(int x){System.out.print("f1(int)");}void f1(long x){System.out.print("f1(long)");}void f1(float x){System.out.print("f1(float)");}void f1(double x){System.out.print("f1(double)");}void f2(byte x){System.out.print("f2(byte)");}void f2(short x){System.out.print("f2(short)");}void f2(int x){System.out.print("f2(int)");}void f2(long x){System.out.print("f2(long)");}void f2(float x){System.out.print("f2(float)");}void f2(double x){System.out.print("f2(double)");}void f3(short x){System.out.print("f3(short)");}void f3(int x){System.out.print("f3(int)");}void f3(long x){System.out.print("f3(long)");}void f3(float x){System.out.print("f3(float)");}void f3(double x){System.out.print("f3(double)");}void f4(int x){System.out.print("f4(int)");}void f4(long x){System.out.print("f4(long)");}void f4(float x){System.out.print("f4(float)");}void f4(double x){System.out.print("f4(double)");}void f5(long x){System.out.print("f5(long)");}void f5(float x){System.out.print("f5(float)");}void f5(double x){System.out.print("f5(double)");}void f6(float x){System.out.print("f6(float)");}void f6(double x){System.out.print("f6(double)");}void f7(double x){System.out.print("f7(double)");}//方法testConstVal()void testConstVal(){//打印字符串"5:".System.out.print("5:");//参数是5,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。//或者换句话说,将5当做了什么类型处理。f1(5);f2(5);f3(5);f4(5);f5(5);f6(5);f7(5);//不输出任何内容,作用就是换行。System.out.println();}//方法testChar()void testChar(){char x = 'x';//打印字符串"char:".System.out.print("char:");//参数是char类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testByte()void testByte(){byte x = 0;//打印字符串"byte:".System.out.print("byte:");//参数是byte类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testShort()void testShort(){short x = 0;//打印字符串"short:".System.out.print("short:");//参数是short类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testInt()void testInt(){int x = 0;//打印字符串"int:".System.out.print("int:");//参数是int类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testLong()void testLong(){long x = 0;//打印字符串"long:".System.out.print("long:");//参数是long类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testFloat()void testFloat(){float x = 0;//打印字符串"float:".System.out.print("float:");//参数是float类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//方法testDouble()void testDouble(){double x = 0;//打印字符串"double:".System.out.print("double:");//参数是double类型,分别调用f1()-f7().//通过具体的结果字符串了解调用的是哪一个参数类型的方法。f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);//不输出任何内容,作用就是换行。System.out.println();}//程序执行的入口main方法。public static void main(String[] args){//创建对象。PrimitiveOverloading p = new PrimitiveOverloading();//方法调用。p.testConstVal();p.testChar();p.testByte();p.testShort();p.testInt();p.testLong();p.testFloat();p.testDouble();}}

以上示例代码的执行结果解析如下:

第一个方法testConstVal(),因为方法f1()-f4()中都有int类型参数的重载方法,所以f1()-f4(),5都被作为int类型来处理了(结果都是int类型的结果:f1(int)f2(int)f3(int)f4(int)),而f5()-f7(),没有int类型的重载方法,所以5只能被当做其中范围最小的类型来处理(f5()是long类型,f6()是float类型,f7()是double类型:从结果可以看出:f5(long)f6(float)f7(double))。

第二个方法testChar(),已经明确了参数x就是char类型,仅有f1()有类型为char的重载方法,所以直接作为char类型处理了(f1(char)),但是f2()-f4()没有char类型的重载方法,所以char类型被直接升级为int类型处理(结果都是int类型的结果:f2(int)f3(int)f4(int)),而f5()-f7(),都是将char类型直接升级为最小范围的重载类型处理(f5()是long类型,f6()是float类型,f7()是double类型:从结果可以看出:f5(long)f6(float)f7(double))。

第三个方法testByte(),已经明确了参数x就是byte类型,f1()-f2()中都有byte类型的重载方法,所以都被当成byte类型处理(f1(byte)f2(byte)),f3()-f7()中都没有byte类型的重载方法,所以都被当成了f3()-f7()中范围最小的数据类型处理(f3()是short,f4()是int,f5是long,f6()是float,f7()是double)。

第四个方法testShort(),已经明确了参数x就是short类型,结果性质与第三个方法是一致的,有重载类型就按重载类型处理,没有就按数据范围最小的那个处理。

第五个方法testInt(),已经明确了参数x就是int类型,结果性质与第一个方法是一致的,第一个方法直接输入5,因为没有明确这个5是什么类型的,所以使用的是Java的默认类型,就是int,所以testConstVal()就相当于testInt()。

第六个方法testLong(),已经明确了参数x就是long类型,f1()-f5()都有long类型的重载方法,所以都被当成long类型处理,f6()-f7()中都没有long类型的重载方法,所以都被当成了f6()-f7()中范围最小的类型处理(f6()是float,f7()是double)。

第七个方法testFloat(),与第六个方法结果性质一致。

第八个方法testDouble(),f1()-f7()都有double类型的重载方法,所以全都当成double类型处理了。

总结起来就是:常数值5被当成了int类型处理,因为Java中默认使用的数值就是int类型的,所以如果有某个方法接受int类型的参数,它就会被调用,如果传入的数据类型小于方法中的形式参数类型,比如f6()中最小的类型都是float类型,这时你传入一个int类型的数值,那么它就会被自动升级为float类型。然后得出结果。char类型有一些特殊,如果无法直接找到char类型的重载方法,那么char类型就会直接升级为int类型。

2、传入的参数类型大于重载方法的形式参数类型。
// 传入的实际参数类型大于重载方法的形式参数类型public class Demotion{//根据输出的字符串来确认调用的是哪一个方法。//方法f1()-f7()逐步减少重载的方法是采取了排除法。void f1(char x){System.out.print("f1(char)");}void f1(byte x){System.out.print("f1(byte)");}void f1(short x){System.out.print("f1(short)");}void f1(int x){System.out.print("f1(int)");}void f1(long x){System.out.print("f1(long)");}void f1(float x){System.out.print("f1(float)");}void f1(double x){System.out.print("f1(double)");}void f2(char x){System.out.print("f2(char)");}void f2(byte x){System.out.print("f2(byte)");}void f2(short x){System.out.print("f2(short)");}void f2(int x){System.out.print("f2(int)");}void f2(long x){System.out.print("f2(long)");}void f2(float x){System.out.print("f2(float)");}void f3(char x){System.out.print("f3(char)");}void f3(byte x){System.out.print("f3(byte)");}void f3(short x){System.out.print("f3(short)");}void f3(int x){System.out.print("f3(int)");}void f3(long x){System.out.print("f3(long)");}void f4(char x){System.out.print("f4(char)");}void f4(byte x){System.out.print("f4(byte)");}void f4(short x){System.out.print("f4(short)");}void f4(int x){System.out.print("f4(int)");}void f5(char x){System.out.print("f5(char)");}void f5(byte x){System.out.print("f5(byte)");}void f5(short x){System.out.print("f5(short)");}void f6(char x){System.out.print("f6(char)");}void f6(byte x){System.out.print("f6(byte)");}void f7(char x){System.out.print("f7(char)");}   //方法testDouble直接使用了范围最大的类型double进行测试。void testDouble(){//创建测试的变量,类型为double,名称为x.double x = 0;//打印字符串:"double augument:"System.out.print("double augument:");//传入double类型的实际参数.f1(x);//以下的方法都做了强制转换,因为它们的数据范围都要比double类型的要小。//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f2((float)x);//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f3((long)x);//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f4((int)x);//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f5((short)x);//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f6((byte)x);//将x做强制转换,转换为float类型。所以传入的参数实际为float类型。f7((char)x);}//程序执行的入口main方法。public static void main(String[] args){//创建对象。Demotion d = new Demotion();//调用方法。d.testDouble();}}

结果示例:

从结果可以看出,如果方法只接受较小范围的参数,而传入的参数范围更大,需要通过强制转换,否则编译器会报错!程序无法执行。
如图:

PS:时间有限,有关Java SE的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正!

JavaSE基础知识(九)--Java中的方法重载(涉及基本类型的重载)相关推荐

  1. java里面string什么意思_「Java基础知识」Java中的字符串是什么

    原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...

  2. java里面value_「Java基础知识」Java中包含哪些运算符

    原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...

  3. 计算机编码基础知识及Java中编码转换

    一.前言 最近项目中用到招商银行的企业直连功能,通过接口的方式直接调用招商银行的前置机(http://www.cmbchina.com/corporate/firmbank/FirmbankInfo. ...

  4. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. java 代码名称转换_计算机编码基础知识及Java中编码转换

    1.ASCII 码 学过计算机的人都知道 ASCII 码,ASCII 码是美国标准信息交换代码(American Standard Code for Information Interchange)的 ...

  6. java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法

    前言 今天我们要探讨的问题,是java基础语法的最后一个问题,也就是java中的方法,今天主要从以下几个方面来介绍: 方法是什么(定义) 方法的分类 方法的调用 应该说,学完今天的知识,你至少应该看懂 ...

  7. Java基础知识(九) 容器

    Java基础知识 1. Java Collections 框架是什么 2. 什么是迭代器 3. ArrayList.Vector 和 LinkedList 有什么区别 4. HashMap.Hasht ...

  8. JavaSE基础知识(十八)--Java多态之向上转型(多态初步)

    Java SE 是什么,包括哪些内容(十八)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 开篇一句很重要的话:在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种 ...

  9. 42道最新java开发常见面试题:JavaSE基础知识

    1.JVM.JRE和JDK的区别? JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JRE(Java ...

最新文章

  1. LiveVideoStackCon 2018展现多媒体技术生态多样性
  2. python学习第19天
  3. BZOJ2286 : [Sdoi2011]消耗战
  4. 通信原理实验c语言,基于LabVIEW软件的通信原理实验教学平台设计方案
  5. php时间日期函数转字符串,php自定义时间转换函数示例
  6. c# 多线程界面卡顿_多线程同步等候 导致主界面UI卡顿,求解~
  7. 关于js拷贝对象的问题
  8. KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
  9. 神器 mimikatz - 直接抓取 Windows 明文密码
  10. 图像质量评价方法介绍
  11. 我的知识星球 -【达叔与他的朋友们】程序员
  12. (E1)ENVI-met介绍及下载
  13. 月嫂的薪资为啥这么HIGH!
  14. 京东智能云APP可用来做什么?
  15. Mkv转MP4方法集合整理
  16. 快速入门Web阅读器开发
  17. 艺术家已经失业,下一个会是谁?
  18. wps中ppt转html,wps ppt转换视频 dps转换ppt/ppt转视频的方法
  19. 把DX,AX中的双字右移四位
  20. POI 创建PPT小记

热门文章

  1. 【国企招聘合集」 运维/java/架构师/前端
  2. 改善睡眠的小妙招,这些双十一推荐助眠好物你要知道
  3. Boost电路SX1308单电源转双电源输出低成本Sepic+Cuk方案
  4. 如何提高一个网站的排名?
  5. rtsp直播流转m3u8
  6. Mifare Ultra Light 非接触式IC卡
  7. 搬运视频消重 wide短视频软件怎么去水印
  8. 自定义/修改微信二维码样式
  9. 支付宝 APP登录 获取用户信息 PHP
  10. 【牛客网-公司真题-前端入门篇】——小米秋招笔试-前端