Java运算及理解篇一

发布时间:2023-05-24 09:19:54

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 byteb += a; // ok
3*0.1 == 0.3 为false

这是由于计算机在计算二进制浮点数时可能存在精度误差造成的。在二进制中,0.1不能准确地表示为有限的小数字。因此,当计算3时0.1时,0.1将在计算机内部转换为最接近它的二进制浮点,然后乘法操作。由于转换过程中可能存在一些小误差,结果可能略微偏离预期值。例如,在某些情况下,计算机内部可能使用比0.1略大的近似值,导致结果与预期值不同。这就是为什么30.1==0.3是false的原因。

泛型的作用
  1. 提供代码重用性:通过泛型,我们可以编写不同类型的代码,以提高代码的可重用性。
  2. 类型检查:通过泛型,编译器可以在编译过程中发现类型错误,从而避免类型转换错误造成的操作错误。
  3. 减少类型转换:使用泛型时,无需强制转换类型,代码更加简洁清晰。
  4. 支持集合框架:Java集合框架采用泛型,使程序员能够创建和操作各种类型的集合对象。
如何定义使用泛型类?

简单泛型类

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

多元泛型

Java运算及理解篇一_Java_02

定义泛型接口

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

如何定义泛型方法的使用?

泛型法是在调用方法时指出泛型的具体类型。

定义泛型方法语法格式

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

调用泛型方法语法格式

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

解释一下,在定义泛型方法时,必须在返回值之前添加一个,以声明这是一种持有泛型T的泛型方法,然后使用泛型T作为方法的返回值。Class的功能是指示泛型的具体类型,而Class类型的变量C可以用来创建泛型的对象。

为什么要用变量c来创建对象?既然是泛型方法,就意味着我们不知道具体的类型是什么,也不知道结构方法是什么,所以没有办法去new一个对象,但是可以用变量c的newinstance方法来创建对象,也就是用反射来创建对象。

Class类型需要泛型方法的参数,而Classs则需要Class类型.forName()方法的返回值也是Class,所以可以使用Classs.forName()作为参数。其中,forName()方法中的参数是什么类型,返回的Class是什么类型。在本例中,forName()方法中介绍了User类的完整路径,因此返回了Class类型的对象。因此,在调用泛型方法时,变量c的类型是Class,因此泛型方法中的泛型T被指示为User,因此变量obj的类型是User。

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

为什么要用泛型法?

因为一般类型在实例化时应该指出类型,如果你想改变一种类型,你必须重新new-次,这可能不够灵活;一般方法在调用时可以指出类型,更灵活。

泛型的上限和下限

在使用普通类型时,我们可以限制引入的普通类型实参的上下边界。例如,类型实参只允许引入某种类型的父类或子类。

上限

通过extends关键字指定泛型的上限,表示只能将某一类及其子类引入泛型参数。例如:

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

下限

下限由super关键字指定,表示只能将某一类及其父类作为泛参数传入。例如:

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

Java中泛型时伪泛型

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

上一篇 呕心沥血创作!Redis 面试题汇总!
下一篇 SpringDataJPA 整合 QueryDSL

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题