今天是我学习编程以来第一次写博客,记下平日学习所得,本来这几日都在学习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. python爬取斗鱼B总直播弹幕

    在某群中看到关于弹幕爬取的需求,又因为斗鱼比较OP,就以这个作为切入点. 如果你想了解如何获取弹幕,我的这个例子就可以让你豁然开朗,对于哪些没有开发弹幕的直播或视频平台,就需要用抓包工具获取请求,然后 ...

  2. Reading Notes : 180214 计算机的总线结构

    读书<计算机组成原理>,百度百科 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和一些基本信息,简单认识,以后再深入了 ...

  3. Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

    刚刚在一台Linux服务器上安装了jdk和Tomcat,然后部署了一个web项目,在项目中有个添加图片的功能,保存图片时报错 org.springframework.web.util.NestedSe ...

  4. iOS视频处理

    在iOS中,apple提供了AVFoundation 用来处理音视频,基本能满足一些常用的音视频处理需求,而且能调用的硬件编解码接口,能提高不少效率,这是其它库所不能达到的.最近做过的Recnow S ...

  5. Win10英文系统 JDK1.8安装及环境变量配置

    前提 今天换新电脑了,需要重新安装一遍JDK.写个随笔记录一下整个过程. 下载 官网上JDK已经出到10了,但是回忆起JDK9都有各种坑(不支持一些软件),决定还是用JDK8. 下载地址: http: ...

  6. obfuscator-llvm Xcode集成配置

    一.简介 obfuscator-llvm 是一个开源的代码混淆编译器,能够使编译出来的文件添加垃圾代码和各种跳转流程,给逆向分析者增加难度. 二.编译 (1) 下载 目前最新版的是4.0的,下载地址是 ...

  7. Java : Spring基础 AOP

    简单的JDK动态代理例子(JDK动态代理是用了接口实现的方式)(ICar是接口, GoogleCar是被代理对象, MyCC是处理方法的类): public class TestCar { publi ...

  8. 在vue中使用 layui框架中的form.render()无效解决办法

    下面简单介绍在vue中使用 layui框架中的form.render()无效解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.php ...

  9. day 20 约束 异常处理 MD5

    1.类的约束(重点): 写一个父类.  父类中的某个方法要抛出一个异常  NotImplementError # 项目经理 class Base:     # 对子类进行了约束. 必须重写该方法    ...

  10. Docker学习——gitlab部署

    Gitlab 下载镜像 docker pull hub.c.163.com/gutenye/gitlab-ce:latest 查看镜像 docker images 启动容器 宿主机和docker的端口 ...