第一张为Java基础, 主要包含了

  • 定义变量
  • 定义Java类
  • 引用包
  • 数据类型

首先, 在Java中,类是基本的块。类是对象的定义; 对象是类在内存中运行的具体实例。

1. 属性与方法

Java 的类中含有两种主要元素:
1. fields, 通常理解为变量, 用来操作程序状态。
2. methods, 通常理解为方程, 用来储存程序状态。
public class Animal{ //TODO String name; void run(){} }
其他的块包括 接口(Interface) 和 枚举(enum),会在后面的文章中讲解。

2. 注释
  • 单行注释, 一般用 “// … ”
  • 多行注释, 一般用 “/* … */ ”
  • Javadoc 多行注释, 一般用 “/** … */ ”
3. 类和文件

大多数情况, 每个Java类会被定义在自己的 Java 文件里, 通常是public的。 同一个文件下也可以放多个class, 但是要确保最多只有一个class 为 public class。

1: public class Animal {
2: private String name;
3: }
4: class Animal2 {
5: }
4. Java包和导入

关于导入库,这里就不作过多讲解, 唯一需要提醒的是关于重复导入以及导入顺序。

1: import java.lang.System;
2: import java.lang.*;
3: import java.util.Random;
4: import java.util.*;
5: public class ImportExample {
6: public static void main(String[] args) {
7: Random r = new Random();
8: System.out.println(r.nextInt(10));
9: }
10: }

1 和 2 为重复导入, 当class 调用 System 时, 则会调用 line 1 而不是 line 2, 因为 line 1 相较于line 2 更加具体。
3 和 4 也为重复导入,
备注: 如果当导入的多个包都有此class, Java 会报编译错误, 例子如下:

import java.util.*;
import java.sql.*; // DOES NOT COMPILE
public class Conflicts {
Date date;
// some more code
}
5. 创建对象
  • 构造器: 用于 new 一个新对象, 为一种特殊的方法
Random r = new Random();

对于class,构造器不是必须的,因为Java 会为class 提供默认构造器

  • 初始化顺序:

    • class 里的field 和 instance 会从上往下开始初始化
    • 构造器会在所有field 和 instance 初始化完成之后被执行
6. Reference 和 Primitives 的区别

Java 自带 8 种 Primitive 类型, 其他所有的复杂数据类型都源于这8种。

除此之外, 还需要注意一下几点:

  • 数字在Java中默认为int,所以

    long max = 3123456789; // DOES NOT COMPILE
    long max = 3123456789L; // now Java knows it is a long
    

    或者可以把这个数转成其他进制:

    • 8进制: (0-7), 开头必须为0, 例如: 017
    • 16进制:(0-9, A-F), 开头为0x或者0X, 例如: 0xFF
    • 2进制: (0-1), 开头为0b或者0B, 例如: 0b11
  • 数字中允许下划线 " _ " , 但是有些个例不可以使用 :

    double notAtStart = _1000.00; // DOES NOT COMPILE, 不可以在开头
    double notAtEnd = 1000.00_; // DOES NOT COMPILE, 不可以在结尾
    double notByDecimal = 1000_.00; // DOES NOT COMPILE, 可以以在小数点前后
    double annoyingButLegal = 1_00_0.0_0; // this one compiles
    
Reference 类型:
和 primitive 的区别是, Reference 不会储存值, 而是作为一个指针指向内存中(堆中)的对象。以下两点需要注意:
  • 一个reference 可以被赋给另一个相同类型的 reference
  • 一个reference 可以被赋给一个新的对象, 用new 关键词
    today = new java.util.Date();
    greeting = "How are you?";
    

Primitive 类型和 Reference 类型比较总结:
  • Reference 可以被赋给null, 但是Primitive不可以并报编译错误

    int value = null; // DOES NOT COMPILE
    String s = null;
    
  • Reference 可以用来调用方法,Primitive没有方法调用
    String reference = "hello";
    int len = reference.length();
    int bad = len.length(); // DOES NOT COMPILE
    
  • 所有Primitive 为小写字母开头。
7. 声明和初始化变量
  • 以下是一些声明变量的知识点:

    String s1, s2; // 正确, 声明但没有初始化
    String s3 = "yes", s4 = "no"; // 正确,声明并初始化
    int i1, i2, i3 = 0; // 正确, i1, i2 声明但没有初始化, i3声明并初始化
    int num, String value; // DOES NOT COMPILE, 这里不可以声明多种类型
    boolean b1, b2; // 正确
    String s1 = "1", s2;  //正确
    double d1, double d2; // 错误, 若用“ ,“间隔, 有且只能在开头声明类型, 第二个double需删除
    int i1; int i2; // 正确
    int i3; i4; // 错误, 若用 “ ;“间隔, 后面的数据类型不能省略
    
  • 变量的命名:

    • 命名必须以 字母$ 或 下划线 ’ _ ’ 开头
    • 后续可以出现数字
    • 不可以使用Java的保留关键词作为变量命名
合法命名:okidentifier $OK2Identifier _alsoOK1d3ntifi3r __SStillOkbutKnotsonice$不合法命名:3DPointClass      // identifiers cannot begin with a number hollywood@vine       // @ is not a letter, digit, $ or _ *$coffee           // * is not a letter, digit, $ or _public               // public is a reserved word
8. 理解默认初始化
  • Local Variable: 是定义在方法内部的变量,使用前必须初始化,因为他们没有默认值。
public int notValid() {
int y = 10;
int x;
int reply = x + y; // DOES NOT COMPILE, x 没有初始化。
return reply;
}
  • Class Variable:又称 instance variable 或者 field, 声明时要加上 static, 不需要初始化因为有默认值。
10. 理解变量的作用范围(Variable Scope)

在这就不做过多说明,相信学过编程的都理解 Scope 的概念

11. Class内部的布局顺序
此为合法的顺序结构:package structure; // package must be first non-comment
import java.util.*; // import must come after package
public class Meerkat { // then comes the classdouble weight; // fields and methods can go in either order public        double getWeight() {return weight; }double height; // another field – they don't need to be together
}来看一看不合法的顺序结构:import java.util.*;package structure; // DOES NOT COMPILE, 此行必须写在第一行String name;    // DOES NOT COMPILE,field 不可以声明在class外public class Meerkat { }
13. 销毁对象
1. Garbage Collection:
  • 是Java 的垃圾回收机智, 用于回收内存中 堆上无用的对象。
  • System.gc() 可以建议Java调用GC 但是不能保证一定执行。
  • 何为无用对象? (unreachable object):
    • 没有任何Reference指向此对象
    • 所有指向此对象的Reference 跳出了作用域(out of scope)
2. finalize() 方法:

此方法在 GC 回收此对象时被调用, 如果GC没有执行,那么此方法也不会执行。
此方法有且只会被调用一次, 当GC第一次试图回收对象但是失败了, 此方法会调用一次; 当GC再次回收此对象时,finalize
方法不会被调用第二次了。

海老师的技术博客: OCA 考试 准备笔记(一): Java Building Blocks相关推荐

  1. 海老师的技术博客: OCA 考试 准备笔记 前言

    此系列为 OCA (Oracle Certified Associate Java SE 8)考试复习笔记, 我会以每章为一节,总结知识点和考点,以中文帮助大家理解学习. 首先 介绍一下 OCA 和 ...

  2. 自然语言处理与机器学习技术博客、学习资料精选[附网盘地址]

    自然语言处理与机器学习技术博客.学习资料精选! 首先,恭喜点开了这篇文章的读者,本文所提供的资料是免费的,小编不卖资料,是赠送资料! 今天咱们的学习社区里有学员提出要推荐一些NLP方面的博客.站点,因 ...

  3. 手把手教你写高质量Android技术博客,画图工具,录像工具,Markdown写法

    前言 作为程序员,写博客是一件很有意义的事情,可以加深自己对技术的理解,可以结交更多的朋友,记录自己的技术轨迹,而且分享可以让更多的人从中受益,独乐乐不如众乐乐嘛. 但是要写好博客也不是件容易的事,一 ...

  4. “我有必要写技术博客吗?” 写技术博客一年,谈谈其得失优劣

    本文全文不含任何推广,所提到的博主.公众号皆为笔者真真切切接触.学习过的. 大三上学期读了许多"程序员"的公众号,当时计算机基础知识并不好,很多文章读的一知半解.只记得关注了几个很 ...

  5. 50 家硅谷 IT 公司技术博客

    文章首发于 "董老师在硅谷"(微信号:donglaoshi-123),欢迎关注. 之前笔者写过一篇 "这些硅谷创业的公司,哪一家惊艳了你",算是处女作吧,还写过 ...

  6. 唐巧总结的40个国人iOS技术博客

    博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster h ...

  7. 我从写技术博客中收获到了什么?- J_Knight_

    我是 J_Knight_,熟悉我的人都应该知道我是一名刚工作满3年的非科班 iOS 开发者,而且一直坚持写技术博客快有2年半的时间了. 其实从去年开始就一直想分享我写博客的心得,但是一直也没有找到合适 ...

  8. 技术博客那些事儿-如何写好博客

    转载:http://www.ityouknow.com/ 写文章是一个短期没有收益,长期收益很大的一件事情,但往往是很多人坚持不下来,特别是写文章的初期,刚写完文章没有人阅读会有一种挫败感,影响了后期 ...

  9. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等

    本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...

最新文章

  1. 如何用知识图谱挖掘商业数据背后的宝藏?
  2. 整合公司3个网站后台管理子系统的经验总结 - 实现多系统的单点登录(ASP.NET + ASP)...
  3. php通过smtp发送邮件源码_PHP SMTP发送邮件函数
  4. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(三)
  5. php大文件怎么排序去重,简单实现大文件的排序和去重
  6. java中this,super,extends,implements相关继承概念讲解
  7. 用于Ubuntu 16.04和18.04的TensorFlow,Keras,Caffe,Caffe,CUDA,cuDNN和NVIDIA驱动程序的单行安装
  8. 软件评测师该如何自学?如何指定计划?
  9. 【计算机网络】SIP会话时,使用重定向与不使用重定向功能的区别
  10. 模拟电子技术 项目课 多种波形发生器(方波、三角波、正弦波)
  11. Serenity框架官方文档翻译(1-2开始、安装和界面)
  12. 加了索引,mysql查询就一定会用吗?
  13. deepin 安装vscode
  14. [转贴]请珍惜你身边爱你的人
  15. 一睹风采,见证郁锦香酒店遍布全球核心城市的百变姿态
  16. 安卓电子书格式_全网免费电子书资源,都在这个神器里了
  17. 视频教程-最新完整react教程从入门到精通包教包会-ReactJS
  18. 用RDO 自动化部署openstack--多节点--kilo版
  19. linux php环境搭建教程,linux php环境搭建教程
  20. 摘录 | 《十二个圣诞故事》

热门文章

  1. 2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!
  2. X Spring File Storage 0.6.0 发布,新增支持 FTP、SFTP、WebDAV
  3. 相对论通俗演义(1-10) 第九章
  4. 奥塔在线:CentOS下使用tar包安装Tomcat85
  5. open3d剩余内容有关函数详情(笔记10)
  6. Python read打印与print区别
  7. VirtualBox不能为虚拟电脑打开一个新任务
  8. 短视频社交应用系统开发-节省人力、物力成本,快速拥用短视频社交主流功能
  9. 小区门禁卡可以复制到手机上吗_怎样把小区门禁卡复制到手机上
  10. unity image sprite 赋值不显示