javac 编译 & java运行

如何脱离IDE运行一个java程序?

首先使用 javac 命令将 .java 文件编译成 .class 文件,然后使用 java 命令运行。
javac命令

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值