「java模板函数」模板类中的模板函数

博主:adminadmin 2022-12-14 08:51:06 75

本篇文章给大家谈谈java模板函数,以及模板类中的模板函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

在JAVA中是如何体现C++的函数模板这种机制的?

很不好意思,Java的特性比C++少得多。Java不支持模板。只支持很少的类似于C++模板的语法来实现很有限的泛型编程。

Java对泛型编程的支持也是最近才加进去的,而且支持的很不好。你就不用指望能像C++那样用它了。

Java是一个非常纯粹的OOP语言,它天生就是相对动态的、后期的,编译期处理的信息非常少,这和C++强静态的特性是完全相反的。

Java的绝大部分类型信息都属于RTTI,也就是在运行时动态获取,不像C++是在编译期由编译器推导的,所以Java基本上不可能支持C++那样灵活的模板。

Java的泛型也是,说白了只是个障眼法,用类似C++那样的模板语法来包装了其面向对象动态cast的本质而已。

举例说,java中的Vectorint,你给里面保存int的时候,每一个int都是先被包装成一个Integer对象然后塞进去,取出来的时候是先取出Object对象,转换成Integer对象,然后再从里面取出int这个整数,绕了很大一个弯子。

虽然从代码上写的和C++差不多都很简洁,但是实际的效率和C++差了n个数量级。这点上实在是比较恶心,C#都做得比它好,C#至少对于值类型还是会实例化代码的。

Java天生就是一个鼓励动态化、运行期化、OOP化的一个语言,所以它不适合使用C++中那些泛型编程的范式来设计程序。你如果能够忍受Java的装箱拆箱的巨大效率损失,你可以用OOP的方式来实现那种同一个函数服务多种类型的想法,但是的确很低效。

java中,什么是类,方法,函数? 三者又有什么区别?

类 就是 指一个种类,比如 人 ,是一个类,动物 也是一个类,等等

而如果特指某个人,则是实体。

在Java中,类的定义是 : class 类名 ,通常,我们在Java 中提到class,就是指类的意思。

( 符号要去掉)

另外,方法与函数其实一样的,只是在C语言中我们习惯叫函数,而在Java中我们习惯叫方法,不管怎么叫,都是指同一个意思。

方法(或函数,为了方便,下面我都说 方法 ) 必须在类中。方法的定义 :

修饰符返回值方法名 (参数类型 参数名){.....}

( 符号要去掉)

通常你看到一个带()的就是方法了,例如: aa.XXX(); 是指调用实体 aa的XXX()方法。

类 可以拥有 属性跟方法。方法在类中。

在 类 和 方法 中均创建 某个类 的实体,可以调用类的方法。

程序运行时,首先是从main()方法开始运行的。

main()函数必须放在 跟你文件名同名的类中,另外一个class文件中只能有一个mian()方法,

否则,在编译运行的时候会出错。

JAVA中的泛型和C++中的模板是不是一样啊,哪位大侠知道,请举例说明下,多谢。

很不一样,随便列举一些

c++的模板,就如同模板这个词字面上的意思一样,属于字符的替代过程

比如有一个模板函数

template typename T

void foo(T t) {

t.bar();

}

那么这个可以编译。不过你使用这个函数的时候,T必须是包含bar函数的类

java 则不行

static T void foo(T t) {

t.bar();

}

这个是通不过编译的,因为编译器只知道T是一种Object,不知道T的具体类型。

你甚至不能写T t = new T(); 因为在这个方法定义的时候,编译器也不能保证T是有构造函数的

因为c++的模板做事方式是字符串的替代,所以模板参数是int等基本类型是完全没有问题的。

java则不允许int等基本类型作为泛型参数。比如ArrayListint是不可以的

java 有covariance 和 contravariance

也就是也可以写一个泛型方法,限定泛型参数是某一个具体的类的子类,比如

static T void foo(ListT extends Object list)

这将能够接受ListString作为参数,如果只写ListObject,那是不能将ListString作为参数传给他的

c++没有这种机制

Java中如何调用函数和自定义函数

调用函数

System.out.println("hello world");

println即为函数,out为是输出对象,System为java系统类。

java是面向对象语言,调用非静态方法时,需要创建一个类的对象才能调用方法;

调用静态方法时,直接用类名调用即可。

import java.util.Array; //调用其他包下的方法时需要导包

Array.sort(arr); //Array是工具类,方法都为静态方法

定义函数

修饰符 返回值类型 方法名(参数类型 参数名){

...

方法体

...  

return 返回值

;}

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。

返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。

方法名:是方法的实际名称。方法名和参数表共同构成方法签名。

参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

方法体:方法体包含具体的语句,定义该方法的功能。

注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。

拓展内容

java

Java源程序(.java文件)——java字节码文件(.class文件)——由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——字节码文件(.class)就会在java虚拟机中执行。

Java的基本包

java.lang 其中包含有:

接口:Comparable、Cloneable、Runable等

类:八个基本数据类型封装类、Math、Runtime、Object、String、StringBuffer、Thread、Exception等

java的模板类实例化问题

class vector(T)这里面的T表示某种具体的类类型,由你实际调用的时候来决定,你可以阅读一些关于Java泛类型的知识,就会明白了。

然后针对你main()方法里面v.add((byte)0);你把byte作为了"某种具体的类",那么

vectorT v=new vectorT();

改为以下就可以了:(用byte的封装类Byte作为某种具体类)

vectorByte v=new vectorByte(null);

关于java模板函数和模板类中的模板函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-14,除非注明,否则均为首码项目网原创文章,转载请注明出处。