首页 > 编程语言 >Java运算及理解篇一

Java运算及理解篇一

时间:2023-05-24 10:07:40浏览次数:34  
标签:Java 运算 类型 理解 泛型 方法 Class name

this()与super()区别

super()是用于调用父类构造方法的关键字,必须子类构造的第一行。this()指向本对象的指针,用于调用当前类的其他构造方法。

public class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
        System.out.println("Animal constructor called.");
    }
}

public class Dog extends Animal {
    private int age;

    public Dog(String name, int age) {
        super(name); // 调用父类构造函数
        this.age = age;
        System.out.println("Dog constructor called.");
    }

    public Dog(String name) {
        this(name, 0); // 调用另一个构造函数
        System.out.println("Another Dog constructor called.");
    }
}

a=a+b与a+=b的区别

+=隐式的将加操作结果类型转换赋值接收的类型。如果是两个整数相加,入byte首先转换成int再执行+操作(如果小的范围接收大的范围值会报编译错误)。

byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok

3*0.1 == 0.3 为false

这是由于计算机在进行二进制浮点数运算时可能存在精度误差导致的。在二进制中,0.1不能被准确地表示为有限位的小数。因此,当计算30.1时,计算机内部会先将0.1转换成一个最接近它的二进制浮点数,然后再进行乘法运算。由于这个转换过程中可能会存在一些微小的误差,所以得到的结果可能会稍微偏离期望值。例如,在某些情况下,计算机内部可能使用一种比0.1略大一些的近似值来进行计算,从而导致结果与期望值不同。这就是为什么30.1==0.3为false的原因。

泛型的作用

  1. 提供代码重用性:通过泛型,我们可以写出可以适用于不同类型的代码,提高代码的可重用性。
  2. 类型检查:通过泛型,编译器在编译时就能够发现类型错误,从而避免因为类型转换错误而导致的运行时错误。
  3. 减少类型转换:在使用泛型时,不需要进行强制类型转换,代码更加简洁清晰。
  4. 支持集合框架:Java集合框架中使用了泛型,使得程序员可以创建并操作各种类型的集合对象。

泛型类如何定义使用

简单泛型类

Java运算及理解篇一_泛型方法

多元泛型

Java运算及理解篇一_泛型方法_02

泛型接口定义

Java运算及理解篇一_泛型_03

泛型方法如何定义使用

泛型方法,是在调用方法的时候指明泛型的具体类型。

定义泛型方法语法格式

Java运算及理解篇一_泛型方法_04

调用泛型方法语法格式

Java运算及理解篇一_Java_05

说明一下,定义泛型方法时,必须在返回值前边加一个,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。 Class的作用就是指明泛型的具体类型,而Class类型的变量c,可以用来创建泛型类的对象。

为什么要用变量c来创建对象呢?既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。

泛型方法要求的参数是Class类型,而Class.forName()方法的返回值也是Class,因此可以用Class.forName()作为参数。其中,forName()方法中的参数是何种类型,返回的Class就是何种类型。在本例中,forName()方法中传入的是User类的完整路径,因此返回的是Class类型的对象,因此调用泛型方法时,变量c的类型就是Class,因此泛型方法中的泛型T就被指明为User,因此变量obj的类型为User。

当然,泛型方法不是仅仅可以有一个参数Class,可以根据需要添加其他参数。

为啥使用泛型方法

因为泛型类要在实例化的时候就指明类型,如果想换一种类型,不得不重新new—次,可能不够灵活;而泛型方法可以在调用的时候指明类型,更加灵活。

泛型的上限和下限

在使用泛型的时候,我们可以为传入的泛型类型实参进行上下边界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。

上限

泛型的上限通过extends关键字来指定,表示只能传入某个类及其子类作为泛型参数。例如:

Java运算及理解篇一_泛型方法_06

下限

而下限则通过super关键字来指定,表示只能传入某个类及其父类作为泛型参数。例如:

Java运算及理解篇一_泛型方法_07

Java中泛型时伪泛型

泛型中类型擦除Java泛型这个特性是从JDK1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure),将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。

标签:Java,运算,类型,理解,泛型,方法,Class,name
From: https://blog.51cto.com/u_16084527/6336859

相关文章

  • 不同路径 II(数组、动态规划)、同构字符串(哈希表、字符串)、颠倒二进制位(位运算、分
    不同路径II(数组、动态规划)一个机器人位于一个_mxn_网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网......
  • Java语言springboot框架实现的停车位管理系统
    技术架构技术框架:jQuery+MySQL5.7+mybatis+shiro+Layui+HTML+CSS+JS+thymeleaf运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程1.回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件......
  • 你见过哪些优雅的 java代码优化技巧
    今天分享一些实用的有助于提高代码质量的建议,建议收藏!避免炫技式单行代码代码没必要一味追求“短”,是否易于阅读和维护也非常重要。像炫技式的单行代码就非常难以理解、排查和修改起来都比较麻烦且耗时。反例:if(response.getData()!=null&&CollectionUtils.isNotEmpty(respons......
  • Java语言开发实现的酒店管理系统功能
    技术架构技术框架:ssm+layui+mybatis+bootstrap+jquery+mysql5.7运行环境:jdk8+nginx1.20+tomcat9+IntelliJIDEA+maven+宝塔面板系统本地搭建教程1.下载源码,本地电脑新建一个数据库,导入jiudian.sql文件至数据库中。2.使用IDEA打开jiudians目录,修改数据库信......
  • Java比较器
    Java比较器背景:在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator方式一:自然排序:java.lang.ComparableComparable接口强行对实现它的每个类的对象进行整体排......
  • #yyds干货盘点#JavaScript的数学对象——Math对象
    Math对象●js给我们提供了一些操作数字的方法●也是一种数据类型是复杂数据类型●Math对象的通用语法:Math.xxx()random()●Math.random()这个方法是用来生成一个0~1之间的随机数●每次执行生成的数字都不一样,但是一定是0~1之间的●生成的数字包含0,但是不包含1var......
  • 这可能是最全面的Java面试八股文了
    Java的特点Java是一门面向对象的编程语言。面向对象和面向过程的区别参考下一个问题。Java具有平台独立性和移植性。Java有一句口号:Writeonce,runanywhere,一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编译的Java程序可以在任何带有JV......
  • 深入理解 python 虚拟机:花里胡哨的魔术方法
    深入理解python虚拟机:花里胡哨的魔术方法在本篇文章当中主要给大家介绍在cpython当中一些比较花里胡哨的魔术方法,以帮助我们自己实现比较花哨的功能,当然这其中也包含一些也非常实用的魔术方法。深入分析hash方法在Python中,__hash__()方法是一种特殊方法(也称为魔术方法......
  • 哈夫曼树的实现-Java实现
    哈夫曼的核心思想在于,wpl最小;1packagedataSrtuct.TreeAlgorithm;23importjava.util.ArrayList;4importjava.util.Collections;5importjava.util.List;67publicclassHuffmanTree{8publicstaticvoidmain(String[]args){9int[]......
  • 编写javaweb用到的基本依赖,mybatis-config.xml代码,SqlSessionFactoryUtils.java
    这篇文章仅仅作为记录,供以后复制粘贴使用pom.xml<dependencies><!--Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</vers......