Java快速入门

你好,世界!

源代码组织方式

Java程序由package+class组成,package对应目录的相对路径,class对应文件,如

E:WorkspacesMyEclipse 10JavaStudysrccomhappyframeworkjavastudyhelloHello.java

Java快速入门

关于class有如下几点规则:

  1. 文件的名字必须和class的名字一致(public级别的class名字)。

  2. 文件必须只包含一个public访问基本的class(可以包含多个非public级别的class)。

  3. package名字必须和目录一致。

入口方法

App.java

Java快速入门

最终的项目结构

Java快速入门

数据类型

8种原子类型

  1. 整数类型:byte、short、int和long。

  2. 小数类型:float和double。

  3. 字符类型:char。

  4. 布尔类型:bool。

除此之外的是interface、class和array。

小数类型的常量默认是double类型,声明float类型的常量需要使用F作为后缀。

Java快速入门

运算符

  1. 算术运算符:+、-、*、/ 和 %,两个整数相除,结果还是整数。

  2. 赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、~=、^=、<<=、>>= 、 >>>=、++ 和 --。

  3. 比较运算符:==、!=、<、<=、> 和 >=。

  4. 逻辑运算符:&&、|| 和 !。

  5. 位运算符:&、|、~、^、<<、>> 和 >>>。

字符串

String是拥有“值语义”的引用类型,字符串常量实现了“享元模式”,equals会按照内容进行比较,==按照地址比较。

Java快速入门

为了高效的修改字符串Java引入了StringBuffer。

Java快速入门

数组

想要一起学习交流想要共同进步的可以加Java学习q-u-n-678-241-563里有许多学习视频资料等待着大家

声明语法

DataType[] name 或 DataType name[]。

初始化语法

DataType[] name = new DataType[length]。

DataType[] name = new DataType[] { element1, element2, ...elementn }。

DataType[] name = { element1, element2, ...elementn }。

Java快速入门

多维数组

只有不等长多维数组DataType[][],没有DataType[xxx, xxx]。

控制结构

  1. 条件:if-else if-else、switch-case-default和三元运算符(?:)。

  2. 循环:while、do-while、for和foreach。

  3. Labeled block。

Java快速入门

最近觉得label是个不错的东西,最起码多了一种选择。

方法

Java中所有的赋值和方法调用都是“按值“处理的,引用类型的值是对象的地址,原始类型的值是其自身。

Java支持变长方法参数。

Java快速入门

Java快速入门

注意:调用自身的构造方法是用this(xxx,xxx,...)来完成,且必须位于第一行。

静态成员

Java中类似静态构造方法的结构,称之为:静态初始化代码块,与之对应的是实例初始化代码块,见下例:

Java快速入门

继承

继承使用 extends,抽象类和抽象方法使用abstract声明,向下转型使用 (ChildType)instance,判断是否是某个类型使用 instanceof,见下例:

Java快速入门

重写

Java中的重写规则比较灵活,具体如下:

  1. 除了 private 修饰之外的所有实例方法都可以重写,不需要显式的声明。

  2. 重写的方法为了显式的表达重写这一概念,使用 @Override进行注解。

  3. 重写的方法可以修改访问修饰符和返回类型,只要和父类的方法兼容(访问级别更高,返回类型更具体)。

  4. 可以使用final将某个方法标记为不可重写。

  5. 在构造方法中使用 super(xxx, xxx)调用父类构造方法,在常规实例方法中使用 super.method(xxx, xxx)调用父类方法。

  6. Java不支持覆盖(new)。

Java快速入门

Java快速入门

包的名字和项目路径下的目录路径相对应,比如:项目路径为:C:Study,有一个Java源文件位于:C:StudycomhappyframeworkstudyApp.java,那么App.java的包名字必须为:com.happyframework.study,且 App.java 的第一行语句必须为:package com.happyframework.study。

Java支持三种导入语法:

  1. 导入类型:import xxx.xxx.xxxClass。

  2. 导入包:import xxx.xxx.xxx.*。

  3. 导入静态成员:import static xxx.xxx.*。

Java快速入门

访问级别

Java支持四种访问级别:public、private、protected 和 default(默认),类型和接口只能使用public 和 default,成员和嵌套类型可以使用所有,下面简单的解释一下 protected 和 default。

  • protected 修饰过的成员只能被自己、子类和同一个包里的(不包括子包)其他类型访问。

  • default 修改过的类型或成员只能被自己和同一个包里的(不包括子包)其他类型访问。

嵌套类

Java支持如下几种嵌套类:

  1. nested class,定义在类型内部的类型。

    1. static nested class,使用 static 声明的 nested class,static nested class 可以访问所有外部类的静态成员。

    2. inner class,没有使用 static 声明的 nested class,inner class 可以访问所有外部类的实例成员,inner class 不能定义静态成员。

代码示例

Java快速入门

Java快速入门

特殊的inner class:local class

Java快速入门

除了inner class的规则之外,local class可以访问局部final变量,在Java8中有更多的改进。

特殊的local class:anonymous class

Java快速入门

常量

不废话了,直接看代码:

Java快速入门

有一点需要注意的是:只有一种情况Java的常量是编译时常量(编译器会帮你替换),其它情况都是运行时常量,这种情况是:静态类型常量且常量的值可以编译时确定。

接口

Java的接口可以包含方法签名、常量和嵌套类,见下例:

Java快速入门

枚举

Java枚举是class,继承自java.lang.Enum,枚举中可以定义任何类型可以定义的内容,构造方法只能是private或package private,枚举成员会被编译器动态翻译为枚举实例常量,见下例:

Java快速入门

调用枚举的构造方法格式是:常量名字(xxx, xxx),如果构造方法没有参数只需要:常量名子,如:

Java快速入门

异常

Java中的异常分为checked和unchecked,checked异常必须声明在方法中或被捕获,这点我觉得比较好,必定:异常也是API的一部分,见下例:

Java快速入门

所有继承Exception的异常(除了RuntimeException和它的后代之外)都是checked异常。

装箱和拆箱

Java提供了原始类型对应的引用类型,在1.5之后的版本还提供了自动装箱和自动拆箱,结合最新版本的泛型,几乎可以忽略这块。

Java快速入门

注意:自动装箱和自动拆箱是Java提供的语法糖。

泛型

Java的泛型是编译器提供的语法糖,官方称之为:类型参数搽除,先看一下语法,然后总结一点规律:

泛型方法

测试代码

Java快速入门

调用泛型方法

Java快速入门

输出的结果是

Java快速入门

泛型类

测试代码

Java快速入门

调用代码

Java快速入门

输出结果

Java快速入门

泛型接口

测试代码

Java快速入门

调用代码

Java快速入门

输出结果

Java快速入门

类型参数约束

测试代码

Java快速入门

调用代码

Java快速入门

输出结果

Java快速入门

类型搽除过程

  1. 将泛型定义中的类型参数去掉。

Java快速入门

2.将T换成extends指定的约束类型,默认是Object。

Java快速入门

3.如果有非泛型类型继承或实现了泛型基类或接口,而且进行了重写,根据情况,编译器会自动生成一些方法。

Java快速入门

4.根据泛型参数的实际参数搽除调用代码。

Java快速入门

这里说的不一定正确,特别是Java泛型的约束支持&(如:可以约束实行多个接口),不过过程估计差别不大,我没有看Java语言规范,这里只是大概的猜测。

备注

这几天完成了Java基本语法的学习,关于一些高级特性在后面再慢慢总结,如:运行时进程模型、类型加载机制、反射、注解、动态代理等。

学习Java的同学注意了!!!

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流,裙号码:253772578【长按复制】 我们一起学Java!