文档章节

Java编程思想: 一切都是对象

fzyz_sb
 fzyz_sb
发布于 2016/07/13 07:55
字数 738
阅读 38
收藏 2

用引用操纵对象

编程语言根据如何操作内存中元素分为两种, 一种是C/C++之类: 通过特殊语法来操纵, 例如指针. 一种是Python,Java之类, 使用引用操纵对象.

这就是为什么Python中存在id这个函数, 用来标识对象的唯一值, 而Java中处处有hashCode, 用来标识对象的哈希唯一值, 而哈希值通常为对象的内存地址.

In [1]: id("hello")
Out[1]: 4350279376
String s = "hello";
// 99162322
System.out.println(s.hashCode());

在Java中, 对象由new来创建, 存储在中, 由垃圾回收器对没有用到的对象进行垃圾回收, 而不需要我们手动销毁对象.

五个存储区

1. 寄存器: 处理器内部, 存储速度最快.

2. 堆栈: 位于通用RAM中, 但通过堆栈指针可以从处理器那里获得直接支持. 堆栈指针若向下移动则分配新的内存, 向上移动则释放内存.

C/C++支持对象在堆栈中分配, 而Java允许基本的类型(如char, int...)在堆栈中创建. 其余的对象在中创建.

3. 堆: 通用的内存池, 用于存放所有的Java对象.

4. 常量存储: 常量值通常直接存放在程序代码内部.

5. 非RAM存储: 数据存活在程序之外.

关于基本类型和字符串不可改变的解释

堆栈通常用来存储基本类型的变量和对象的引用, 而具体的对象存储于中. 而如果我们使用new String()创建一个对象, 则通常会创建一个或两个对象: 在中创建对象, 其对象的引用存储于堆栈中; 而如果常量存储中无此字符串, 则会在常量存储中新建此字符串.

作用域

在C/C++中, 可以使用大括号形成一个作用域, 例如下例代码在C/C++中是合法的:

{
  int x = 12;
  {
    int x = 13;
  }
}

但是在Java中却是非法的.

如果我们使用new创建对象, 则此对象会一直保留下去, 直到Java的垃圾回收器将其收回.

基本的Java程序

类的基本构造

如果我们在类中定义基本成员, 则其拥有默认值:

class Data {
  int i;
  double d;
}

这是Java的本身语言特性, 防止程序出错(对C++来说, 基本成员并没有默认值).

类有数据域, 操作数据域的方法, 访问控制(private, public, protected), 和一些额外的语法糖(如static, abstract...)组成.

class Person {
  static double no = 1;
  
  private String name;
  
  Person(String aName) {}
  
  public void setName(String n){}
}

import: 用于导入类库.

static: 用于创建与类相关而与类对象无关的数据或方法.

 

习题答案

https://github.com/leicj/books/tree/master/Java%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3

© 著作权归作者所有

fzyz_sb
粉丝 410
博文 209
码字总数 447144
作品 0
武汉
程序员
私信 提问
新手怎么学习java?学Java要学哪些内容?

学习任何一门技术之前,兴趣最重要。在学校的时候一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分。我经朋友介绍有免费的学习Java课...

糖宝_d864
2018/07/02
0
0
那些年,关于 Java 的那些事儿

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78695893 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2017/12/02
0
0
结合Java数据类型分析JVM运行时数据结构

阅读建议:本博客基于《Java编程思想》、《深入理解Java虚拟机》、《java并发编程实战》三本Java书籍和面试中遇到的问题而做的总结。 JVM(JAVA Virtual Machine Java虚拟机)运行时数据区域:...

硕士鸭
2017/10/19
0
0
Java基础教程,第八讲,如何使用对象和引用?

面向对象的程序设计,简称OOP(Object-oriented Programming)是目前各大互联网公司主流的程序设计范型,现在绝大部分招聘岗位都要求精通OOP编程,它取代了之前的面向过程的编程,必须精通O...

程序员补给栈
02/11
0
0
Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

Java java常常跟"企业"联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有...

启示录是真的
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java8

package com.shi.lambda;import java.util.Arrays;import java.util.List;import org.junit.Test;import com.shi.model.Employee;/** * 初始化案例 * @author xiaosh......

小小小施爷
17分钟前
1
0
c# 动态编译代码

有时候做计算一些东西时候,算法一直变更,写在程序需要一直调整,因此算法写在cs文件,然后动态调用内部的方法去计算判断,只需变更cs文件即可。 static void Main() { Stopwatch watch = n...

朝如青丝暮成雪
18分钟前
2
0
好程序员技术分享html5和JavaScript的区别

好程序员技术分享html5和JavaScript的区别,HTML5广义上讲是前端开发学科的代名词,包含HTML5、CSS3及JavaScript三个重要的部分,是运行在浏览器上应用的统称。如PC端网站、管理系统、手机网...

好程序员IT
20分钟前
1
0
tomcat 与 spring boot 设置虚拟路径

tomcat 设置虚拟路径 <Context path="/uploadDir" docBase="/data"/>path是请求访问的路径docBase是服务器存储文件的路径,Linux 根目录下 data spring boot 虚拟路径设置 registry.addRe......

kdy1994
23分钟前
1
0
var ,let ,const 的区别和共同点

一、let和var区别 1.关于变量提升,var能变量提升,let不能 // 关于var 如下所示console.log(a); //输出undefined,此时就是变量提升var a = 2; console.log(a); //2 //相当于下面...

MrBoyce
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部