Java编程思想—第2章 一切都是对象

2.1 用引用操纵对象

  1. 每种编程语言都有自己的操作内存中元素的方式。
  2. 引用可以独立存在,也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。
  3. Java语言的一个特性:字符串可以用带引号的文本初始化。通常,必须对对象采用一种更通用的初始化方法。

2.2 必须由你创建所有对象

  1. 存储到什么地方
    a. 寄存器:在处理器内部,Java不能直接操作。
    b. 堆栈:位于通用RAM,通过堆栈指针操作,速度快,Java的对象引用存放在这里。
    c. 堆:也位于RAM,用于存放所有的Java对象。编译器不需要知道存储的数据在堆里的存活时间。操作灵活,但进行存储分配的时候需要较多时间。
    d. 常量存储:常量值通常直接存放在程序代码内部。可以存放在ROM中。
    e. 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。流对象:对象转化成字节流,通常被发送给另一台机器;持久化对象:对象被存放在磁盘上。
  2. 特例:基本类型
    a. 基础类型直接存储“值”,并置于堆栈中,因此更高效。
    b. Java要确定每种基本类型所占存储空间的大小。但他们的大小不会随机器硬件架构的变化而变化。
    c. 所有数值类型都有正负号,所以不用去寻找无符号的数值类型。
    d. Java的自动包装功能将自动地将基本数据类型转换为包装器类型。
    e. 高精度数字:Java提供了两个用于高精度计算的类:BigIntegerBigDecimal。这两个类的方法,提供的操作与基本类型所能执行的操作相似。
  3. Java中的数组
    a. Java的主要目标之一是安全性。
    b. Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价。但由此换来的是安全性和效率的提高,因此付出的代价是值得的(并且Java有时可以优化这些操作)。
    c. 当创建一个数组对象时,创建应用数组时,自动初始化为null,基本类型被初始化为0

2.3 永远不要销毁对象

  1. 作用域
    a. 作用域决定了在其内定义的变量名的可见性生命周期
    b.Java里不允许隐藏较大作用域的变量,编译器会报告变量已经被定义过。
  2. 对象的作用域
    a. Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。
    b. Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别哪些不会再被引用的对象。随后释放这些对象的内存空间,以便其他新的对象使用。

2.4 创建新的数据类型:类

  1. class用于创建类型,这决定了某一类对象的外观与行为。
  2. 在类中设置两种类型的元素:字段(数据成员)和方法(成员函数)。
    基本成员默认值,但是并不适用于“局部”变量。使用变量之前必须初始化,不然Java会报编译错误。

2.5 方法、参数和返回值

  1. Java的方法决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。
  2. Java中的方法只能作为类的一部分来创建。方法只能通过对象才能调用,且这个对象必须能执行这个方法的调用。
  3. 参数列表:在参数列表中传递的也是对象的引用,基本数据类型除外。
  4. return的用法,没有必要到方法结束时才离开,可以在任何地方返回。

2.6 构建一个Java程序

  1. 名字可见性
    a. 为了给一个类库生成不会与其他名字混淆的名字,Java设计者希望程序员反过来使用自己的Internet域名。反转域名后,句点就用来代表子目录的划分。
  2. 运用其他构件
    a. 为了解决类名冲突这个问题,必须消除所有可能的混淆情况。为实现这个目的,可以使用关键字import来准确地告诉编译器你想要的类是什么。
  3. static关键字
    a. 一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。
    b. 通过static关键字可以满足这两方面的需要。当声明一个事物时static时,就以为着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
    c. static创建的字段或方法,只存储一遍,所有的对象共享一个存储空间。

2.7 你的第一个Java程序

import java.util.*;
public class HelloDate{
    public static void main(String[] args){  //String[] args用来存储命令行参数
        System.out.println("Hello "+new Date());
    }
}

System的许多其他的方法

public class ShowProperties {
    //main()的第一行将显示从运行程序的系统中获取的所有“属性”,因此它可以向你提供环境信息
    public static void main(String[] args) {
        System.getProperties().list(System.out);
        System.out.println(System.getProperty("user.name"));
        System.out.println(
                System.getProperty("java.library.path")
        );
    }
}
  1. 编译和运行
javac HelloDate.java   //编译
java HelloDate  //运行

2.8 注释和嵌入式文档

两种注释方式

/*我是注释*/
//我是注释
  1. 注释文档
    a. 使用javadoc工具产生文档
  2. 语法
    a. 所有javadoc命令都只能在“/**”注释中出现,和通常一样,注释结束也“*/”。
    b. javadoc只能为public和protected成员进行文档注释。
/** 我是注释*/
  1. 嵌入式HTML
    a. 所有类型的注释文档–类、域和方法–都支持嵌入式HTML
  2. 一些标签示例

2.9 编码风格

  1. 类名的首字母大写
  2. 如果类名由几个单词构成,那么把它们并在一起,其中每个单词的首字母都采用大写形式。
  3. 驼峰风格
  4. 方法、字段以及对象引用名称等,公认的风格与类的风格一样。只是标识符的第一个字符采用小写。

2.10 总结

  通过本章的学习,大家已经接触相当多的关于如何编写一个简单程序的Java编程知识。此外,对Java语言及它的一些基本思想也有了一个总体认识。

热门文章

暂无图片
编程学习 ·

论怂

从心为怂,世人的误解 老祖宗还是有智慧的,这不是个肯定句。这是个判断语句,if you want to follow your heart,you should be 怂
暂无图片
编程学习 ·

面试总结

面试总结 1.面试以项目为开始展开,不断深入,从项目的背景一直介绍到项目用到的技术原理。会不断的问为什么 2.考察底层原理 3.语言表达能力很重要,需要把原理背景说清楚 下面是题目,欢迎大家把想到的答案写在评论区一起讨论 题目&…
暂无图片
编程学习 ·

Windows安装redis

Windows安装redis 可以到https://github.com/microsoftarchive/redis/releases下载最新的windows版本 双击 redis-server 就会安装默认配置启动redis服务 这样就说明在windows下启动redis成功了,端口号是6379
暂无图片
编程学习 ·

Victor CMS 未授权sql注入(CVE-2020-29280)漏洞复现

0X00简介 The Victor CMS v1.0版本存在安全漏洞,该漏洞源于通过search.php页面上的“search”参数造成的。 0X01影响范围 The Victor CMS v1.0 0X02漏洞复现 在search.php中search参数未经过滤就直接和sql语句拼接导致sql注入漏洞 1.访问首页点击搜索框&#x…
暂无图片
编程学习 ·

从根本上把握防护DDoS的核心要素,不怕DDoS攻击防不住

随着互联网技术的广泛应用和飞速发展,DDoS流量攻击案件频发,网站防护DDoS变得越来越重要,只有采取有效的网站安全防护措施,才能够更好的防御黑客的攻击。 近日,公安部的微信公众号发布了一则重要提醒:你常…
暂无图片
编程学习 ·

211本,字节视频1面凉凉,三天后,却收到了美团offer?

写在开头 2020年的开端,似乎并不那么幸运,新冠肺炎的出现,对我们的生活、工作和学习都造成了非常大的影响,很多公司延期返工了,原本的金三银四似乎也不会如往年那般热闹,但这并不意味着我们就什么都不去做…
暂无图片
编程学习 ·

12.13补课周

记录2leetcode 104 递归 非递归的栈的还不会写 思路 利用DFS,深度递归;总深度为左石子树最大深度加1; 空树深度为0。 代码 // An highlighted block /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode l…
暂无图片
编程学习 ·

程序猿小白艰辛学习的第三天

变量的三大组成部分 变量名:用来找值 赋值符号:将变量值的内存地址绑定给变量名 变量值:记录的事物的状态,也就是我们存储的数据 引用 print(变量名)运行会显示出变量值 变量名 变量名的命名应该遵循见名…
暂无图片
编程学习 ·

2020-12-17

显示如下问题:、Android studio No Debuggable Processes 解决方法:选中 Run->Debug 重新Debug编译运行就可以了。
暂无图片
编程学习 ·

大数据与云计算

大数据与云计算什么是云计算?云计算包含哪些关键技术?云计算有哪些特点?IaaS、PaaS、SaaS是什么?基础设施即服务IaaSIaaS的特点平台即服务PaaSPaaS的特点PaaS的作用软件即服务SaaSSaaS的特性云计算的基础设施和功能云计算的基础设…
暂无图片
编程学习 ·

TinyML-TVM是如何驯服Tiny的(下)

TinyML-TVM是如何驯服Tiny的(下) Lazy Execution 实际上,随着通信开销开始占主导地位,一旦用户请求,就执行算子的开销变得非常昂贵。可以通过延迟评估直到用户需要调用的结果来提高系统的吞吐量。 从实现的角度来看&a…
暂无图片
编程学习 ·

航次总结2020年7月

航次结束了快2个月,一直没有时间写本航次的总结,主要原因是自己承担的任务要验收,费了好大的劲,才将数据处理成验收单位所需要的,所幸现在应该是没有问题了,符合专项的要求了。航次期间,由于还有…
暂无图片
编程学习 ·

png是什么格式?

png是一种采用无损压缩算法的位图格式。PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式,24位PNG不支持透明,32位PNG在24位基础上增加了8位透明通道,因此可展现256级透明程度。 png是一种采用无损压缩算法的位…
暂无图片
编程学习 ·

aop 的使用

aop有两种方式,一个是注解,另外一个是配置xml 1、注解的方式: a、和xml一样,首先得有个配置,如果是springboot,写个配置类: Configuration EnableAspectJAutoProxy ComponentScan("xxx.…
暂无图片
编程学习 ·

python制作命令行工具——fire

一、快速介绍 来一波官方介绍。 Python Fire是一个库,用于从任何Python对象自动生成命令行接口。是用python创建CLI的一种简单方法。是开发和调试Python代码的一个有用工具。Python Fire帮助探索现有代码或将其他人的代码转换为CLI。使得Bash和Python之间的转换更…