今天是我学习编程以来第一次写博客,记下平日学习所得,本来这几日都在学习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对象的认识与理解的更多相关文章

  1. 理解Java对象序列化(二)

    关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...

  2. 深入理解Java对象的创建过程:类的初始化与实例化

    摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类 ...

  3. java对象深复制、浅复制(深拷贝、浅拷贝)的理解

    先看一个例子 User user1 = new User(); user1.setId("111"); Map<String, User> map1 = new Has ...

  4. 深入理解Java对象序列化

    关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Th ...

  5. 【深入理解JVM】:Java对象的创建、内存布局、访问定位

    对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查.对象分配内存.并发处理.内存空间初始化.对象设置.执行ini方法等. 主要流 ...

  6. (转)深入理解Java对象的创建过程

    参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一 ...

  7. Java对象与对象引用变量的理解

    Java对象及对象引用 首先定义一个简单的类: class User{ int userId; String userName; } 我们在创建对象时,通常会写: User user = new Us ...

  8. 理解Java对象序列化【转】

      原文链接:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 关于Java序列化的文章早已是汗牛充栋了,本文是 ...

  9. 深入理解Java对象

    深入理解Java对象(理清关系) 1.对象的创建过程: 所有创建过程如下所示: new 类名 根据new的参数在常量池中定位一个类的符号引用. 如果没有找到这个符号引用,说明类还没有被加载,则进行类的 ...

随机推荐

  1. Linux 文件系统 的 学习

    学习参考大神:http://www.cnblogs.com/yyyyy5101/articles/1901842.html  总结:简介 http://linux.chinaunix.net/tech ...

  2. Oracle 创建触发器实现自增长

    Oracle中没有主键,要实现自增长,需要创建触发器,每次插入数据的时候进行ID赋值. 环境:Oracle11,Navicat工具连接 创建了一个表,字段如下(字段名,表名都需要大写,你小写了还无效. ...

  3. 过滤器Filter在配置文件中不起作用

    web.xml内容 <filter> <filter-name>LoginFilter</filter-name> <filter-class>com. ...

  4. CSS权重的比较方法

    CSS的权重如下: !important  Infinity正无穷 行间样式  1000 id     100 class|属性|唯类 10 标签|伪元素  1 通配符   0 256进制 当出现多个 ...

  5. 【读书笔记】The Swift Programming Language (Swift 4.0.3)

    素材:Language Guide 初次接触 Swift,建议先看下 A Swift Tour,否则思维转换会很费力,容易卡死或钻牛角尖. 同样是每一章只总结3个自己认为最重要的点.这样挺好!强迫你去 ...

  6. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  7. MySQL高可用之MGR安装测试

    Preface     We've learned the machenism of MGR yesterday,Let's configurate an environment and have s ...

  8. 单文件版本的netframework的net core 2.1

    如果你还在用net4.5,如果你还在用netframework,又想使用netcore2.1的库或者功能,又觉得nuget动不动就好大,可以试试下面的这个. https://pan.baidu.com ...

  9. RPM包、YUM、system初始化进程基本知识

  10. 分布式缓存 Redis(二)

    代码实例 namespace RedisTest { class Program { static void Main(string[] args) { Student stu = RedisOper ...