不得不会的10点Java基础知识

1.实例变量和类变量

实例变量:指每一个对象独立的,修改其中一个对象的实例变量,不会影响其余实例变量的值,变量值无 static 关键字修饰;java

类变量:是指全部对象共享的,其中一个对象把该变量的值修改了,那么全部对象的该变量的值都修改了,使用 static 关键字修饰,通常使用 「类名.属性」 来访问;编程

2.静态方法和非静态方法

静态方法:是指使用 static 关键字修饰修饰的方法,通常使用 「类名.方法」 来访问,也能够经过 「对象.方法」 来访问,可是不建议这样写!静态方法中只能调用静态方法和使用静态成员,由于静态成员和静态方法会随着类的加载而加载,非静态成员或者方法的加载晚于静态的成员和方法,故静态方法不能调用非静态的方法和非静态的成员,即静态的对静态的;微信

非静态方法:是指没有使用 static 关键字修饰修饰的方法,通常使用 「对象.方法」 来访问,非静态方法中便可调用非静态方法和使用非静态成员也能够调用静态方法和使用静态成员;app

3.Java 中包的做用

在 Java 中,包的声明通常写在文件的第一行,使用关键字 package + 包名,其做用有:①避免重名,例如咱们有时候在调用某个类的某个方法时会发现会有相同类名的方法,这时候你就要导入你要调用的类所在的包或者使用全类名调用便可,这样避免了重名;②用于权限控制,在同一个包下的类是能够相互调用的,若是调用其余包下的类,就必需要导入调用类所在的包,这样能够避免外部的非法调用,另外还能够合理的使用访问控制权限的关键字 public、protected、private 来进行访问权限的设置(更多各关键字权限控制参考附表1);③划分项目结构层次,使得文件管理更有条理,例如MVC、MVP模式分包;ide

附表1附表1

4.Java 中的静态导入

静态导入是 JDK1.5 引入的新特性,通常状况下,咱们调用某个类中的静态成员或静态方法使用 「类名.属性」 来调用,而静态导入能够把某个类下的静态成员(方法和变量)使用相似导包的方式导入进来,便可以直接导入到类的成员级别(方法和变量),这样可使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需使用 「类名.属性」 的方式来调用,直接调用方法名或者属性,像调用本身类中的方法和属性同样简单。函数

静态导入的语法是:布局

  • import static 包名.类名.静态成员变量;
  • import static 包名.类名.静态成员函数;

注意导入的是静态成员变量和方法名,另外也可导入某个类下的全部静态成员:this

  • import static 包名.类名.*;

*号表明通配全部。spa

通常状况下咱们能够适度的使用静态导入,不建议大量滥用,由于咱们知道 Java 是面向对象的语言,使用静态导入调用时,缺乏了类名,即弱化了类的描述,有时候咱们不知道调用的是哪一个类的成员,可能还会思考一番,弱化了面向对象思想,致使类和类之间的调用关系不清晰!线程

5.Java 中的 this 关键字

在 Java 中,当建立一个对象后,Java 虚拟机就会为其分配一个指向对象自己的指针,这个指针就是 ** this** 。this 的使用场景:①当方法的布局变量和与实例变量重名时,须要使用 this 关键字来区分,若是不重名也可使用,一般不重名的状况下不写 this;②使用 this.方法名(参数); 来调用类的成员方法,通常状况下不写 this,直接调用;③使用 this(参数1…); 来调用本类中的其余构造方法,例如在 Android 中自定义一个 View,通常都会写 3 个重载的构造方法,单参数的构造方法中使用 this(参数1, 参数2); 来调用双参数的构造方法,双参数的构造方法中调用三个参数的构造方法;④ this 做为参数传递,在 Android 的 Activity 中,常常会使用 this 来做为参数传递;⑤在内部类或者匿名内部类中调用外部类的方法,若是在内部类中使用 this,这里的 this 表明的是当前类自己,即内部类,要想调用外部类中的方法必须使用 外部类名.this.方法名(); 来调用;

另外使用this关键字要注意一下几点:

  • 在构造方法中使用 this 调用另外一构造,必需要将调用放在方法的第一句且只能使用一次;
  • 不能再实例方法中使用this 来调用构造,由于实例方法的调用必需要有对象,而对象的建立必定会调用构造方法,构造方法的调用应早于实例方法;
  • 在构造中不能使用 this 来相互调用构造,例如,若是在单参数的构造中调用双参数的构造,在双参数的构造中调用单参数的构造,咱们使用单参数的构造来建立一个实例,调用过程为:单参数构造 -> 双参数构造 -> 单参数构造,这样会无穷无尽的调用下去,另外这违背了在一个方法的调用链中只能调用一次同一个参数的构造方法的规则;

6.Java 中的 super 关键字

  • super(); 调用的父类是 Object的无参构造,默认自动调用,通常状况下都省略不写;
  • this 和 super 关键字都是为了解决重名问题的,若是没有重名问题能够省略不写;
  • this 和 super 均可以理解为父类的一个引用,便可以调用父类中的属性和方法;
  • super.方法名(); 表示调用父类的方法;
  • super.属性 表示调用父类中的属性(用的很少);
  • super();调用父类的构造方法;
  • this 和 super 都只能放在方法的第一行,因此不能一块儿出现;
  • super 只能出如今构造方法中;

在 Java 中,全部类的父类都是 Object,若是一个类没有使用 extends 关键字来继承父类,那么它默认继承的是 Object 类,子类不会继承父类的构造方法,可是必定会调用父类的构造方法,若是没有调用,必需要手动去调用,不然会编译报错;

7.Java 中的重载与重写

重载即 Overload,在同一个类中,方法名相同参数列表不一样的几个方法称为重载方法;

重写即 Override,在子父类中,子类与父类方法名称相同,参数列表必须相同;对于返回值类型子类要么和父类的一致,要么是父类返回值类型的子类;对于权限修饰符,子类的权限修饰符要么和父类的相同,要么比父类的权限修饰符更宽泛;若是有异常抛出,子类的异常捕获范围要么和父类的相同要么比父类的异常范围更小,即子类的异常是父类异常的子类;

8.== 与 equals

关系操做符 “==” 生成的是一个boolean结果,它们计算的是操做数的值之间的关系,若是是基本数据类型,它比较的是他们值的自己,若是是引用数据类型,则比较的是对象在内存中的地址;

equals 方法是基类 Object 中的方法,全部类都直接或间接继承于 Object类,所以全部类中都有该方法,若是没有重写 equals() 方法,调用 equals() 方法和使用 == 的效果同样,也是比较的内存中的地址值;在 Java 提供的大多数类中,如 String,Double,Date,Integer等,都对equals 方法进行了重写,用来比较指向的对象所存储的内容是否相等,若是是咱们本身的定义的类,若是没有重写 equals 方法,使用 equals 默认比较的是对象在内存中的地址,要比较内容,就必需要重写 equals 方法。

9.对类的理解

类是对一类事物的抽象描述,对象是类的实例,能够理解为类是汽车设计图,对象是实实在在的生产出来的汽车,一张设计图(类)能够生产出来多个汽车(对象),类中包含属性和方法,属性描述了类所具备的特性,方法描述了类的具体功能,这样咱们在设计类的时候就会更加注重某个类中的功能及特性,将他们抽象分装到类中,外部在调用的时候不须要关心类中的具体实现,这样就能够更多的考虑类与类之间的相互关系了,这样带来的好处就是能够提升对象的复用性,下降开发难度,多以所Java是面向对象的编程,即Everything is object. 对于面向对象的开发,通常来说分为三个步骤:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。OOA 即根据具体的功能分析有哪些特性或者方法,OOD 即根据特性和方法抽象设计出具体的类;OOP 即创建类和类之间的相互调用的关联关系。

10.变量、内存和垃圾

变量是内存中的一块存储区域,它的值是变化的,不是固定的;

Java中的内存通常分为Java虚拟机栈和堆内存,栈中通常存放的是基本数据类型和引用类型的引用变量,堆内存中存放的是对象实例,Java堆是 Java 虚拟机所管理的内存中最大的一块,它是被全部线程共享的一块内存区域,在虚拟机启动时建立,能够不是物理上的连续区域,只要逻辑上连续便可;另外还有方法区、静态常量池、程序计数器、本地方法栈等内存分配区域的概念;

垃圾:指的是没有任何引用所指向的对象(一块堆内存空间),这块空间就是垃圾,全部的垃圾都会等待GC(垃圾收集器)不按期的回收(释放内存空间)。

更多干货文章关注个人微信公众号:

这里写图片描述这里写图片描述
相关文章
相关标签/搜索