j***a是静态型语言,j***a是静态语言吗

kodinid 2 0

大家好,今天小编关注到一个比较意思的话题,就是关于java静态语言问题,于是小编就整理了3个相关介绍Java是静态型语言的解答,让我们一起看看吧。

  1. java中的静态方法可以被继承吗?
  2. java为什么要设计静态方法?这样设计的目的是什么?
  3. 方舟编译器是将java代码像C++静态编译,那么为什么安卓当时一开始为啥不用C++?

j***a中的静态方法可以继承吗?

子类没有重新定义静态属性则子类的静态属性与父类的静态属性为同一个变量

当子类重新定义了父类静态属性则子类的静态属性与父类的静态属性是两个不同的变量

java是静态型语言,java是静态语言吗-第1张图片-安济编程网
图片来源网络,侵删)

静态方法调用的是定义这个静态方法的类的静态属性。

j***a为什么设计静态方法?这样设计的目的是什么?

1.静态方法:整个类所共有的东西,就像一个家族都姓一个姓,

j***a类可以直接用类名点静态方法名调用

java是静态型语言,java是静态语言吗-第2张图片-安济编程网
(图片来源网络,侵删)

2.实例方法:是类创建对象特有的,就像你们家有多少钱,你叔叔家有多少钱

j***a类要new创建对象点方法名调用

3.Stastic为静态变量,在一个类中的任何地方都可以调用,而final表示这个变量不能被修改

静态方法属于类,和对象无关,也就是说不需要实例化可以直接使用。静态方法更像是工具提供的工具方法,对给定参数执行固定操作,平时用的系统方法可以直接使用的就是静态方法,而scanner一类就需要自己来实例化才能使用

java是静态型语言,java是静态语言吗-第3张图片-安济编程网
(图片来源网络,侵删)

1 支持main函数这种机制,当然你也可以设想一个语言,没有main函数,而是你通过一个类启动程序启动时booter默认建立这个类的一个唯一实例,然后调用其run方法,也是可以的,或者说你也可以将整个jvm的运行看做是一个唯一的对象,形式问题

2 有些东东其实并不适合面向对象的方式搞,比如开平方,Math.sqrt(x),你可以弄成x.sqrt()这种形式,但是如果要加一个开立方方法,是不是要将所有可能输入的x都加上这个方法,那对现有库的入侵性太强,不如做成函数,把x作为输入,然后函数内部再根据x提供的接口实现这个功能

3 和类绑定,这样每次调用就不需要new对象。Scala里面就没有静态这个概念,但是可与用object来代替

静态方法是属于类的,普通方法是属于对象的,外部调用静态方法可以直接用类名.方法名方式,不需要创建对象,而调用普通方法需要对象.方法名的方式,我认为这样设计的目的是程序能够更方便的调用方法,如果程序在多个地方多次调用共同的方法,就不用new对象了,多用于工具类。

简单的一个思考:如果你每次都要有NEW一个对象然后才能调用方法,你想想反复调用的情况下你是不是写多了很多代码

静态方法的存在说得简单点就是为了让人方法编程的。

其实从另一个角度看,别人写好的API肯定不希望由你来创建对象,而是提供接口方法给你调用就行了。

方舟编译器是将j***a代码像c++静态编译,那么为什么安卓当时一开始为啥不用C++

我想先说明一下,其实安卓一开始就是支持c++的。

谷歌提供给开发者的常见工具叫android sdk(Software Development Kit软件开发工具包),这个主要是使用J***a(现在添加了对kotlin的支持)。同时还提供了另一套开发工具ndk(native development kit),这个是支持开发者使用c/c++进行应用开发的。

也就是说谷歌一直支持开发商使用多种语言开发安卓应用,但是有个现实的问题是J***a程序员多而且便宜,c/c++程序员少而且贵,J***a代码更好生产和维护,所以更多的应用开发商会选择J***a。

而且在方舟编译器之前,安卓运行时已经支持预编译AOT(Ahead Of Time)。工作方式是在应用安装过程中,将dalvik字节转换成Arm本地指令集。但APK在运行时,还是需要依赖虚拟机。

方舟的这个编译器,将转换过程提前到生产过程,这个应该能够带来巨大的性能提升。毕竟的CPU和cpu性能不是一个档次,而且编译过程对速度不敏感,安装过程则对速度极度敏感,编译过程可以进行更深度优化。另一个是完全抛弃了虚拟机,理论上也会带来性能的巨大提升。

到此,以上就是小编对于j***a是静态型语言的问题就介绍到这了,希望介绍关于j***a是静态型语言的3点解答对大家有用。

标签: 静态 方法 调用