编译型编程特点

简介: 基础
  • 编译型编程语言
    指的是用专门的编译器,对于针对特定平台将某种高级语言编写的源代码一次性编译成可在该平台硬件执行的机器码,并打包成该平台所能识别的可执行性程序的格式。优点是执行效率比较高,缺点是无法跨平台运行。需要移植到其他平台上运行,需要采用特定平台的编译器重新编译。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.构造器重载,指的是一个类可以有多个构造器,多个构造器的参数列表不同。

相关文章
|
数据可视化 数据库
|
程序员 Ruby
松本行弘:我的编程人生
松本行弘:我的编程人生
284 0
松本行弘:我的编程人生
|
Web App开发 移动开发 前端开发
Day 26: TogetherJS —— 让我们一起来编程!
今天的《30天学习30种新技术》挑战,我打算学习一个源自Mozilla的很酷的JavaScript库——TogetherJS。几个月前,我写过一个面向Java 8的在线Java编辑器。今天我将学习如何使用TogetherJS来给这个应用增加协作功能。
200 0
Day 26: TogetherJS —— 让我们一起来编程!
|
程序员 测试技术 API
循序渐进学编程
软件开发人员是一个日新月异的领域—–IT中的大师,今天的编程方式与明天的编程或许截然不同,技术在不断地革新,新语言、新平台的如雨后春笋般出现、更好的解决方案的冒出,因此我们需要跟得上节奏,我们别无选择,唯有努力提高自己。
147 0
循序渐进学编程
为什么学编程
知识在于点滴积累
742 0
|
安全 数据安全/隐私保护
|
大数据
我12岁,4年码龄,我是这么学编程的
大家好,我叫摩西。这是我第一次写博客,主要分享下我的编程经验。 国际象棋教给我的道理 我爸爸从小就下国际象棋,小学6年级就拿到俄勒冈州亚军。在我6岁那年,他开始教我。我也喜欢下国际象棋,因为我觉得它是解决问题的一种途径。
2315 0