【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目前支持八种基本数据类型:

基本类型大小最小值最大值包装类类型
BooleanBoolean
char16-bitUnicode 0Unicode 2^16-1Character
byte8 bits-128127Byte
short16 bits-2^152^15-1Short
int32bits-2^312^31-1Integer
long64 bits-2^632^63-1Long
float32 bitsIEEE754IEEE754Float
double64 bitsIEEE754IEEE754Double
voidVoid

注:


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方法中显式调用其他资源释放方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值