当前位置: 首页 > news >正文

【108天】Java——《Head First Java》笔记(第1-4章)

第一章

工作方式

第一步:编写源代码

产生XXX.java文件。

第二步:编译器

在命令行下执行javac程序编译XXX.java。

第三步:输出

编译不报错则产生xxx.class文件。【即字节码文件,该文件】

第四步:java虚拟机

java虚拟机(JVM:Java Virtual Machine)将字节码转换成平台理解的形式运行。

程序结构

  1. 源文件(XXX.java)包含类

  2. 类包含方法和实例变量

  3. 方法里包含语句(statement)

第二章

堆垃圾回收机制

  • 对象不管如何创建,都将位于称为堆的内存区域中。

  • java根据对象大小分配内存区域。

  • 若对象不再被使用,将被打上可回收标记,待内存不足时进行清理,回收内存空间。

命名方法

  • 名称必须以字母、下划线(_)、$符号开头,不可用数字。

  • 除第一个字符,随便用数字

  • 避开Java保留字、关键字(keyboard)

第三章

对象的声明赋值创建三个步骤

举例说明

    Dog MyDog = new Dog();

第一步:声明一个引用变量

    Dog myDog;
    //要求JVM分配空间给引用变量,并将此引用变量命名为myDog。

第二步:创建对象

    new Dog();
    //要求JVM分配堆空间给新建立的Dog对象。

第三步:连接对象和引用

    Dog myDog = new Dog();
    //将新的Dog对象赋值给myDog这个引用变量。

第三章碎片知识

  1. float f = 32.5f;【注意:所有带小数点的值都会被Java当做double处理。】

  2. 编译器不允许将大的数据类型放进小的数据类型中,即便放的进,这是为了提高安全性.例如下面的例子就不行。

    int x = 7;
    byte t = x;
    //即便放的进,编译也过不了。          
  3. 引用变量保存的是存取对象的方法(一串地址),若对象是锁,那引用变量保存的就是开锁的钥匙。

  4. 引用变量如同遥控器,对引用变量运用圆点运算符如同按下遥控器按钮般的存取它的方法或实例变量。

  5. 引用对象只保存引用,不保存对象。

  6. java中我们不会也不该知道引用变量中实际装载的是什么。它只是用来代表单一的对象。只有JVM才知道如何用它里面的东西来取得该对象。你不开发虚拟机就不用关心这个。

  7. 若你关心内存分配,最需要关心的是需要建立多少个对象和引用。

  8. 对任意一个虚拟机而言,引用变量的引用是一样大的。

  9. 引用变量被设置为null后,将失去对原对象的引用,若那个对象没有对象再能引用,将被打上待回收标记。

  10. 把一个引用变量的值赋值给另一个,则被赋值的引用变量将于赋值引用变量共同指向同一个对象。

  11. 数组其中的每个元素都是变量,即会是8种primitive主数据类型变量中的1种,不然就是引用变量。

第四章

封装

  1. 封装基本原则:将实例变量标记为私有(private),并提供公有(public)的getter与setter来控制存取动作。

  2. 封装的优点:

    1. 防止实例变量在未经控制的情况下被直接修改。

    2. 防止自己对实例变量进行改动时,连累所有使用你的类及公用变量的人一起改。

  3. 封装的结果:通过强迫其它程序修改实例变量前经过setter,将设置的实例变量值控制在适当范围。

实例变量初始化默认值

  • integers——0

  • floating points——0.0【float是0.0f、double是0.0d】

  • booleans——false

  • references——null

  • String——null

  • char——/U 0000

  • 数组类型——null

  • 数组中的元素——看变量是什么型,就对应设置为其默认型。

        //数组举例说明
        int[] a; // a数组没有初始化默认值,a为null。
        int[] a = new int[5];//a已初始化默认值,其内部元素还未出初始化默认值,默认设置为int的默认初始化值0.
    

局部变量初始化默认值

局部变量不会被初始化,若使用局部变量前不给局部变量赋值,编译器将报错。

第四章碎片知识

  1. 类是对象的建造蓝图,编写类的时候,其实你是在告诉JVM如何制作该类型的对象。

  2. 任一类的每个对象都有独立的实例变量。

  3. 任一类的每个对象都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。

  4. void类型的方法表示不返回值。

    void go() {
    
    }
    
  5. 也可声明一个方法返回值。

    int giveSecret() {
    
    }
    
  6. Java并未要求一定要处理返回值,我们也可以忽略返回值,即可调用非void类型的方法,而不必理会返回值,这代表我要用的是方法的行为而不是返回值。

  7. 方法声明的类型,必须与要赋值的变量类型相同。

  8. 你可以返回会被隐式转换为方法声明类型的其他类型值,但若方法声明的类型容器小于想要返回的类型时,就必须做明确的转换。举例说明:

    double theSecret = life.giveSecret();
    // double 要一致 但返回值7可以从int转换为double,所以没问题,反之就不行。
    double giveSecret() {
        int a = 7;
        return a;
    }
    
  9. Java中所传递的所有东西都是值,它通过拷贝传递。

    int x = 7;
        int z;
        z = x ;
        //X传递的只是自己值的拷贝
  10. 方法只能声明单一的返回值,多个值你可以用数组作为载体返回。

  11. 任何有值运用的地方,都可用调用方法的方式来替换,以取得该值。

  12. 方法的参数基本上与局部变量是相同的——它们都是在方法中声明的(参数列中,相较于实例变量它也算局部的),而且参数不存在未声明的问题,编译器在调用方法而没有赋值参数时,就会显示错误,所以参数一定会被初始化。

  13. 区分==与equal(),前者只要求字节组合相等,后者还要求类型相等

相关文章:

  • 第一篇:linux系统应用管理之用户的切换
  • 动态采样大法好,让Oracle执行计划一步到位!
  • 图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)
  • .Net接口调试与案例
  • git pull 和本地文件冲突解决
  • SQL Server 中BIT类型字段增删查改那点事
  • python写的百度图片爬虫
  • 《Netty官方文档》本地传输接口
  • tomcat java.lang.OutOfMemoryError: PermGen space解决
  • OTL调用存储过程/函数及注意事项
  • Yahoo的流计算引擎基准测试
  • Js基本方法
  • 【Java集合源代码剖析】TreeMap源代码剖析
  • Transient修饰符的使用
  • 【算法】 算法和数据结构绪论
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • AWS实战 - 利用IAM对S3做访问控制
  • Debian下无root权限使用Python访问Oracle
  • ES学习笔记(12)--Symbol
  • Facebook AccountKit 接入的坑点
  • mysql外键的使用
  • oschina
  • sublime配置文件
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 那些被忽略的 JavaScript 数组方法细节
  • 小试R空间处理新库sf
  • Prometheus VS InfluxDB
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​2020 年大前端技术趋势解读
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转) ns2/nam与nam实现相关的文件
  • (转)visual stdio 书签功能介绍
  • .Net core 6.0 升8.0
  • .NET文档生成工具ADB使用图文教程
  • @Not - Empty-Null-Blank
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [ACTF2020 新生赛]Include
  • [AIGC] Redis基础命令集详细介绍
  • [autojs]autojs开关按钮的简单使用
  • [BJDCTF2020]The mystery of ip
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [echarts] y轴不显示0
  • [EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘
  • [Java][方法引用]构造方法的引用事例分析
  • [Linux] LVS+Keepalived高可用集群部署
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现