再会Java
作者曾写过一段时间Java, 时间一长也就忘得差不多了. 现在重新学习一个, 故而只是提要式的记录.
Java是静态强类型语言, 运行于Java虚拟机(Java Virtual Machine, JVM)上.
若要运行Java程序需要安装Java运行环境(Java Runtime Environment, JRE). 若要编译Java源文件需要安装JDK(Java Development Kit).
Ubuntu安装:
apt-get install openjdk-8-jre-headlessMac安装:
brew cask install java
Java使用类来组织代码, 源代码保存于.java文件中. 一个源文件可以定义多个类, 最多只能有一个public类,源文件名必须与public类一致.
使用javac [SrcFile]命令编译Java源文件, 每个类都会编译得到一个.class文件. 使用java [ClassName]将会搜索相应地类, 并执行其main()方法.
照例先写HelloWorld:
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
编译执行:
$javac Main.java
$java Main
Hello World!
Java标识符可以由字母,数字和_组成, 不得以数字开头, 大小写敏感.
Java的语句以;结尾, 使用{}标志代码块. 语句与行无关, 可以一句几行或一行多句.
Java支持//引导的行注释符和/*, */标志的块注释符.
数据类型
Java提供了一系列内置类型及其封装类, 类型的大小与操作系统无关.
byte: 8位二进制补码表示的带符号整数, 封装类java.lang.Byteshort: 16位二进制补码表示的带符号整数, 封装类java.lang.Shortint: 32位二进制补码表示的带符号整数, 封装类java.lang.Integerlong: 64位二进制补码表示的带符号整数, 字面值加L后缀, 如233L, 封装类java.lang.Long.float: 32位单精度, 符合IEEE754标准的浮点数, 字面值加f或F后缀, 如1f, 封装类java.lang.Floatdouble: 64位双精度浮点数, 封装类java.lang.Doublechar: 16位Unicode字符, 字面值使用单引号标志, 如1, 封装类java.lang.Character.
定义变量时初始化::
int sum = 0;
Java的boolean类型对象只能进行关系运算,只有boolean值才能进行流程控制. 其它数据类型(包括int)不能与boolean相互转换,也不能进行流程控制或关系运算.
Java使用与C几乎相同的算术, 关系和逻辑运算符如?:, %, 逻辑运算符同样具有短路特性.
Java同样支持++和--运算符以及复合赋值运算符. 赋值运算符将返回左值, 因此可以进行连续赋值:
public class Main {
public static void main(String[] args) {
int a = 0, b= 0;
System.out.println(a=2); // 2
a = b = 3;
System.out.println(a); // 3
System.out.println(b); // 3
}
}
引用
Java中除上述内置类型的变量外, 其它变量均为引用类型.
final关键字修饰的对象为常量, 一经初始化无法修改:
final int i = 2;
==运算符用于判断引用是否指向同一个对象, 要判断对象内容是否相同需要使用equals()方法.
流程控制
Java的流程控制语句与C基本相同, 不过做了一些很好的改进:
if
public class Main {
public static void main(String[] args) {
int score = 77;
if (score > 90) {
System.out.println("Excellent");
}
else if (score > 60) {
System.out.println("Good");
}
else {
System.out.println("Fail");
}
}
}
switch
public class Main {
public static void main(String[] args) {
char ch = 'a';
switch (ch) {
case 'a': System.out.println("Apache"); break;
case 'b': System.out.println("Basic"); break;
default: System.out.println("??");
}
}
}
while
public class Main {
public static void main(String[] args) {
int i = 1, sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
}
do
public class Main {
public static void main(String[] args) {
int i = 1, sum = 0;
do {
sum += i;
i++;
} while( i <= 100);
System.out.println(sum);
}
}
for
public class Main {
public static void main(String[] args) {
int i, sum = 0;
for (i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
}
foreach
public class Main {
public static void main(String[] args) {
int[] arr = new int[5];
for (int i : arr) {
System.out.println(i);
}
}
}
break, continue
public class Main {
public static void main(String[] args) {
int i, sum = 0;
for (i = 1; i <= 100; i++) {
sum += i;
if (i % 2 == 0) {
continue;
}
if (i > 80) {
break;
}
}
System.out.println(sum);
}
}
可以使用label来跳出多层循环:
public class Main {
public static void main(String[] args) {
int i, j;
outer: for (i = 1; i <= 100; i++) {
for (j = 1; j <= 100; j++) {
if (j == 10) {
continue outer;
}
if (i > 3) {
break outer;
}
System.out.print(i);
System.out.println(j);
}
}
}
}
异常
异常类族的基类为java.lang.Throwable, 它派生出Error和Exception两个子类.
Error用来指示运行环境错误, 如JVM内存异常. 程序一般无法从Error中恢复.
Exception则是那些可以恢复的异常的基类, 其子类中包括:
IOException: 找不到文件等造成的输入输出异常InterruptedException: 线程被其它线程中断造成的异常RuntimeException: 由程序本身造成的异常:NullPointerException: 引用指向的对象不存在造成的异常IndexOutofBoundException: 对容器的访问下标越界造成异常
Java使用try-catch块捕获异常:
public class Main {
public static void main(String[] args) {
try {
throw new RuntimeException("nothing");
}
catch (RuntimeException e) {
System.out.println(e.getMessage());
}
catch (Exception e) {
e.printStackTrace();
}
finally {
; // release something
}
}
}
可能抛出异常的代码在try中, 依次使用catch尝试捕获抛出的异常, 若无法捕获则向上一级方法抛出. 无论是否有异常发生还是异常是否被捕获, finally块中的代码都会被执行.
若方法不处理某个异常就把它向上抛出. 但是方法若可能向上抛出检查性(checked)异常, 必须使用throws关键字声明.
public void test() throws ClassNotFoundException {}
通过继承异常类, 程序员可以自定义异常.
包
Java通过包来管理命名空间. 包声明语句是除注释外Java源文件中的第一条语句.
package com.finley
包管理的是类而非源文件, 多个源文件可以使用同一个包名. 但是字节码.class文件所在的目录结构必须与包名吻合.
通过import语句引入某个类:
import com.finley.Test
使用*可以引入源文件中所有类:
import com.finley.*
Java默认导入java.lang.*, 使用源文件自身包中的其它类也无需引入.
再会Java的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 使用Java原生代理实现AOP
### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...
- Java基础应用
Java集合类解析 List.Map.Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素.Set 无法拥有重复元素,内部排序.Map 保存key-value值,v ...
- 网络爬虫讲解(附java实现的实例)
本文转载http://blog.csdn.net/luojinping/article/details/6870898 转载过来主要是防止想百度文库一样突然停止运作,导致很多文库丢失而无法找寻 网络蜘 ...
- 深入理解JVM内幕:从基本结构到Java 7新特性
转自:http://www.importnew.com/1486.html 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境 ...
- Java 编程入门(词汇表)
抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...
- Java日志系统框架的设计与实现
推荐一篇好的文章介绍java日志系统框架的设计的文章:http://soft.chinabyte.com/database/438/11321938.shtml 文章内容总结: 日志系统对跟踪调试.程 ...
- ZeroMQ(java)中的数据流SessionBase与SocketBase
前面的文章中已经比较的清楚了ZeroMQ(java)中如何在底层处理IO, 通过StreamEngine对象来维护SelectableChannel对象以及IO的事件回调,然后通过Poller对象来维 ...
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
随机推荐
- Alpha 冲刺 (7/10)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 学习MSI.CUDA 试运行软件并调试 ...
- Scrum冲刺阶段2
成员今日完成的任务 人员 任务 何承华 后端设计 陈宇 后端设计 丁培辉 后端设计 温志铭 主页面的设计 杨宇潇 主页面的设计 张主强 服务器构建 成员遇到的问题 人员 问题 何承华 暂无 陈宇 暂无 ...
- drf3 Serializers 序列化组件
为什么要用序列化组件 做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 给前端数据的时候都要转成json格式,那就需要对从数据库拿到的数据进行序列化. ...
- sshpass 使用方法
首先下载sshpass并且安装 $ tar -zxvf sshpass-1.06.tar.gz $ cd sshpass-1.06 $ ./configure --prefix=/usr/local/ ...
- Unity3D中的生命周期函数
生命周期函数:需要继承 MonoBehaviour 类才能使用.生命周期函数全部都是由系统定义好的,系统会自动调用,且调用顺序和我们在代码里面的书写顺序无关. 常用的生命周期函数: Awake():唤 ...
- OpenCV库框架结构
在上文已经学习过了opencv的编码规则,为了能够方便灵活的运用OPECV库,我们需要对其框架结构进行学习了解,以方便我们进行实际工程调用调用. 1.Opnecv库到底提供了什么? 打开opencv源 ...
- Dot & cross product
https://www.khanacademy.org/math/linear-algebra/vectors-and-spaces/dot-cross-products/v/vector-dot-p ...
- Android 实现手写板技术
Android手写板和涂鸦的功能,代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- WebRTC学习之ICE深入理解
ICE(交互式连接建立---Interactive Connectivity Establishment),是一种标准穿透协议.它利用STUN和TURN服务器来帮助端点建立连接.下图显示了ICE的基本 ...
- 7.ViewPagerIndicator
ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面</item> ...