【Java核心知识点】一、基础知识

相比C++,Java是一种更纯粹的面向对象语言,在Java中,(几乎)一切都是对象。

1.1 创建对象

通过标识符操纵对象,操纵的标识符是对象的引用(reference)。类似于遥控器(引用)操作空调(对象)。

  • 创建引用:
String s;
  • 对引用初始化:
String s = "hello java";
  • 通常用new操作符实现初始化:
String s = new String("hello java");


1.2 对象存储在哪?

基本知识:计算机中有以下五个地方可以存数据

  • 寄存器:

    • 速度最快的存储区。
    • 位于cpu内部,数量极其有限。
    • 寄存器会按需分配,你无法感知。
  • 栈:

    • 速度非常快(仅次于寄存器)。
    • 位于RAM内部。
    • 通常存储Java对象的引用。
  • 堆:

    • 通用的内存池,也位于RAM中。
    • 通常用于存储Java对象。
    • 好处:编译器无需知道存储的数据在堆里存储了多久,因此分配存储比较灵活。
  • 非RAM区:

    • 存活于程序之外,程序没有运行时也可以存在。
    • 如:流对象持久化对象
    • 有时候(嵌入式系统中)常量可能会存储到ROM区。


1.3 基本数据类型

基本数据类型需要被特殊对待。

  • 通过上文可知,一般情况下Java通过new将对象存放在里。
  • 但是,用new创建一个特别小的,简单的,常用的变量,放在堆里就影响了程序的效率。
  • 因此,对于这些基本的类型,可以不用new来创建,而是创建一个并非引用的“自动”变量,这些变量直接存储值,并存放在中。
  • 目的:提高程序的效率。

Java目前支持八种基本数据类型:

基本类型 大小 最小值 最大值 包装类类型
Boolean Boolean
char 16-bit Unicode 0 Unicode 2^16-1 Character
byte 8 bits -128 127 Byte
short 16 bits -2^15 2^15-1 Short
int 32bits -2^31 2^31-1 Integer
long 64 bits -2^63 2^63-1 Long
float 32 bits IEEE754 IEEE754 Float
double 64 bits IEEE754 IEEE754 Double
void Void

注:

  • boolean所占大小没有明确指定。参考:(1)Oracle官方文档(2)你真的知道boolean类型大小吗
  • byte即字节。在java中,byte是作为最小的数字来处理的。

1.4 创建新的数据类型:类

  • 创建类:
class People {
    /* 类主体 */
}
  • 创建对象:
People lwb = new People();
  • 字段,方法,参数(列表)和返回值 略
  • static关键字:方便在没有创建对象的情况下来进行调用(方法/变量)。
    • static修饰的方法 / 变量不需要依赖于对象来进行访问,只要类被加载了,就可通过类名访问。
    • static方法(静态方法)不依赖于任何对象就可以进行访问,因此对于静态方法是没有this的,因为它不依附于任何对象。因此,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
    • static变量(静态变量)与非静态变量的区别:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化;非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
    • static代码块。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。


1.5 操作符

  • 注意优先级。
  • 简化符号:x = x + 1;可以写为x += 1;
  • 自动递增递减:print(i++)print(++i)
    • ++在前,先自增再赋值;
    • ++在后,先赋值再自增。
  • 关系操作符:
    • 基本数据类型的比较,使用==;
    • 引用类型的比较,使用equals()
  • 按位操作符:
    • &,或|,取反~,异或^
  • 移位操作符:
    • 左移:<<
    • 有符号右移>>, 符号为正,高位插0,符号为负,高位插1
    • 无符号右移>>>,无论正负,高位插0


1.6 控制程序执行流程

  • if-else, while, do-while, for, foreach
  • return:
    • 指定方法返回什么
    • 导致当前方法退出,并返回那个值
  • break和continue:
    • break表示退出当前循环,并且不执行循环剩下的所有语句(包括接下来所有未执行的循环)
    • continue表示退出当前循环,但是返回循环起始处执行下一次循环(如果存在)

1.7 初始化和清理

  • 构造器

    • 名称与类同名(意味着首字母大写)
    • 创建对象时new People(),先为对象分配存储空间,再调用构造器。=>确保了你在操作对象前,它就已经被初始化了
    • 构造器的重载(同名,但是参数列表不一样)
  • 对于有继承关系的子父类程序的初始化顺序:

    • 1.父类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
    • 2.子类【静态成员】和【静态代码块】,按在代码中出现的顺序依次执行。
    • 3.父类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
    • 4.执行父类的构造方法。
    • 5.子类的【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码中出现的顺序依次执行。
    • 6.执行子类的构造方法。
  • this关键字

    • 只能在方法内部使用,表示“调用该方法的那个对象”的引用
    • 应用场景:需要明确指出当前对象的引用
    public class Money {
        int i = 0;
        Money increment() {
            i++;
            return this; // 返回Moeny对象的引用
        }
        void print() { Systemn.out.println("i = " + i); }
        public static void main(String[] args) {
            Money m = new Money();
            m.increment().increment().increment().print();
        }
    }
    
    • 将当前对象传递给其他方法也很有用
  • finalize()方法:

    • finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
    • 一般不建议用finalize()完成“非内存资源”的清理工作,但建议用于:
      • ① 清理本地对象(通过JNI创建的对象);
      • ② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。


1.8 控制权限

  • 权限(隐私)等级从小到大:public,protected, 包访问权限(无关键词),private

  • 包访问权限:

    • 当前包的其他类都有访问权限,但是包以外的其他类都是private的。
  • 接口访问权限:public

    • 对每个人都是可用的
  • 继承访问权限:protected

    • 子类可访问
    • 同包下的其他类可访问
  • private:

    • 访问权限仅限于类的内部,是一种封装的体现

你可能感兴趣的:(【Java核心知识点】一、基础知识)