如何脱离IDE运行一个java程序?
首先使用 javac 命令将 .java 文件编译成 .class 文件,然后使用 java 命令运行。
1.运行一个.java 程序
先写一个hello world
public class Hello
{
public static void main(String[] args) {
System.out.println("hello world!!!");
}
}
要运行这个程序,首先使用 javac 编译:
javac Hello.java
执行后会生成一个 Hello.class 文件;然后使用java 命令执行:
java Hello
得到运行结果:
hello world!!!
hello world 就运行成功了!!!
2.java程序 在package 中编译和运行
改造上面的Hello.java 添加一个package
package com.lampard.spring;
public class Hello {
public static void main(String[] args) {
System.out.println("hello world!!!");
}
}
编译:
javac com/lampard/spring/Hello.java
完成后 com/lampard/spring/ 目录下多了一个 Hello.class 文件
运行
java com/lampard/spring/Hello
或者
java com.lampard.spring.Hello
都会得到运行结果:hello world!!!
3.多个java文件 并且有引用关系
调用关系:ExampleMain -> UserService -> User
ExampleMain
package com.lampard;
import com.lampard.model.User;
import com.lampard.service.UserService;
public class ExampleMain {
public static void main(String[] args) {
UserService userService = new UserService();
userService.addUser();
User user = new User("lampard",18);
}
}
UserService
package com.lampard.service;
import com.lampard.model.User;
public class UserService {
public void addUser() {
User user = new User("lampard", 35);
System.out.println(user);
}
}
User
package com.lampard.model;
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
目录结构
com
└── lampard
├── ExampleMain.java
├── model
│ └── User.java
└── service
└── UserService.java
编译:
javac com/lampard/ExampleMain.java
ps:编译ExampleMain.java时 同时编译了 ExampleMain.java引用的java文件;User.java 和UserService.java 的class 文件也同时生成了;
com/
└── lampard
├── ExampleMain.class
├── ExampleMain.java
├── model
│ ├── User.class
│ └── User.java
└── service
├── UserService.class
└── UserService.java
运行 java com.lampard.ExampleMain
得到输出结果:User{name=’lampard’, age=35}
4.引用第三方jar 编译&运行
改造上面方法 UserService.java 使用 fastjson 格式化 user 对象;引用 fastjson.jar
package com.lampard.service;
import com.alibaba.fastjson.JSON;
import com.lampard.model.User;
public class UserService {
public void addUser() {
User user = new User("lampard", 35);
System.out.println(JSON.toJSON(user));
}
}
使用javac 编译出错:fastjson 相关文件没有找到
javac com/lampard/ExampleMain.java
./com/lampard/service/UserService.java:3: error: package com.alibaba.fastjson does not exist
import com.alibaba.fastjson.JSON;
^
./com/lampard/service/UserService.java:14: error: cannot find symbol
System.out.println(JSON.toJSON(user));
^
symbol: variable JSON
location: class UserService
2 errors
因为 UserService.java 中引用了第三方jar中的内容,所以在编译时需要指定第三方jar的classpath
使用javac 的 cp (classpath) 选项;
-classpath path Specify where to find user class files and annotation processors
-cp path Specify where to find user class files and annotation processors
运行:
javac -cp .:./lib/fastjson-1.2.23.jar com/lampard/ExampleMain.java
编译成功,相关的class文件都有生成;
com
└── lampard
├── ExampleMain.class
├── ExampleMain.java
├── model
│ ├── User.class
│ └── User.java
└── service
├── UserService.class
└── UserService.java
ps:这里特别要注意的是 使用 cp 选项 一定要加 . 符号,这个表示当前路径也在classpath 中,多个classpath 路径 使用 :符号分隔(windows 用;分隔);如果不加 . 当前路径需要编译的java文件是寻找不到的会报错。
如下:
javac -cp ./lib/fastjson-1.2.23.jar com/lampard/ExampleMain.java
com/lampard/ExampleMain.java:4: error: package com.lampard.model does not exist
import com.lampard.model.User;
^
com/lampard/ExampleMain.java:5: error: package com.lampard.service does not exist
import com.lampard.service.UserService;
^
com/lampard/ExampleMain.java:13: error: cannot find symbol
UserService userService = new UserService();
^
symbol: class UserService
location: class ExampleMain
com/lampard/ExampleMain.java:13: error: cannot find symbol
UserService userService = new UserService();
^
symbol: class UserService
location: class ExampleMain
4 errors
使用java 运行时也需要使用 cp 选项
java -cp .:./lib/fastjson-1.2.23.jar com.lampard.ExampleMain