参考文献:

在学习 JAVA核心技术的 5.7反射章节

写了两个.java

1.Employee.java


package inheritance;
import java.time.*;public class Employee {
private String name;
private double salary;
private LocalDate hireDay;public Employee(String name, double salary, int year, int month, int day){this.name = name;this.salary = salary;
hireDay = LocalDate.of(year, month, day);
}
public String getName() {
return name; }
public double getSalary() {
return salary; }
public LocalDate getHireDay() {
return hireDay; }
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise; }
}

2.reflect.java

package inheritance; import java.time.*;
import java.lang.reflect.Field;  public class reflect {
public static void main(String[] args) throws Exception{
Employee harry = new Employee("Harry Hacker", 35000, 1890,10, 1);
Class cl = harry.getClass();
// the class object representing Employee
Field f = cl.getDeclaredField("name");
// the name field of the Employee class
Object v= f.get(harry);
// the value of the name field of the harry object, i .e., the String object "Harry Hacker"
System.out.println(cl);
System.out.println(f);
System.out.println(v);
}
}

正常的单编译方式使用的是javac reflect.java. 但在今天的场景下满足不了,因为reflect的编译过程需要依赖Employee.class

正确的编译方式是:先编译被依赖文件,再编译依赖者(并需要在参数内传入依赖文件信息)

1.javac -d ./ Employee.java   //(这个命令结束会自动创建./inheritance文件夹,并将对应的java文件创建到这个文件夹内)

2.javac -classpath . -d ./ reflect.java      //必须带classpath指定

3.java -classpath . inheritance.reflect      //调取class时必须基于package的路径调取(即classpath)

运行结果如下:

class inheritance.Employee
public java.lang.String inheritance.Employee.name
Harry Hacker

classpath是一个在本目录下检索package的命令,第二个参数inheritance决定了需要到这个目录去查找

如果直接执行java ./inheritance/reflect

会报错如下:Error: Could not find or load main class ..inheritance.reflect

即按package编译的class必须也要按package读取。

另一方面:Employee类的private过滤不允许单独读取变量。因此需要修改为public即可解决问题。

Exception in thread "main" java.lang.IllegalAccessException: Class inheritance.reflect can not access a member of class inheritance.Employee with modifiers "private"

https://www.cnblogs.com/sanxinglan/p/3520942.html

JAVA新手上路-2-javac编译相关推荐

  1. java命令javac java,使用命令行JAVAC编译Java

    我对使用cmd行 javac进行编译有点新,我在编译这个简单的Base-Interface类时遇到了问题 package com.apress.prospring2.ch03.di; /** * @a ...

  2. Java新手上路--算数运算符

    运算符:用于执行程序代码运算,会针对一个以上操作数项目来进行运算的符号.例如: + - 表达式:用运算符串联起来的式子.例如: 20+5 四则运算 首先说一下四则运算的代码运算,包括常量和变量的 + ...

  3. java新手上路(二):奥特曼打怪兽

    环境如下: 回合制对战游戏:奥特曼和小怪兽进行PK,直到一方的血量为0时,结束战斗输出谁胜利了. 分析:奥特曼和怪兽属于characters类的对象automan和monster. 定义该类的成员变量 ...

  4. IDEA 常用的小技巧汇总,JAVA 新手上路必备,快上车!(持续更新)

    目录 一.下载安装激活IDEA 二.IDEA 安装目录结构说明 三.快速入门之Hello Word 四.新建package和class 五.IDEA面板概览 六.IDEA常用设置 6.1 随心所欲之自 ...

  5. java编译器 Javac 编译原理

    目录 词法分析器 语法分析器 语义分析器 代码生成器 java源代码(符合语言规范)-->javac-->.class(二进制文件)-->jvm-->机器语言(不同平台不同种类 ...

  6. javac编译java文件之后 java运行找不到类的处理

    javac编译java文件之后,即使在同一个文件夹里面编译出了class文件java运行的时候也找不到运行的类,原因是已设置的classpath环境变量和class文件不在同一目录,java运行之前先 ...

  7. 选择java版本_新手上路之如何选择Java版本

    导读热词 @ 初入Java坑,有那么多版本的Java,想了解清楚自己到底该下什么版本这个问题,首先得了解清楚LTS与非LTS的区别 LTS与非LTS 每一次去官网下载JDK的时候,当你进入到Java ...

  8. 【深入Java虚拟机】之七:Javac编译与JIT编译

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...

  9. JavaSE —— 使用 Javac 编译 Java 程序

    使用 Javac 编译 Java 程序 新建一个 Java 文件 右键 选择 新建 文本文档 将文件后缀名改为 .java 注意:要勾选选上 显示 文件扩展名 编写 程序: public class ...

最新文章

  1. matplotlib 和 pandas 两个包的安装
  2. Discuz7使用syntaxhighlighter_2.0.320实现代码高亮
  3. 牛顿法 Newton Method
  4. 《Cloud Native Infrastructure》CHAPTER 7 (1)
  5. 不借助Maven,使用Eclipse创建Hello World级别的Spring项目
  6. k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
  7. mysql数据库查询语句过程_mysql(一) SQL查询语句执行过程
  8. python简单爬虫代码-使用Python3.5写简单网络爬虫
  9. 选择Python科学计算发行版
  10. 关于KX混响插件:REVERB R详解
  11. 从零学Java(1)之面向对象
  12. 【OTT】国内主要OTT平台背后的那些CDN服务商
  13. php怎么解析josn数据,用PHP解析JSON数据
  14. python中的单引号和双引号有什么区别_python中双引号和单引号的区别是什么
  15. VMware Workstation 英文改中文界面
  16. Apache JMeter 5.1.1 Win 10 环境变量配置
  17. 工信部下架96款侵害用户权益App、通报3款违规SDK
  18. postman批量运行和参数化
  19. .NET WebApi实现RSA加密与解密,签名与验签
  20. ESXI8.0一键安装黑群晖DSM7

热门文章

  1. 无法打开此计算机的组策略,无法运行gpedit.msc(组策略)的解决
  2. http://www.dewen.net.cn/q/15807/java byte 疑问
  3. Velocity中使用FCKeditor(FCKeditor for java)
  4. 注册表关闭命令提示符_如何从命令提示符下编辑Windows注册表
  5. Google Colaboratory中有多个py文件时的使用技巧
  6. 微型计算机中的内存主要包括哪两类,微机原理考试资料.doc
  7. 操作系统之操作系统的作用、目标、发展过程、特性和主要功能
  8. jwt无状态权限认证(pings-shiro-jwt)
  9. 呃,是该坚持些事情了
  10. 百度音乐API抓取-Fiddler