OnJava8学习笔记(一)

对象创建

标识符是对对象的引用,为标识符赋值使其指向对象。

对象实例的创建使用new关键字:

String s = new String("asdf"); //创建字符串对象

数据存储

    存储数据:

1.寄存器(Registers):寄存器位于CPU内部,是最快的存储区域,但数量有限,所以一般按需分配。(Java没有对寄存器的直接控制权,C/C++有)

2.栈内存(Stack):栈内存在常规内存RAM(随机访问处理器)中,可通过栈指针获得RAM的直接支持,栈指针下移分配内存,上移释放内存,速度仅次于寄存器。由于栈内保存项的生命周期的约束会限制Java程序的灵活性,Java对象保存在堆内存中,栈内存中只存储了一些Java数据。

3.堆内存(Heap):堆内存是一种通用的内存池(也在RAM中),所有的Java对象都存在里面,编译器不需要知道对象必须在堆内存上停留多长时间,因此用堆内存保存数据更灵活。 执行new命令实例化对象时,会自动在堆中进行内存分配。这种灵活性的代价在于分配和清理堆内存的时间较长(现在已经非常快了,无需考虑)。

4.常量存储(Constant storage):常量值通常直接放在程序代码中,因为它们永不改变,如需严格保护可考虑放在ROM(只读存储器)中。

5.非RAM存储(Non-RAM storage):数据完全存在于程序之外,在程序未运行以及脱离程序控制后依然存在。例如:

(1)序列化对象:对象被转化为字节流,通常被发送到另一台机器。

(2)持久化对象:对象被放置在磁盘上,程序终止后数据依然存在。

这两种存储方式都是将对象转存在另一个介质中,并在需要时恢复成常规的基于RAM的对象。Java支持轻量级持久化,而JDBC和Hibernate这些类库为使用数据库存储和检索对象信息提供了更复杂的支持。

基本类型的存储

Java的基本类型不是通过new关键字创建的,通常new出来的对象都保存在堆内存中,这样创建小而简单的变量不划算,所以对基本类型的创建,Java和C/C++一样,使用“自动”变量直接存储值,并保存在栈内存中,因此更加高效。

基本类型的内存占用大小:

所有的数值类型都是有正负号的,boolean类型的大小没有明确规定,通常定义为取字面值“true”或“false”。如果要在堆内存中表示基本类型的数据,就要使用到包装类(各类型的包装类见上图)。

高精度数值

BigInteger 和 BigDemical 类型的数据可以用于高精度的计算,类似于包装类型,但是没有对应的基本类型。

能对int或者float做的运算,对 BigIneger 和 BigDemical也能用,不过不能使用运算符,要用相关的方法。涉及到的计算量更多,运算速度会慢一些。BigInteger 支持任意精度的整数,可用于精确表示任意大小的整数值,同时在运算过程中不会丢失精度。 BigDemical支持任意精度的定点数字,可以用来进行精确的货币计算。

数组的存储

在Java中,数组使用前需要被初始化,并且不能访问数组长度以外的数据(会进行范围检查,产生少量内存开销和时间开销),创建对象数组时,实际上是创建了一个引用数组,并且每个引用的初始值都为 null 。基本类型的数组创建时编译器将数组的内存全部置零来保证初始化。

对象清理

作用域

在C/C++和Java中,作用域由大括号{ }的位置决定。Java的变量只有在其作用域内才可用,但注意以下操作在C/C++中合法,在Java中不可用:

{
    int x = 12;
    {
        int x = 96; //非法,会提示x已被定义过
    }
}

对象作用域

Java对象和基本类型有不同的生命周期,当我们使用 new 关键字创建Java对象时,它的生命周期将会超出作用域。

{
    String s = new String("a string");
} 
// 作用域终点

上例中,引用s在作用域终点就已经结束了,但是,引用s指向的字符串对象依然还在占用内存,在这段代码中,我们无法在这个作用域之后访问这个对象,因为唯一对它的引用s已超出了作用域的范围,在后续内容中会学到在编程中传递和复制对象的引用。只要你需要,new出来的对象会一直存活下去,Java提供垃圾回收机制,垃圾收集器会检查所有new出来的对象并判断哪些不再可达,继而释放内存。有效避免了内存泄漏问题。

类的创建

类型

class ATypeName {
// 这里是类的内部
}
ATypeName a = new ATypeName();

字段

和C/C++中的成员变量一样

基本类型默认值

类初始化时,成员变量是基本类型则会赋初值。

局部变量在类初始化时并不会赋初值。

static关键字

类是对象的外观和行为方式的描述,通常只有在使用 new 创建类时才分配数据存储空间,对象的方法才能供外界调用,这种方式不满足以下两点需求:

1.有时候只想为特定属性分配一个共享存储空间,而不考虑究竟要创建多少个对象,甚至根本不创建对象。

2.创建一个与类的任何对象都无关的方法,也就是没有创建对象也能调用的方法。

这时可以使用 static 关键字:

class StaticTest {
 static int i = 47; 
}

现在即使创建了两个 StaticTest 对象,但是静态变量 i 只占一份存储空间,两个对象共享相同的变量 i 。可以通过类名对i直接进行引用。静态方法的原理类似。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java是一种广泛使用的编程语言,有简单、面向对象、跨平台等特点。下面是Java学习的一些重要知识点和学习笔记: 1. Java基础: - 数据类型:Java提供了多种数据类型,包括基本数据类型和引用数据类型。 - 控制流程:学习如何使用条件语句(if-else、switch)、循环语句(for、while)等控制程序的流程。 - 数组:了解如何声明、初始化和操作数组。 - 方法:学习如何定义和调用方法,以及方法的参数和返回值。 - 类和对象:理解类和对象的概念,学习如何定义类、创建对象和使用类的成员变量和方法。 - 继承和多态:掌握继承和多态的概念,了解如何使用继承创建子类,并实现方法的重写和多态的应用。 2. 面向对象编程: - 封装:学习如何使用访问修饰符(public、private、protected)来控制类的成员的访问权限。 - 继承:了解继承的概念和作用,学习如何使用extends关键字创建子类。 - 多态:理解多态的概念和实现方式,学习如何使用父类引用指向子类对象,实现方法的动态绑定。 3. 异常处理: - 异常的分类:了解异常的分类(Checked Exception和Unchecked Exception)和常见的异常类型。 - 异常处理机制:学习如何使用try-catch语句捕获和处理异常,以及使用throws关键字声明方法可能抛出的异常。 4. 输入输出: - 文件操作:学习如何读写文件,包括使用File类、字节流和字符流等。 - 序列化:了解对象的序列化和反序列化,学习如何将对象保存到文件或网络中。 5. 集合框架: - 学习Java提供的集合框架,包括List、Set、Map等常用的集合类,以及它们的特点和用法。 6. 多线程编程: - 学习如何创建和管理线程,了解线程同步和线程间通信的方法。 7. 数据库连接: - 学习如何使用Java连接数据库,执行SQL语句,进行数据的增删改查操作。 以上是Java学习的一些重要知识点和学习笔记,希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值