大家好,今天小编关注到一个比较有意思的话题,就是关于java语言封装的问题,于是小编就整理了4个相关介绍Java语言封装的解答,让我们一起看看吧。
- java中,抽象,封装,怎么理解?
- Java和c语言有什么不一样?C语言可以编写Unix系统,Java能替代c吗?
- Java语言是否应增加闭包以及如何添加?
- 为什么java需要getter/setter来获取私有属性?
JAVA中,抽象,封装,怎么理解?
抽象就是抽象类 对于一个类来说 它里面具体的方法可以不写方法体 而是让继承它的子类来写具体的方法体 也就是重写抽象类的方法体 而封装是把一些东西放到类里面 外部无法访问这个东西 只能通过get或者set方法访问 这就是封装
J***a和c语言有什么不一样?C语言可以编写Unix系统,J***a能替代c吗?
J***a语言和C语言的区别还是相对比较明显的,从语言自身的定位来看,J***a语言属于面向对象语言的代表,在构建复杂业务逻辑方面具有一定的优势,而C语言则是面向过程编程语言的代表。
总的来说,J***a和C之间的,可以通过以下几个方面来进行描述:
第一:应用场景不同。J***a语言属于“全场景”编程语言之一,可以应用于Web开发、Android开发、大数据开发等场景,而C语言的应用场景则相对比较集中,主要应用于操作系统开发和嵌入式开发领域。由于J***a语言的应用场景更多,所以目前IT行业内J***a开发的岗位也相对更多一些。
第二:技术体系不同。J***a是面向对象编程语言,虽然也借鉴了C语言的很多写法,但是在技术体系的设计上更注重可移植性、安全性和可扩展性,所以J***a语言更契合互联网的应用环境,这也是J***a在互联网时代得到快速发展的一个重要原因。由于J***a语言极强的扩展性能,所以J***a语言可以在互联网时代、移动互联网时代和大数据时代都能够找到自己的位置。
第三:发展道路不同。虽然J***a语言的出现要比C语言晚一些,但是J***a语言的发展道路与C语言还是具有明显的区别,或者说J***a的开发人员并不是想让J***a取代C语言。J***a语言的发展道路主要可以体现出三个特点,第一是跨平台;第二是***整合能力强;第三是并发处理能力强。可以说J***a语言在设计上是希望解决C语言之上的问题,也就是网络问题。
实际上,与J***a语言同时代的Python语言,在设计思想上与J***a也有很多共同点,只不过Python语言更注重库的作用,语言风格更开放(胶水语言),而J***a语言依托在当时的Sun技术体系下,则显得要相对“严谨一些”,当时的Sun技术体系也想基于J***a成就一个新的开发模式,只不过后来的EJB并没有取得设想的结果。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
J***a不能完全替代C语言。J***a的程序是字节码不是机器码,执行时要通过虚拟机翻译成机器码之后才能运行。而C语言程序在编译之后已经是机器码了,可以直接运行。
J***a是实时编译,用J***a写的操作系统需要有另一个用虚拟机也就是操作系统来启动,这么做没有任何意义。因此,J***a不适合写操作系统。
J***a为什么要用虚拟机才能执行呢?这么做使得J***a的程序可以夸平台运行。虚拟机的作用是吸收操作系统之间的差异。而虚拟机对于J***a程序来说都是一样的。C语言做不到这一点,在不同的操作系统上,C语言程序必须要用源码重新编译,才能运行。
J***a和C语言有什么区别?在回答这个问题前我们得先了解这两门语言各自有什么特点和优势。
J***a是一门面向对象语言,主要特点如下
- 跨平台性,J***a虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得J***a语言具备跨平台性。
- [_a***_]性,J***a摒弃了c++里难以理解的多继承、指针等概念,使得它更加严谨、简洁。
- 面向对象
- 安全性,J***a语言具有许多的安全特性。
- 多线程
C语言是一门面向过程的计算机编程语言,主要特点如下
两者的部分区别
- C语言可以直接操作内存,J***a不能直接操作。
- C语言可以封装动态库DLL,J***a不行。
- J***a跨平台性相对于C语言高。
- C语言有指针,J***a没有指针。
- J***a拥有垃圾回收机制可自动管理内存,而C语言中必须由程序贝释放内存***。
- 在J***a中引入了package的概念,使面向对象和面向组件开发更加方便,而在C语言中没有package概念,需要其他方式来实现。
J***a是否可以取代c吗?
答案是不能。一方面,C语言具有高效率以及对底层硬件的直接操作的优势。而J***a相比于C语言其优势在于跨平台性,但是运行效率相对于C语言较低,而且无法直接对硬件操作。另一方面,两者主要应用的场景领域不同,J***a适合企业级开发,而C适合如操作系统,虚拟机,设备驱动程序开发的领域。
所以C是不会被J***a所替代的。希望我的回答能给你带来帮助。
只有J***A可能被别的语言代替,C语言的地位暂时不可动摇,除非天才出现,因为C语言的高效率以及对底层硬件的直接操作,C可以算是无所不能了,而J***A,主要是其无视平台,但是效率很低,而且无法直接对硬件操作,微软的.NET,解决跨平台的需求,同样做得到无视平台,所以,J***A永远比不了C,因为即使是微软,它也没想到过开发什么取代C
J***a语言是否应增加闭包以及如何添加?
首先你要搞清楚闭包是个什么东西,所谓闭包就是函数里面的子函数拥有它外面函数里的所有变量读取操作权限,而J***a语言若需要增加闭包那么首先它得支持函数式特性,比于这里闭包就需要支持函数可以在函数内被定义和使用的一等公民身份特性,这个你可以看看kotlin,J***a到有一个相似于闭包的地方就是函数中的匿名内部类
闭包这个概念在j***a中是不存在的,j***a代码组织有包,有类,而这决定了j***a本身就具备了完好的代码封装性,而闭包是针对js这类语言,没有诸如名称空间,类等代码单元带来的问题的一种解决手段
为什么j***a需要getter/setter来获取私有属性?
你自己的项目的话可以将属性写成 public 直接访问,没毛病,想咋写咋写。
但是你要是写组件,写框架的话就不建议了。
首先,你属性权限开的太高,那么使用者可以随意更改,但使用者并不知道具体实现细节,可能改完之后在后续逻辑流程中就报异常,还吐槽框架不好用。所以使用 getter/setter 进行限定,只让使用者修改你允许修改的属性。
其次,有利于版本升级。比如由于某些逻辑,获取这个属性之前你必须进行某些计算,那么这个时候你直接更改 getter 方法实现,使用者进行升级即可,对使用者原有代码不会有影响。而如果之前是直接属性访问的话,你就麻烦了,你必须关闭 public 访问权限,然后提供 getter 方法,别人升级版本时,也必须去更改自己的代码,很是麻烦。
最后,就是整天说的那一套了,什么面向对象,什么封装神马的了
通过方法而不是直接操纵变量,是面向对象进行封装的重要方式。方法是针对对象实例的,如果不设置final关键字,派生类是可以重载这个方法的实现。这样对于该方法的调用者而言勿需区分实例是基本类还是派生类,而不同类实例会按自己的类型调用正确的方法版本。这是面向对象编程的核心概念。
如果不用,技术上完全可以直接把变量定义为public直接访问。但这只是说技术上。实际项目中不会这么做。
那很多人可能会想为什么要这么麻烦呢?因为用函数封装可以隐藏内部实现。
一般情况下,我们的get/set方法就是直接返回内部私有变量,感觉上有没有这个函数其实无所谓。但是在项目开发中。随着项目软件的更新,功能的增加和修改,可能未来要删除或者修改这个变量了。这种时候封装的好处就体现出来了。
举个例子,比如有一个正方形的类,内部保存了正方形相对于屏幕的位置,但是这个位置是正方形的左上角坐标,有一个函数getPosition返回这个坐标,那么第一版可能就是直接返回的这个位置变量。但是随着程序的开发,更多的时候需要用到正方形的中心位置,而类的内部也不需要用到左上角坐标了,所以对类的内部进行了修改,删除了这个坐标变量。
那么如果没有封装的话,就不能轻易修改这个类,一但修改,曾经所有用到左上角位置变量的地方就都需要修改。那将是天大的灾难。但是有了封装,曾经使用的地方,其实用的是一个函数。那我们修改类的时候只要修改一下这个函数的内部算法,用中心位置计算一下左上角位置返回出去,那么对于用到这个函数的地方根本不需要修改,因为他们并不知道也不需要知道类内部调整了,继续用就可以了。也不会出现问题。而类的内部我们做的任何修改,只要不影响之前函数的功能,就没有问题。这个就是封装的好处。
所以才会有get/set函数,不单单是j***a,C++等只要是面相对象的编程语言都一样的,这个是一个编程的思想。而并非是j***a独有。
到此,以上就是小编对于j***a语言封装的问题就介绍到这了,希望介绍关于j***a语言封装的4点解答对大家有用。