01 Java语法
一. 概念
JDK: Java Development Kit
JRE: Java Runtime Environment
开发程序时安装JDK即可,会自动安装JRE,用户的运行环境安装JRE即可。
JDK安装目录种有javac程序,它是java编译器。
安装完毕后配置JAVA_HOME和CLASSPATH的环境变量。
二. 命令行下编译运行
一个文件中只能有一个类,且文件名和类名必须一样。
编译:C:\Users\Hang\Downloads>javac Hello.java
运行:C:\Users\Hang\Downloads>java Hello
三. Eclipse导出jar
右键工程中已有的package,File - Export - Java - JAR file - finish,导出后的.jar文件可以用解压缩软件打开
右键工程 - New - Package,输入名字,如果是个人输入org,公司输入则com,其后接功能名。把java源文件拖进去,旧文件如果依然存在可将其删除。此时再次导出jar,用解压软件打开后可以观察到目录结构。
以上导出的jar相当于库文件,在命令行运行,提示找不到或无法加载主类 MyHello.jar
下面导出可运行的jar文件,右键工程中已有的package,File - Export - Java - Runable JAR file - finish
可运行的jar文件中的清单文件指明了更多信息
四. 语法
1. 值类型(都是有符号类型,不存在无符号类型)
byte 1字节
char 2字节,表示Unicode字符
long 8字节
boolean 取值为true或false
2. 引用类型
String
3. 常量
关键字final
如果在函数中,常量写为:
final int num = 1;
final String str = "Asdf";
实际上,常量往往写为 public static final NUMBER = 1;
4. 移位
由于都是有符号类型,故右移时最高位都补符号位,即算术右移。如果想补0,需要写3个小于符号,此时进行逻辑右移:a <<<= 1;
5. 异常处理
try { } catch (Exception e) { // TODO: handle exception } finally { }
6. throws
public static void foo() throws Exception { //throws关键字说明方法可能抛出异常 }
调用foo()时需要有try catch,否则编译报错
try { foo(); } catch (Exception e) { // TODO: handle exception }
7. super
对父类的引用
8. synchronized
同步时使用,可用于静态方法、实例方法或代码块
public static synchronized void foo() {//静态方法中可用 } public synchronized void foo2() {//实例方法中可用 } synchronized (args) {//代码块中可用 }
9. instanceof
if (args instanceof Object) { Object theObj = (Object) args; }
10. 数组
int[] ary1 = {1,2,3}; //一维数组 int[][] ary2 = {{1,2},{3,4}}; //二维数组 for (int[] ary : ary2) { for (int n : ary) { System.out.println(n); } }
11. 包装类
由于java中的数据类型不是对象,没有方法和属性,所以要将其转化为对象,对应关系如下:
数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Interger
long Long
float Float
double Double
11. ArrayList
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); for (Integer integer : list) { System.out.println(integer); }
12. LinkedList
LinkedList<Integer> list=new LinkedList<Integer>(); list.add(1); list.add(2); list.add(3); for (Integer integer : list) { System.out.println(integer); }
13. HashMap
HashMap<Integer, String> hashMap=new HashMap<Integer, String>(); hashMap.put(0, "Hello"); hashMap.put(1, "World"); for (Entry<Integer, String> entry : hashMap.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); }
14. 数字转字符串
String str = Integer.toString(10); System.out.println(str);
15. 访问权限
如果未注明public或private,则访问权限默认为包作用域,即A调用B,如果两者在同一个包里则成功,否则编译报错。
16. 内部类
public class Hello { private int num = 1; public class Internal{ private int num = 1; public void foo() { num = 111111; //Internal自己的num Hello.this.num = 222222; //Hello的num } } Internal internal2 = new Internal(); public static void main(String[] args) throws Exception { Hello hello = new Hello(); Internal internal = hello.new Internal(); internal.foo(); System.out.println(hello.num); //输出222222 System.out.println(internal.num); //输出111111 } }
17. 匿名类
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。
public class Hello { public void foo1(){ System.out.println(111111); } public void foo2(){ System.out.println(222222); } public static void main(String[] args) throws Exception { //匿名类继承一个父类,同理可实现一个接口 Hello hello = new Hello() { @Override public void foo1(){ System.out.println("重写父类方法"); } }; hello.foo1(); //输出重写父类方法 hello.foo2(); //输出222222 } }
18. 非虚方法
有static或private或final修饰的方法都是非虚方法,其他都是虚方法。