【Java基础】语言基础知识

Java语言的优点

  1. 纯面向对象
  2. 平台无关性:编译器编译后的中间代码由JVM解释执行
  3. 内置类库比较丰富简化开发
  4. 提供完善的安全机制异常机制以及垃圾回收机制和强类型机制
  5. 除去了C++中那一理解的特性:如多重继承,虚基类,运算符重载,指针等

Java语言和C++语言的异同

相同点:
都是面向对象语言,都提供了封装,继承,多态等特性。都具有很好的代码维护性和可重用性。
不同点:
1. Java是解释执行(源代码->字节码->JVM 解释执行)而C++是编译链接为可执行二进制代码。因此Java比C++慢,但是比C++具有更好的平台无关性
2. Java是纯面型对象语言,除了几个基本数据类型(int float…)之外所有类型都是类,所有代码都必须在类中实现;Java中也不存在全局变量或者全局函数。C++除了具有面向对象的特性之外,还具有面向过程的特性,拥有全局对象和全局变量,而且并非所有类型都是类。
3. Java没有指针的概念,避免了空指针引起的系统问题;Java没有多重继承的概念,但是可以实现多个接口达到和C++多重继承等效的效果;Java不需要程序员关系对象内存的分配,简化编程
4. C++支持运算符重载而Java不支持;C++有宏或者include头文件实现预处理,而Java没有;C++支持goto语句,但是Java虽然有goto关键字,但是仅仅是保留关键字;C++支持自动强制类型转换,而Java必须要程序员显式的进行类型转换

是否可以在main执行前执行一段指定代码

可以的,虽然main是函数的入口,通常也是第一个执行的模块,但是并一定总是最先执行。在JVM的讲解书类加载的一部分内容的时候提到过,静态代码块在类加载的时候就会被执行,因此可以在main方法所在类中,添加一些静态代码块来实现一些需要预先执行的逻辑。

Java程序初始化顺序

实例化对象的时候,对象所在的类的所有成员变量需要先进行初始化,类的成员变量全部初始化之后才会执行类的构造函数,创建对象。类的成员变量初始化原则:
1. 静态对象/变量优先于非静态;静态对象只能初始化一次而非静态变量可以初始化多次
2. 父类优先于子类
3. 按成员变量定义的顺序进行初始化

按上述的原则,有如下的初始化顺序:父类静态对象/变量,父类静态代码块,子类静态对象或变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。

Java中的作用域

  1. public :被修饰变量或方法对所有类和对象都是可见的
  2. private:只可以被当前类访问
  3. protected: 当前类以及当前类的子类(不论子类是否与父类在同一个包下),还有同一个包下的类都是可见的
  4. default: 只有当前类以及位于当前包下的类可以访问,子类如果在当前包下也可以访问,否则是不可以的,与protected不同

注意: private与protected不能用来修饰类,只有abstract final public 可以被用来修饰类

一个Java文件是否可以定义多个类

显然是可以的撒,但是最多只能有一个是public的且该public类名称必须和文件名相同

Java中没有任何方法的接口

接口是抽象方法的集合,可以看做是特殊的抽象类。接口中的方法只有定义没有实现,且都是抽象的;接口中成员的修饰符都是public的;接口中常量的默认修饰符是public static final的。

没有方法的接口也叫作标识接口,标识接口对实现它的类没有语义要求,仅仅用来说明实现该接口的类具属于某一特定类型或者具有特定属性。比如常见的:Cloneable Serializable等,可以通过instance of 来判定一个类是否实现了一个接口。

clone方法的作用

Java在处理基本类型数据的时候采用的是按值传递,但是对于其他的类类型的变量则是使用按引用传递。按引用传递的概念在参数传递的时候比较容易注意到也比较容易理解,但是Java的赋值运算’=’也是按引用传递的。这样当需要从一个已知的对象得到一个相同状态的对象的副本的时候,就需要使用clone来克隆一个同等状态的对象。
实现clone()步骤:
1. 实现clone的类集成Cloneable接口
2. 重写Object类的clone()方法,并在重写时候调用super.clone()
3. 把浅复制的引用指向原型对象的克隆体

深复制和浅复制:
浅复制:被复制的对象的所有变量都含有和原来对象相同的值(包括引用类型和基本类型),而所有对其他对象的引用仍然指向原来的对象。(也就是说对象内部所引用的对象是复制对象和被复制对象公用的)

深复制:
被复制对象的所有变量都和原来对象有相同的值,引用其他对象的变量被指向被复制的新的对象。也就是说深复制把复制对象所引用的对象也复制了一遍(类似于递归复制,直到所需要复制的对象成员变量都是基本类型为止)。

反射机制

反射机制功能:
1. 得到一个对象所属的类
2. 获取一个对象所有的成员变量和方法
3. 得运行时创建对象
4. 运行时调用对象方法

但是反射使用不当可能会严重影响系统性能

补充:创建对象的方法
1. 反射
2. clone
3. new
4. 反序列化

你可能感兴趣的:(java,jvm,语言)