Java与C++的区别:
(1)JAVA中没有显式的指针,但是C++中有
(2)JAVA只能支持单继承,但是C++支持多继承(一个类可以继承多个类)
(3)JAVA中有自动的垃圾回收机制,用完一个内存之后无需自己释放,但是C++需要自己delete或者free,所以可能出现内存泄漏
面向对象的三个/四个特征?
封装,继承,多态,抽象。
什么是类?
类是对象的模子,具有相同属性和方法的一组对象的集合,类是不存在的,是用来描述对象信息
什么是多态?
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用:消除类型之间的耦合关系。
多态的好处
1.允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。即父类型的引用指向子类型的对象。主要有以下优点:
2.可替换性:多态对已存在代码具有可替换性
3.可扩充性:增加新的子类不影响已经存在的类结构
4.更加灵活
面向对象和面向过程的区别?
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。比如,单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:性能比面向过程低。
C++的特点是什么?
封装,继承,多态。支持面向对象和面向过程的开发。
C++的异常处理机制?
抛出异常和捕捉异常进行处理。(实际开发)
c和c++,java的区别?
c是纯过程,c++是对象加过程,java是纯面向对象的
Java语言有哪些特点
1、简单易学、有丰富的类库
2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)
3、与平台无关性(JVM是Java跨平台使用的根本)
4、健壮和安全的语言
5、支持多线程
6、面向网络的语言
JDK、JRE、JVM 有什么区别?
JDK:(Java Development Kit)即java的开发与运行环境,他除了包含完整的JRE之外,还包含了供开发者使用的工具包。
JRE:(Java Runtime Environment)即Java运行环境,非开发者只需要安装 JRE来运行程序, 它包含java运行的所需的类库+JVM(java虚拟机)。
JVM: (Java Virtual Machine) 即Java虚拟机, 当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是 java 程序可以一次编写多处执行的原因。
三者的关系:
作为程序员,就必须安装JDK,因为其中包含Java开发工具包,同时也包含了JRE。
作为使用者,运行已经开发好的Java程序,只需要安装JRE。
JVM和JRE的关系:JRE包含了JVM,JVM是运行Java程序的核心虚拟机,同时也包含了Java程序所需的环境支持
总结:JDK>JRE>JVM
字符流与字节流的区别?
1、字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
2、字节流默认不使用缓冲区;字符流使用缓冲区。
3、字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;
字符流通常处理文本数据,它支持写入及读取Unicode码元。
普通类和抽象类有哪些区别?(java)
抽象类不能被实例化;
抽象类可以有抽象方法,只需申明,无须实现;
有抽象方法的类一定是抽象类;
抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;
抽象方法不能声明为静态、不能被static、final修饰。
接口和抽象类有什么区别?(java)
(1)接口
接口使用interface修饰;
接口不能实例化;
类可以实现多个接口;
①java8之前,接口中的方法都是抽象方法,省略了public abstract。②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现;
(2)抽象类
抽象类使用abstract修饰;
抽象类不能被实例化;
抽象类只能单继承;
抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体;
如果一个类继承了抽象类,①如果实现了所有的抽象方法,子类可以不是抽象类;②如果没有实现所有的抽象方法,子类仍然是抽象类。
Java的内存划分
Java内存划分:栈,堆,代码区,数据区
栈:主要存储变量(局部变量或基本数据类型的变量),内容使用完毕立即清除(不会对内容赋初值)
堆:主要存储对象,使用完毕后在某个时间进行回收(对存储的内容进行赋初值)
代码区:存放类和方法
数据区:常量池和静态变量
访问权限(java)
1.public 公共的,所有人都可访问
2.Private 私有的,只能通过类中成员函数访问,类外不允许访问。
3.Protect 保护的,这种权限是为继承而设计的,保护所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问。
4.Default 包访问权限,在自己包内可以随意访问。
final关键字及其作用
1.被final修饰的变量不可以被改变,又被称为常量(修饰字符时,自负的地址不能改变)
2.被final修饰的方法不可以被重写
3.被final修饰的类不可以被继承
总结就是不可变
C++和JAVA
解释对编译
Java
是一种解释性(或者说半解释半编译)语言,意味着其在执行时会被
“
翻译
”
为二进制形式,也就是 java跑得时候
必须有人(jvm)去解释它
(现在的
Java
语言,其执行方式已经不仅仅是解释执行方式 了,即时编译器(JITC
、
just-in-time compiler
)技术和原型编译技术的出现大大提高了
JAVA
的运行效
率)。而
C++
则是编译语言,意味着程序只能在特定操作系统上编译并在特定系统上运行,也就是说 C++一步到位成机器语言的。
指针
Java
没有指针的概念。
在
C/C++
中,指针操作内存时,经常会出现错误。而在
Java
中是没有指针这一概 念的,因此也有效地防止了一系列由指针引起的操作层失误(如指针悬空所造成的系统崩溃),更有利于 Java
程序的安全。
内存安全
Java
是一种内存安全型语言,意味着大家可以为给定数组分配任意参数,即使超出范围也只会返回错误 提示。C++
更为灵活,但代价是一旦分配的参数超出资源范围,则会引起错误甚至严重溃。
多重继承
Java
不支持多重继承。
多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。
尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以
Java 不支持多重继承,但允许一个类实现多个接口。可见,Java
既保留了
C++
多重继承的功能,又避免了C++的许多缺陷。
数据类型
Java
是完全面向对象的语言
,所有方法和数据都必须是
类
的一部分。除了
基本数据类型
之外,其余类型的数据都作为对象型数据
。例如,对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++
将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java
还取消了
C/C++
中的结构和联合,使编译程序更加简洁
自动内存管理
Java
自动进行无用内存回收操作,不再需要程序员进行手动删除。
Java
程序中所有的对象都是用
new
操作符
建立在堆栈上的,这个操作符类似于
C++
的
“new”
操作符。当
Java
中一个对象不再被用到时,无 须使用内存回收器,只需要给它添加删除标签,无用内存的回收器便利用空闲时间在后台运行。而 C++中必须由程序释放内存资源,这就增加了程序员的负担。
操作符重载
Java
不支持操作符重载
,操作符重载被认为是
C++
的突出特征。操作符重载,就是把操作符
(
比
如
'+
,
-
,
*
,
/'
这些运算符
)
赋于新的意义, 来完成更为细致具体的运算等功能。要实现操作符重载,就 要使用操作符重载函数,而运用函数就肯定会存在各种限制条件以及特殊情况。特殊情况就需特殊处 理,因此操作符重载还是比较繁琐的。Java
语言是走
“
简洁风
”
的,因此为了保持
Java
语言的简洁性,便 毅然抛弃了操作符重载这一功能,但是为了避免舍本逐末的情况,Java
语言还是可以通过
类
来实现操作符重载所具有的功能的。
预处理功能
C/C++
在编译过程中都有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java
允许预处理,但不支持预处理器功能,因为
Java
没有预处理器,所以为了实现预处理,它提供了引入语句(import
),但它与
C++
预处理器的功能类似
缺省参数函数
Java
不支持缺省参数函数,而
C++
支持 。
在
C
语言中,代码组织在函数中,函数可以访问程序的全局变量。后来C++
增加了类
,提供了类算法,该算法是与类相连的函数,
C++
类方法与
Java
类方法十分相似。由于 C++
仍然支持
C
语言,所以
C++
程序中仍然可以使用
C
的函数,结果导致函数和方法混合使用,使得 C++
程序混乱,而
Java
没有函数
(
准确说叫方法
)
。
作为一个比
C++
更纯的面向对象的语言,Java 强迫开发人员把所有
例行程序包括在类中
。事实上,用方法实现例行程序可激励开发人员更好地组织编码。
字符串
C
和
C++
不支持字符串变量
,在
C
和
C++
程序中使用
“Null”
终止符
代表字符串的结束。在
Java
中字符
串是用
类对象
**
(
String
和
StringBuffffer
)来实现的,在整个系统中建立字符串和访问字符串元素的方 法是一致的。Java
字符串类是作为
Java
语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用
“+”
进行连接操作。
goto 语句
“
可怕
”
的
goto
语句是
C
和
C++
的
“
遗物
”
,它是该语言技术上的合法部分。
goto
语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto
语句, 以免造成程序流程的混乱,使程序的可读性变差
,
增加程序调试的难度。 Java
不提供
goto
语句,虽然
Java
指定
goto
作为关键字,但不支持它的使用,这使程序更简 洁易读。
类型转换
在
C
和
C++
中,有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在
C++
中可将一个浮点值赋予整型变量,并去掉其尾数。Java
不支持
C++
中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
应用场景:
java侧重于大型企业级应用开发,C++
侧重于底层应用开发。
Java
是
Android
开发领域的王者,因此移动开发者无疑应该选择它作为项目基础。另外,Java
也常见于
Web
及桌面应用乃至服务器端应用。
C++更接近机器语言,因此其软件运行速度更快且能够直接与计算机内存、磁盘、
CPU
或者其它设备进行协作。另外,C++
也能为游戏提供良好的运行性能。