当前位置: 首页 > 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修饰符的使用
  • 【算法】 算法和数据结构绪论
  • [nginx文档翻译系列] 控制nginx
  • 345-反转字符串中的元音字母
  • Android系统模拟器绘制实现概述
  • Angular 响应式表单 基础例子
  • C++入门教程(10):for 语句
  • git 常用命令
  • Git同步原始仓库到Fork仓库中
  • JavaScript DOM 10 - 滚动
  • JavaScript-Array类型
  • leetcode讲解--894. All Possible Full Binary Trees
  • Mocha测试初探
  • mongodb--安装和初步使用教程
  • Node项目之评分系统(二)- 数据库设计
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从伪并行的 Python 多线程说起
  • 大数据与云计算学习:数据分析(二)
  • 第十八天-企业应用架构模式-基本模式
  • 电商搜索引擎的架构设计和性能优化
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 爬虫模拟登陆 SegmentFault
  • 深入 Nginx 之配置篇
  • 学习使用ExpressJS 4.0中的新Router
  • 一文看透浏览器架构
  • HanLP分词命名实体提取详解
  • ionic异常记录
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​VRRP 虚拟路由冗余协议(华为)
  • #etcd#安装时出错
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .cn根服务器被攻击之后
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net MVC + EF搭建学生管理系统
  • .NET MVC第五章、模型绑定获取表单数据
  • .net反混淆脱壳工具de4dot的使用
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)