创建文件HelloWorld.java,注意文件名需要与类名一致。
public class HelloWorld { public static void main (String [] args) { System.out.println ("Hello World"); } }
String args[] 与String[] args都可以执行,推荐使用String [] args
使用javac进行编译 javac HelloWorld.java 如果有编码问题 可以使用 javac -encoding UTF-8 HelloWorld.java
使用java运行 java HelloWorld
大小写敏感
类名首字母应该大写,若由多个单次组成,每个单词的首字母应该大写
方法名应该由小写字母开头,若由若干个单词组成,后面的每个单词首字母应该大写
源文件名必须与类名相同,文件名的后缀为.java
主方法入口, 所有的java程序由public static void main (String[] args)方法开始执行
标识符
标识符都应该以字母 A-Z a-z $ _ 开始
首字符之后可以是字母A-Z a-z $ _ 或数字的任何字符组成
关键字不能用作标识符
标识符是大小写敏感的
修饰符
访问控制修饰符 default public protected private
非访问控制修饰符 final abstract static synchronized
变量
局部变量
类变量 (静态变量)
成员变量 (非静态变量)
数组
存储在堆上的变量,可以保存多个同类型的变量
枚举
枚举限制变量只能是预先设定好的值,枚举可以单独声明或者声明在类里面,方法、变量、构造函数也可以在枚举中定义
enum color { RED, GREEN, BLUE; } // 通过class在内部实现 class Color { public static final Color RED = new Color (); public static final Color BLUE = new Color (); public static final Color GREEN = new Color (); } // 通过for语句迭代枚举元素 for (Color myVar : Color.values()) { System.out.println (myVar); } // values 返回枚举类中所有的值 Color [] arr = Color.values (); // ordinal 可以找到每个枚举常量的索引,就像数组索引一样 // valueOf 返回指定字符串值的枚举常量 Color.valueOf ("RED")
关键字
保留字不能用于常量、变量、和任何标识符的名称
内置数据类型 八种基本类型 六种数字类型 (四个整数型 两个浮点型) 一种字符类型还有一种布尔型
byte 8位 有符号 最小值-128 最大值127 默认值0
short 16位 有符号 最小值-32768 最大值32767 默认值 0
int 32位 有符号 最小值 -2147483648 最大值 2147483647 默认值0
long 64位 有符号 最小值 -2^63 最大值 2^63-1 默认值 0L
float 32位 默认值0.0f, 不能用来表示精确的值,如货币
double 64位 默认值0.0d 不能用来表示精确的值, 如货币
boolean 1位 两个取值 true 和 false 默认值为false
char 16位 最小值\u0000 最大值 \uffff char 数据类型可以存储任何字符
所有的变量在使用前必须声明,声明变量的基本格式 type identifier = [value], identifier = [value];
type为java的数据类型 identifier是变量名 可以使用逗号隔开来声明多个同类型变量
int a, b, c; int d = 3, e = 4, f = 5; String s = "hello world"; //定义二进制数 int binary = 0b00111100;
Java语言支持的变量类型有
类变量 独立与方法之外的变量 用static修饰 有默认值 通过ClassName.VariableName进行访问
实例变量 独立于方法之外的变量 没有static修饰 有默认值,变量的值可以在声明时指定,也可以在构造方法中指定 通过ObjectReference.VariableName进行访问
局部变量 类的方法中的变量 没有默认值,需要初始化
访问修饰符 定义类、方法、或者变量,通常放在语句的最前端
非访问修饰符
static 修饰类和类变量 局部变量不能声明为static
final 修饰类、方法和变量 修饰的类不能被继承 方法不能被继承类重新定义 修饰的变量为常量
abstract 用来创建抽象类和抽象方法 抽象类不能用来实例化对象,声明抽象类的唯一目的就是未了将来对该类进行扩充 一个类不能同时被abstract 和 final修饰
synchronized 和 volatile 主要用来线程的编程
算术运算符 + - * / %(取余) ++ 自增 – 自减
关系运算符 == != > < >= <=
位运算符 位运算符作用在所有的位上,并且按位运算
逻辑运算符
赋值运算符
其他
?: 三元运算符 3个操作数 需要判断布尔表达式的值 var x = expression ? value : value2;
instanceof 用于操作对象实例 检查该对象是否是一个特定的类型
(Object reference variable) instanceof (class / interface type)
String name = "James" boolean result = name instanceof String;
运算符优先级
do … while 循环 循环体至少执行一次
while循环 满足条件才执行循环体
for循环
增强for循环 用于数组的增强for循环 for (声明语句 : 表达式) {}
int [] numbers = {10, 20, 0, 200, 2001, 20} for (int x : numbers) { System.out.println ("x == " + x); } String [] names = {"james", "lucas", "jobs", "jim", "teddy"} for (String x : names) { System.out.println ("x == " + x); }
break关键字
continue关键字
首先必须声明数组变量 才能在程序中使用数组。dataType [] arrayRefVar 或 dateType arrayRefVar[];
通常使用基本循环或者For-Each循环
int total = 0 for (int i = 0; i < myList.length; i++) { total += myList[i]; } //For-Each循环 for (type element : array) { System.out.println (element) }
void printArray(int [] array) { for (int i = 0; i < array.length; i++){ System.out.println (array[i]) } }
int [] reverse (int [] list){ int [] result = new int [list.length]; for (int i = 0, j result.lenght - 1; i < list.lenght; i++, j--) { result[j] = list[i]; } return reult; }
多维数组可以看成是数组的数组 二维数组就是一个特殊的一维数组,每一个元素都是一个一维数组
type [] [] typeName = new type[typeLength1][typeLength2];
通过extends关键字声明一个类冲另外一个类继承而来 class A {} class B extends A {}
// 父类 public class Animal { private String name; private int id; // 构造函数 public Animal (String name, int id) { this.name = name; this.id = id; } // 吃 public void eat () {} // 睡 public void sleep () {} // 介绍 public void introduction () {} } //继承 public class Penguin extends Animal { public Penguin (String name, int id) { super (name, id); } }
继承类型 java不支持多继承 单支持多重继承
继承的特性
继承关键字
extends 只能继承一个类
implements 可以同时继承多个接口,多个接口之间可以用,分割
public interface A { public void eat (); public void sleep (); } public interface B { public void show (); } public class C implements A, B { }
super和this关键字 super关键字来实现对父类成员的访问, this关键字指向自己的引用
final关键字声明的类可以把类定义为不能继承的,即最终类,用于修饰方法,方法不能被子类重写
构造器 子类是不继承父类的构造器的,它只是调用,如果父类的构造器带有参数,必须在子类的构造器中显示的通过super关键字调用父类的构造器并适配适当的参数列表
抽象类 不能实例化对象,类的其他功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样
抽象类不能实例化对象,所以抽象类必须被继承才能被使用。
使用abstract class 来定义抽象类
抽象类需要被继承之后才能创建对象
抽象方法 特别的方法,该方法的具体实现由它的子类确定,那么可以在父类中声明该方法为抽象方法
abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,没有方法体
public abstract class Employee { private String name; private String address; private int number; public abstract double computerPay (); } public class Salary extends Employee { private double salary; public double comupterPay () { return salary / 52; } }
优点
实现java封装的步骤
是抽象方法的集合,接口通常以interface来声明, 一个类通过继承接口的方式,从而来继承接口的抽象方法
接口的声明
interface 接口名称 extends 其他接口 { // 声明变量 // 抽象方法 }
接口是隐式抽象,声明一个接口的时候,不必使用abstract关键字
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字
接口中的方法都是公有的
interface Animal { public void eat (); public void travel (); } public class MammalIni implements Animal { public void eat () { } public void travel () { } }
接口允许多继承 在接口的多继承中extends关键字只需要使用一次
public interface HocKey extends Sports, Event