【笔记整理】—— 2.14 Java 的引用数据类型 | 创建对象过程


【前言】
思考源头: Java 除 8 种基本数据类型外, 剩下的都是引用数据类型。而我们平常熟知的引用类型是“字符串等等”,那“ 等等”中到底包含什么?

常见引用数据类型

百度百科:引用类型 由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。

  • 常见引用数据类型:String字符串、类、接口、数组。

  • 引用数据类型的两种比较

    1. (常用) 比较两者的是否相等——用equals
    2. 比较两者是否指向同一个对象——用 == 。若为同一个对象则地址应相同
    3. 比较 a b 分别对应不同的对象,此时 a b 中的地址 一定是不同的了 ,此时比较的是对象的值 ,因此这里的比较只能用equals
  • 我们可以把引用当作一个指针,当创建对象并出现 new 关键字时,分配堆空间。

  • 内存分为:栈,堆,方法区,方法区内的常量池。基本数据类型才是真正存放在栈中,引用数据类型的常量放在在常量池中

  • 局部变量和成员变量的区别

    1. 定义的位置不一样
      局部变量定义在方法中,成员变量定义在方法外面,类的里面

    2. 作用域不同
      局部变量的作用域就是所定义的大括号,成员变量的作用域:在整个类中都可以使用,并且,成员变量的作用域跟变量修饰付有关系,如果修饰符不是private,在其他的类中也可以使用

    3. 在内存中的位置不一样
      局部变量存在于栈中,会随着作用域的结束而消失,成员变量存在堆中,是和对象的生命周期相同

    4. 初始化不同
      局部变量在使用之前一定要手动的进行初始化,而成员变量,如果没有进行手动初始化,java会给它一个默认值,
      整数类型:0,long:0L,小数类型:0.0,引用类型:null

Java创建对象做了什么

引用数据类型又称为对象数据类型

  1. .class文件加载到内存的方法区。方法区中内容只有一份,且只有第一次创建对象时加载一次
  2. 在栈中创建一块空间——栈帧,再给对象起个名字
  3. 看见 new ,就在堆中开辟一块空间
  4. 给成员变量进行默认的初始化。int型为0,引用类型默认值为null
  5. 显示初始化(成员变量)
  6. 将对象的引用(指针)交给变量
创建对象 与 static的关系
  • static修饰的变量称为静态变量,用static修饰的方法称为静态方法,这些变量和方法是在.class文件加载时进行创建的,【先于对象创建】
  • 非静态的方法可以访问静态的方法或属性,反之不行
  • 在静态方法中不能使用非静态的成员变量,如果想要使用,要先创该类的对象
  • 静态方法也不能有this、super
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java技术基础 4 1.1编程语言 4 1.2 Java的特点 4 1.3 Java开发环境 4 1.4 Java开发环境配置 5 1.5 Linux命令与相关知识 5 1.6 Eclipse/Myeclipse程序结构 6 Java语言基础 7 2.1基础语言要素 7 2.2八种基本数据类型 7 2.3常量和变量 8 2.4运算符与表达式 8 2.5编程风格 9 2.6流程控制语句 10 2.7数组 11 2.8字符串 11 2.9方法三要素 12 2.10插入排序 12 2.11冒泡排序 12 2.12冒泡排序:轻气泡上浮的方式 13 2.13二分法查找 13 2.14 Java系统API方法调用 14 2.15二进制基础 14 2.16 Java基础其他注意事项 14 面向对象 16 3.1类 16 3.2对象 16 3.3包 16 3.4方法及其调用 17 3.5引用 17 3.6访问控制(封装) 17 3.7构造器 17 3.8 super()、super.和 this()、this. 18 3.9重载和重写 19 3.10继承 20 3.11 static 23 3.12 final 24 3.13多态 25 3.14抽象类 25 3.15接口 25 3.16内部类 26 3.17匿名类 27 3.18二维数组和对象数组 28 3.19其他注意事项 28 Java SE核心I 30 4.1 Object类 30 4.2 String类 31 4.3 StringUtils类 33 4.4 StringBuilder类 33 4.5正则表达式 34 4.6 Date类 35 4.7 Calendar类 35 4.8 SimpleDateFormat类 36 4.9 DateFormat类 36 4.10包装类 37 4.11 BigDecimal类 38 4.12 BigInteger类 38 4.13 Collection集合框架 38 4.14 List集合的实现类ArrayList和LinkedList 39 4.15 Iterator迭代器 42 4.16泛型 43 4.17增强型for循环 43 4.18 List高级-数据结构:Queue队列 44 4.19 List高级-数据结构:Deque栈 44 4.20 Set集合的实现类HashSet 45 4.21 Map集合的实现类HashMap 46 4.22单例模式和模版方法模式 48 Java SE核心II 49 5.1 Java异常处理机制 49 5.2 File文件类 51 5.3 RandomAccessFile类 53 5.4基本流:FIS和FOS 55 5.5缓冲字节高级流:BIS和BOS 56 5.6基本数据类型高级流:DIS和DOS 56 5.7字符高级流:ISR和OSW 57 5.8缓冲字符高级流:BR和BW 58 5.9文件字符高级流:FR和FW 59 5.10 PrintWriter 60 5.11对象序列化 60 5.12 Thread线程类及多线程 61 5.13 Socket网络编程 65 5.14线程池 67 5.15双缓冲队列 68

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值