海老师的技术博客: OCA 考试 准备笔记(一): Java Building Blocks
第一张为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相关推荐
- 海老师的技术博客: OCA 考试 准备笔记 前言
此系列为 OCA (Oracle Certified Associate Java SE 8)考试复习笔记, 我会以每章为一节,总结知识点和考点,以中文帮助大家理解学习. 首先 介绍一下 OCA 和 ...
- 自然语言处理与机器学习技术博客、学习资料精选[附网盘地址]
自然语言处理与机器学习技术博客.学习资料精选! 首先,恭喜点开了这篇文章的读者,本文所提供的资料是免费的,小编不卖资料,是赠送资料! 今天咱们的学习社区里有学员提出要推荐一些NLP方面的博客.站点,因 ...
- 手把手教你写高质量Android技术博客,画图工具,录像工具,Markdown写法
前言 作为程序员,写博客是一件很有意义的事情,可以加深自己对技术的理解,可以结交更多的朋友,记录自己的技术轨迹,而且分享可以让更多的人从中受益,独乐乐不如众乐乐嘛. 但是要写好博客也不是件容易的事,一 ...
- “我有必要写技术博客吗?” 写技术博客一年,谈谈其得失优劣
本文全文不含任何推广,所提到的博主.公众号皆为笔者真真切切接触.学习过的. 大三上学期读了许多"程序员"的公众号,当时计算机基础知识并不好,很多文章读的一知半解.只记得关注了几个很 ...
- 50 家硅谷 IT 公司技术博客
文章首发于 "董老师在硅谷"(微信号:donglaoshi-123),欢迎关注. 之前笔者写过一篇 "这些硅谷创业的公司,哪一家惊艳了你",算是处女作吧,还写过 ...
- 唐巧总结的40个国人iOS技术博客
博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster h ...
- 我从写技术博客中收获到了什么?- J_Knight_
我是 J_Knight_,熟悉我的人都应该知道我是一名刚工作满3年的非科班 iOS 开发者,而且一直坚持写技术博客快有2年半的时间了. 其实从去年开始就一直想分享我写博客的心得,但是一直也没有找到合适 ...
- 技术博客那些事儿-如何写好博客
转载:http://www.ityouknow.com/ 写文章是一个短期没有收益,长期收益很大的一件事情,但往往是很多人坚持不下来,特别是写文章的初期,刚写完文章没有人阅读会有一种挫败感,影响了后期 ...
- 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...
最新文章
- 如何用知识图谱挖掘商业数据背后的宝藏?
- 整合公司3个网站后台管理子系统的经验总结 - 实现多系统的单点登录(ASP.NET + ASP)...
- php通过smtp发送邮件源码_PHP SMTP发送邮件函数
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(三)
- php大文件怎么排序去重,简单实现大文件的排序和去重
- java中this,super,extends,implements相关继承概念讲解
- 用于Ubuntu 16.04和18.04的TensorFlow,Keras,Caffe,Caffe,CUDA,cuDNN和NVIDIA驱动程序的单行安装
- 软件评测师该如何自学?如何指定计划?
- 【计算机网络】SIP会话时,使用重定向与不使用重定向功能的区别
- 模拟电子技术 项目课 多种波形发生器(方波、三角波、正弦波)
- Serenity框架官方文档翻译(1-2开始、安装和界面)
- 加了索引,mysql查询就一定会用吗?
- deepin 安装vscode
- [转贴]请珍惜你身边爱你的人
- 一睹风采,见证郁锦香酒店遍布全球核心城市的百变姿态
- 安卓电子书格式_全网免费电子书资源,都在这个神器里了
- 视频教程-最新完整react教程从入门到精通包教包会-ReactJS
- 用RDO 自动化部署openstack--多节点--kilo版
- linux php环境搭建教程,linux php环境搭建教程
- 摘录 | 《十二个圣诞故事》
热门文章
- 2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!
- X Spring File Storage 0.6.0 发布,新增支持 FTP、SFTP、WebDAV
- 相对论通俗演义(1-10) 第九章
- 奥塔在线:CentOS下使用tar包安装Tomcat85
- open3d剩余内容有关函数详情(笔记10)
- Python read打印与print区别
- VirtualBox不能为虚拟电脑打开一个新任务
- 短视频社交应用系统开发-节省人力、物力成本,快速拥用短视频社交主流功能
- 小区门禁卡可以复制到手机上吗_怎样把小区门禁卡复制到手机上
- unity image sprite 赋值不显示