Java基础知识一

110 阅读3分钟

Java语言有哪些特点?

  1. 简单易学;
  2. 面向对象(封装,继承,多态);
  3. 平台无关性(Java虚拟机实现平台无关性);
  4. 支持多线程;
  5. 可靠性;
  6. 安全性;
  7. 支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的,因此Java语言不仅支持网络编程而且很方便);
  8. 编译与解释并存;

Java与C++的区别?

  • 都是面向对象的语言,都支持封装、继承和多态
  • Java不提供指针来直接访问内存,程序内存更加安全
  • Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
  • Java有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
  • C++同时支持方法重载和操作符重载,但是Java只支持方法重载(操作符重载增加了复杂性,这与Java最初的设计思想不符)。

字符型常量和字符串常量的区别?

  1. 形式:字符常量是单引号引起的一个字符,字符串常量是双引号引起的0个或若干个字符
  2. 含义:字符常量相当于一个整型值(ASCII值),可以参加表达式运算;字符串常量代表一个地址值(该字符串在内存中存放位置)
  3. 占内存大小:字符常量只占2个字节;字符串常量占若干个字节 (注意:char在Java中占两个字节)

Java要确定每种基本类型所占存储空间的大小。它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是Java程序比用其他大多数语言编写的程序更具可移植性的原因之一

image.png

静态方法为什么不能调用非静态成员?

这个需要结合JVM的相关知识,主要原因如下:

  1. 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对实例化之后才存在,需要通过类的实例对象去访问。
  2. 在类的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。

静态方法和实例方法有何不同?

1、调用方式

在外部调用静态方法时,可以使用类名.方法名的方式,也可以使用对象.方法名的方式,而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象

不过,需要注意的是一般不建议使用 对象.方法名 的方式来调用静态方法。这种方式非常容易造成混淆,静态方法不属于类的某个对象而是属于这个类。

因此,一般建议使用 类名.方法名 的方式来调用静态方法。

public class Person { 
    public void method() { 
        //......
    } 
    public static void staicMethod(){ 
        //......
    } 
    public static void main(String[] args) {
        Person person = new Person(); 
        // 调用实例方法 
        person.method(); 
        // 调用静态方法 
        Person.staicMethod()
    }
}

2、访问类成员是否存在限制

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制。

重载和重写的区别

重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理

重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法