大家好,今天小编关注到一个比较有意思的话题,就是关于java语言特点有封装吗的问题,于是小编就整理了4个相关介绍Java语言特点有封装吗的解答,让我们一起看看吧。
- java中,抽象,封装,怎么理解?
- 为什么java需要getter/setter来获取私有属性?
- 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
- Java和c语言有什么不一样?C语言可以编写Unix系统,Java能替代c吗?
JAVA中,抽象,封装,怎么理解?
抽象就是抽象类 对于一个类来说 它里面具体的方法可以不写方法体 而是让继承它的子类来写具体的方法体 也就是重写抽象类的方法体 而封装是把一些东西放到类里面 外部无法访问这个东西 只能通过get或者set方法访问 这就是封装
为什么j***a需要getter/setter来获取私有属性?
get和set其实就是为了保证对象的封装性。试想,如果没有get和set,别的类就必须直接访问这个类的变量,这样的话,就没有办法控制读和写的权限,不如利用两个函数将其分开处理,又可以分开控制权限。
其次,set和get函数有时还可以加点料进去,比如验证一下数据的合理性等。如果没有set,那么赋值语句就会直接修改变量值,可能会讲一个非法的值赋给变量。
有了set和get,类的变量被完好得封装在其中。想访问它,对它进行读写,必须经过set和get这两道大门。
明确地告诉题主getter/setter方法是j***a语言中封装性的表现形式。
众所周知,面向对象有三个基本特征,封装、继承、多态。封装好处非常多,比较有代表性的有以下几个:一是防止外面随意访问内部的方法和数据,内部数据在编程时是类的私有方法或者私有成员。二是隐藏内部实现细节,每个类中基本都会有仅供自身调用的方法,这些方法他人是无需了解具体细节的。
举个栗子佐证一下,大家平时开的就就具有很好的封装性。在使用的过程中,我们常做的是加油和驾驶这两件事,其中加油与setter方法类似,驾驶则与getter方法类似。汽油怎么转化成动力,发动机、电路的工作原理,除了设计师和维修师又有谁关心呢?
最后,点赞一下题主的钻研精神,能问到这个问题,绝对是经过了认真的思考。
我是@代码Go说科技 ,码农的视角看科技,带给大家不一样的感受。欢迎大家阅读评论转发加关注。
声明:图片来自网络,如有侵权,联系必删!
你自己的项目的话可以将属性写成 public 直接访问,没毛病,想咋写咋写。
首先,你属性权限开的太高,那么使用者可以随意更改,但使用者并不知道具体实现细节,可能改完之后在后续逻辑流程中就报异常,还吐槽框架不好用。所以使用 getter/setter 进行限定,只让使用者修改你允许修改的属性。
其次,有利于版本升级。比如由于某些逻辑,获取这个属性之前你必须进行某些计算,那么这个时候你直接更改 getter 方法实现,使用者进行升级即可,对使用者原有代码不会有影响。而如果之前是直接属性访问的话,你就麻烦了,你必须关闭 public 访问权限,然后提供 getter 方法,别人升级版本时,也必须去更改自己的代码,很是麻烦。
最后,就是整天说的那一套了,什么面向对象,什么封装神马的了
小项目***,因为就算getset也是用public修饰符,所以还是相当于公开,封装就是个概念,实际改的还是那个对象里的那个属性,或者你可以在getset里加一些逻辑约束,比如限制set的内容格式,或者get出来的东西做额外处理,实际影响其实无感知,不要说底层,那么爱学底层去学汇编,聪明的人就是利用工具,而不是被工具所限制
如果不用,技术上完全可以直接把变量定义为public直接访问。但这只是说技术上。实际项目中不会这么做。
那很多人可能会想为什么要这么麻烦呢?因为用函数封装可以隐藏内部实现。
一般情况下,我们的get/set方法就是直接返回内部私有变量,感觉上有没有这个函数其实无所谓。但是在项目开发中。随着项目软件的更新,功能的增加和修改,可能未来要删除或者修改这个变量了。这种时候封装的好处就体现出来了。
举个例子,比如有一个正方形的类,内部保存了正方形相对于屏幕的位置,但是这个位置是正方形的左上角坐标,有一个函数getPosition返回这个坐标,那么第一版可能就是直接返回的这个位置变量。但是随着程序的开发,更多的时候需要用到正方形的中心位置,而类的内部也不需要用到左上角坐标了,所以对类的内部进行了修改,删除了这个坐标变量。
那么如果没有封装的话,就不能轻易修改这个类,一但修改,曾经所有用到左上角位置变量的地方就都需要修改。那将是天大的灾难。但是有了封装,曾经使用的地方,其实用的是一个函数。那我们修改类的时候只要修改一下这个函数的内部[_a***_],用中心位置计算一下左上角位置返回出去,那么对于用到这个函数的地方根本不需要修改,因为他们并不知道也不需要知道类内部调整了,继续用就可以了。也不会出现问题。而类的内部我们做的任何修改,只要不影响之前函数的功能,就没有问题。这个就是封装的好处。
所以才会有get/set函数,不单单是j***a,c++等只要是面相对象的编程语言都一样的,这个是一个编程的思想。而并非是j***a独有。
什么是J***a虚拟机?为什么J***a被称作是“无关的编程语言”?
J***A虚拟机,俗称JVM(J***A Virtual Machine)!是运行J***A代码的抽象计算机!
我们知道J***A最重要的特性就是跨平台,借此能让J***A运行在智能手表,手机,游戏机,电脑等大部分的平台上,其原因就是因为J***A源码运行在JVM中,JVM提供了跨平台实现!
为什么J***A能跨平台?不同的操作系统会有不同的指令集,将高级编程语言转化为汇编语言,进一步的解释为只有0和1机器码由操作系统执行,而J***A官方根据不同的操作系统定制了一套不同的JVM,能把相同的源码根据不同的指令集解释为不同的机器码以执行!真正实现了与平台无关,让J***A开发者脱离底层的语言开发,而专注于业务应用开发!
JVM模拟了一套硬件计算机环境,有一套自己的字节码指令集,堆,栈,方法区,包括寄存器等!
在J***A类加载和运行的时候,会把对象引用,实例对象,静态变量,方法,类等放入不同的区域,提供运行计算式快速的存取数据!
区别于大部分其他的语言,J***A封装了对于内存的管理,通过提供的垃圾算法(标记清除,标记整理,复制算法等)对内存自动进行回收!
关于JVM的垃圾收集器,内部回收算法,JVM如何运行等,市面上有大量的书籍,因为JVM与运行效率,吞吐量,高并发等息息相关,所以通常为J***A技术面试的必问知识点,值得大家用功掌握,更多的技术分享,敬请关注。。
就是把J***A字节码解释为机器语言的解释器,J***A虽然编译成了字节码,但机器不能识别,还要进一步解释为机器码才能执行。这个算不上虚拟机,就是个解释器。和VB PHP这类解释器没有分别。不同平台使用不同解释器就能跨平台了。
J***a和c语言有什么不一样?C语言可以编写Unix系统,J***a能替代c吗?
只有J***A可能被别的语言代替,C语言的地位暂时不可动摇,除非天才出现,因为C语言的高效率以及对底层硬件的直接操作,C可以算是无所不能了,而J***A,主要是其无视平台,但是效率很低,而且无法直接对硬件操作,微软的.NET,解决跨平台的需求,同样做得到无视平台,所以,J***A永远比不了C,因为即使是微软,它也没想到过开发什么取代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语言特点有封装吗的问题就介绍到这了,希望介绍关于j***a语言特点有封装吗的4点解答对大家有用。