Java基础——Java的技术特点
Java的5个技术特点(详细阐述)
1. 简单性:
简单性:
1. 由C语言,C++延伸到 Java语言,风格类型相似
2. 同时,抛弃了C++中的头文件、指针、结构、联合、隐式的类型转换和操作符重载等等等。什么是指针:如多重指针、各种级别指针等
3. Java提供了丰富的包,可以很方便的开发(C++/C# :叫做类库;Java:叫做包)
Java的包:因封装的不同,出现各种名称样式
如:SSH、SSM、Struts、Hibernate、MVC架构等等,都是因为API变化了
SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。
Struts:是开源框架。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
2. 面向对象
Java面向对象(又称Java Object Oriented,Java OO),它属于面向对象的程序设计语言OOP(Object Oriented Programming)。
面向对象和面向过程都是人类的自然思维方式。
面向对象与面向过程的区别:
(转载https://zhidao.baidu.com/question/2089034.html) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。 而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。 功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。
再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。 当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。 |
面向对象的优点
软件进入各领域→需要去调用
对不熟悉的领域→只能面向对象(可移植性高)
万物皆对象:Objectl,在台湾称之为物件(东西)
3. 与平台无关
要了解这个特点,首先要掌握Java工作原理
Java源文件→编译器→.class文件(字节码文件)→解释器→各种操作系统(跨平台)
上面这个流程到各种操作系统属于JDK,JDK包含了JRE
而从.class到各种操作系统之间的区域属于JRE
Java Development kit
包括了
JDK:JDK中也包含了JRE
JRE:Java运行环境,给客户安装JRE
JVM:Java虚拟机
注意:
自己开发:给自己安装JDK1.8 for windows,x64,x86等
给客户装:JRE 1.8 for Linux等
JVM:作为解释性语言,Java源代码编译后生成的class字节码文件是不能直接执行的,需要一个称为Java虚拟机(Java Virtual Machine,简称JVM)的程序翻译成本地的机器码后才能执行。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。
而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
Java API:作为一个庞大的类库,与JVM 一起,将我们编写的Java程序与下层硬件隔离。
面试中如何解读出Java工作机制?
(1) 编写Java源代码
(2) 使用编译器编译为.class字节码文件
(3) 然后运行命令
(4) 使类加载器将class文件加载内存
(5) 对类文件进行校验
(6) 用解释器解释给操作系统
4. 安全性和健壮性(鲁棒性)
调试程序是,报错出现的时间点分为
编译期:语法问题/语法错误
运行期:出现逻辑错误,用户输入导致错,运行环境问题或硬件问题
Java有一条挽救回来的机制:异常处理:try catch,
通过垃圾回收器gc避免内存泄漏,内存泄漏导致运行越来越慢,内存越来越少,释放出空间,垃圾回收机制会清楚的知道什么时候回收,什么时候不回收。
总结:
挽救回来的机制
摈弃了低层操作,更加安全
提供了gc,自动回收,不会造成能吃泄漏
5. 多线程
一句代码的事情,实际上不能成为特点,C++,C语言都可以实现。
通过以上这些Java技术特点我们知道程序员需要哪些能力
排除能力
自学能力
协作开发能力