- 编译型编程语言
指的是用专门的编译器,对于针对特定平台将某种高级语言编写的源代码一次性编译成可在该平台硬件执行的机器码,并打包成该平台所能识别的可执行性程序的格式。优点是执行效率比较高,缺点是无法跨平台运行。需要移植到其他平台上运行,需要采用特定平台的编译器重新编译。C,C++,Objective-C,Swift,Kotlin都属于此类。 - 解释型编程语言
使用特定的解释器对源代码进行逐行解释并立即执行的的语言。缺点是因为每次执行都需进行编译,运行效率低,而且不能脱离解释器独立运行,优点是可以跨平台运行,只要在特定平台上提供特定的解释器就行了。JavaScript,Ruby,Python都属于此类。 - 伪编译型语言
编译时只编译成中间代码,将中间代码和解释器一起打包成可执行文件。然后执行时使用解释器将中间代码解析成二进制代码。Visual Basic属于此类。
Java Java是通过javac编译器将源代码编译成跟平台无关的字节码(也就是.class文件),然后由不同平台上的 JVM(Java虚拟机)对字节码解释执行,在一些Java虚拟机的实现中,还会将字节码转换为特定系统的机器码,提高执行效率。Java语言不属于上面的任何一类,因为目前的高级语言较为复杂,已经不能简单地以编译型编程语言,解释型编程语言,伪编译型语言进行划分了。
Java中的访问控制符有哪些?
在Java中使用访问控制符修饰成员变量,方法,构造方法时
访问范围 | private | default | protected | public |
本类中 | 允许 | 允许 | 允许 | 允许 |
同一包中 | 允许 | 允许 | 允许 | |
其他包中的子类 | 允许 | 允许 | ||
其他包中 | 允许 |
private 允许在类中访问。
default 允许在类中,同一包中访问。
protected 允许在类中,同一包中,其他包中的子类 访问。
public 只允许在所有地方访问。
注意事项:
如果某个类Father一个方法A是没有使用访问修饰符,那么子类Son如果是在其他包中,不能调用这个方法A。但是如果方法A是使用protected修饰的,那么在子类中可以调用。(但是不能使用父类去调用,就是不能在子类中去创建父类对象,然后用父类对象去调用。)
具体可以看看下面这个例子:
package com.one; //假设有一个Father类在包com.one下 public class Father { void defalutTest() {} protected void protectedMothod() {} } package com.two; import com.one.Father; public class Son extends Father { public static void main(String[] args) { Father father = new Father(); father.protectedMothod()//位置1.这句代码会报错,因为即便是protected修饰的方法,在其他包中的子类中,也不能用父类去调用,只能按位置2或者位置4那样去调用 Son son = new Son(); son.protectedMothod();//位置2 } void someMethod() { this.defaultMethod();//位置3.这句代码会报错,因为默认的方法不允许在其他包中的子类调用的 this.protectedMothod();//位置4.可以调用成功 } }点击复制代码复制出错复制成功
Java的构造器有哪些特点?
public class Test { String str; public Test(String str) { this.str = str; } }点击复制代码复制出错复制成功
1.如果没有自定义构造器,系统会提供一个默认的无参数构造器。如果提供了自定义的构造器,系统就不会提供默认的无参数构造器。(也就是不能直接调用new Test()来创建一个对象了,除非自己自定义一个无参数构造器)。
2.在上面的代码中,其实在构造器Test(String str)调用之前,系统已经分配好空间,创建一个对象,然后执行构造器Test(String str)方法对对象进行初始化,然后返回。
3.构造器一般使用public修饰符修饰,也可以使用protected,private来限制访问。
4.构造器重载,指的是一个类可以有多个构造器,多个构造器的参数列表不同。