对Java对象的认识与理解
今天是我学习编程以来第一次写博客,记下平日学习所得,本来这几日都在学习web框架 但觉得梳理一下之前所学很有必要。毕竟之前学习Java感觉很粗略只是以考试为目的。所以就以《Thinking in Java》一书为主对Java从头巩固一下。查缺补漏的同时更能加深理解。
一切都是对象
在C++中我们知道用指针操控对象,但在Java中几乎一切都是对象,这就简化了语法。但需要注意的是Java中我们是通过操纵标识符来操纵对象。也就是标识符其实是对对象的一个引用。一定要有引用才能操纵对象,但是有引用可以没对象。也就是我们可以拥有一个引用但不一定要与一个对象相关联。例如
String s;
此事给s发送信息就会报错,因为这个引用是空的。所以编写程序时为了安全通常创建引用都要初始化。
而当我们创建引用时通常用new操作符来关联一个对象。而且new不仅创建了对象还给出了怎样产生这个对象的信息。所以在Java中所有的对象都是我们自己创建的。Java提供了大量类型我们自己也可以创建类型。但是这些类型有些程序设计中会经常用到需要特殊对待,这一系列类型就是基本类型。而之所以特殊对待是因为new是将对象存储在堆中。而这对一些简单的小的变量不是很有效。所以对这种类型Java与C++一样是创建了一个不是引用的变量,这个变量储值并直接置于堆栈中。所以每种基本类型的存储空间大小是不变的。每个基本类型都有包装器类可以在堆中创建与基本类型对应的对象,而在之后我会详述包装基本类型的原因。

Java中值得注意的一点是我们不需要去销毁对象,所有的清理工作都由Java自己去完成。
{ String s = new String("1"); }//作用域终点 引用s在作用域终点消失了,而s指向的对象仍占据内存空间。实际上用new创建的对象是会一直保留下去,只要你需要,因为Java本身的垃圾回收机制所以我们不需担心释放内存的事。
类
既然Java中一切都是对象,那么我们就用类来决定一类对象的外观和行为。而在Java中,我们所做的工作就是定义类,产生那些类的对象以及发送信息给那些对象。而定义一个类就可以在类中设置两种元素:字段和方法。而当类的某个成员是基本类型时且没有初始化Java也会给他一个默认值。但这种初始化的方法并不适用于方法中。
第一次写博不太懂排版,也不想写太多,权当笔记了。
对Java对象的认识与理解的更多相关文章
- 理解Java对象序列化(二)
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...
- 深入理解Java对象的创建过程:类的初始化与实例化
摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...
- java对象深复制、浅复制(深拷贝、浅拷贝)的理解
先看一个例子 User user1 = new User(); user1.setId("111"); Map<String, User> map1 = new Has ...
- 深入理解Java对象序列化
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...
- 【深入理解JVM】:Java对象的创建、内存布局、访问定位
对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查.对象分配内存.并发处理.内存空间初始化.对象设置.执行ini方法等. 主要流 ...
- (转)深入理解Java对象的创建过程
参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一 ...
- Java对象与对象引用变量的理解
Java对象及对象引用 首先定义一个简单的类: class User{ int userId; String userName; } 我们在创建对象时,通常会写: User user = new Us ...
- 理解Java对象序列化【转】
原文链接:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 关于Java序列化的文章早已是汗牛充栋了,本文是 ...
- 深入理解Java对象
深入理解Java对象(理清关系) 1.对象的创建过程: 所有创建过程如下所示: new 类名 根据new的参数在常量池中定位一个类的符号引用. 如果没有找到这个符号引用,说明类还没有被加载,则进行类的 ...
随机推荐
- SQLserver高级编程
1.数据库设计 数据库设计的重要性: 减少冗余,提高性能.易维护 数据库设计的步骤: 1.收集信息.标识对象.标识属性.标识关系(一对一.一对多.多对一.多对多) E-R图: 属性:定义实体的性质.实 ...
- oracle 之分析函数 over (partition by ...order by ...)
一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 1.分析函数和聚合函数的 ...
- ORACLE中查询语句的执行顺及where部分条件执行顺序测试
Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...
- Swift_方法
Swift_方法 点击查看源码 ///方法 class Methods: NSObject { func test() { // self.testInstanceMethods() //实例方法 s ...
- webuploader实现上传视频
之前有人让我做一个webuploader上传视频,但是一直没有时间,现在抽出了时间来.来完成以下这个简单的demo 第一步,上传视频和上传 图片有什么区别么? 其实是没有的,因为执行的操作都是上传,所 ...
- 『C++』Temp_2018_12_13_Type
#include <iostream> #include <string> using namespace std; class Object{ public: virtual ...
- 走进MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- Resharp常用设置收集整理
F12跳转的问题:
- jQuery动态绑定事件(左右移动)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Apache Spark on K8s的安全性和性能优化
前言 Apache Spark是目前最为流行的大数据计算框架,与Hadoop相比,它是替换MapReduce组件的不二选择,越来越多的企业正在从传统的MapReduce作业调度迁移到Spark上来,S ...