java程序问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序问题?相关的知识,希望对你有一定的参考价值。
哪位大神帮我解答这个?应该是个小问题。。。
因为没有显式提供构造方法(也叫构造器或构造函数),所以,java会自动为你提供一个默认构造方法(无参构造方法) ,而new ObjectInstance()就是调用的这个默认构造方法来创建对象的。同时类ObjectInstance覆盖(重写)了toString方法,这个方法的作用就是把类ObjectInstance的对象转换成一个字符串。
在这个方法内部调用了从Object类继承的getClass方法,getClass方法会返回一个类Class(注意这里的Class表示一个类,实际上Class还是一个泛型类)的对象,这个Class类的对象保存了类ObjectInstance的元数据(比如,ObjectInstance类有哪些属性、哪些方法、超类是谁、实现了什么接口等)。而Class类的对象有一个getName方法,这个方法会返回Class对象表示的类的类名,因为现在的Class类的对象保存的是类ObjectInstance的元数据(即它代表了类ObjectInstance),所以getName方法返回的是类ObjectInstance的类名"ObjectInstance"。
而当调用println输出一个类ObjectInstance的对象时,会先自动调用这个对象的toString方法,将对象转换为字符串后再输出。所以,输出的是ObjectInstance类的类名。追问
为什么会自动调用重写的toSpring方法?
追答因为你在用println输出一个对象啊。
println函数有一个重载版本是println(Object o),你调用的正是这个重载。在这个重载函数内部的某个地方会调用o.toString()将对象转换为字符串(就是在这里调用的toString),然后输出。
直白地讲,调用对象的toString方法,就是方法println为你提供的功能。
我明白了。其实就是print的源码中调用了toString。
追答就是这样的啊
追问这几天刚开始学。嗯,说的很详细,多谢了。
参考技术A Java源程序一般用java作为扩展名,是一个文本文件,用Java语言写成,可以用任何文本编辑器创建与编辑;编译源程序Java编译器,“javac”,读取你的Java源程序并翻译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。通常,字节码文件以class作为扩展名;运行class(字节码)文件Java解释器读取字节码,取出指令并且翻译成计算机能执行的代码,完成运行过程 参考技术B 第一,编译器会生成了一个默认的无参数构造函数。第二,之所以输出ObjectInstance ,是自动调用了toString方法。追问
。
java程序中的路径问题
1.java程序中相对路径
import java.io.File;
import java.net.URL;
/**
* java相对路径、绝对路径及类路径的测试
*/
public class Test
/**
* 测试相对路径是相对谁
* -- 相对于部署项目的文件夹(AppServer)
*/
// @org.junit.Test
public void testRelativePath() throws Exception
String filePath = "test//t.txt";
File file = new File(filePath);
if (!file.exists())
if (!file.getParentFile().exists())
file.getParentFile().mkdirs();
file.createNewFile();
System.out.println(file.getAbsolutePath());
// E:\\workspace\\AppServer\\test\\t.txt
=====相对路径相对的是项目在磁盘上的路径(即项目名文件夹)
/**
* 测试绝对路径
*/
// @org.junit.Test
public void testAbsolutePath() throws Exception
String filePath = "D:\\\\path\\\\test.txt";
File file = new File(filePath);
if (!file.exists())
if (!file.getParentFile().exists())
file.getParentFile().mkdirs();
file.createNewFile();
System.out.println(file.getName()); // test.txt
System.out.println(file.getAbsolutePath()); // D:\\path\\test.txt
/**
* 获取ClassPath(类路径)
*/
// @org.junit.Test
public void testClassPath() throws Exception
/*
来个对比(各种情况下ClassPath的值):
1) 直接junit运行方法时打印:(给这个类单独创建了一个ClassPath)
/E:/workspace/AppServer/target/test-classes/
2) Eclipse启动tomcat时打印(tomcat插件中的ClassPath):
/E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/AppServer/WEB-INF/classes/
3) 单独启动tomcat时打印(tomcat中的类路径):
/E:/apache-tomcat-7.0.62/webapps/AppServer/WEB-INF/classes
*/
// 获取类路径
URL url = this.getClass().getResource("/");
// file:/E:/workspace/AppServer/target/test-classes/
String path = url.getPath();
// 看看类路径下都有啥
File file = new File(path);
// 直接junit运行方法
for (File f : file.listFiles())
System.out.println(f.getName()); // 还没有文件被编译,啥也没有
/**
* 测试路径中的正反斜杠
*/
// @org.junit.Test
public void testSprit() throws Exception
// 文件已经存在
String filePath = null;
/*
* 正斜杠‘/‘
*/
filePath = "D:/path/test.txt"; // D:\\path\\test.txt
filePath = "D://path//test.txt"; // D:\\path\\test.txt
filePath = "D:/path//test.txt"; // D:\\path\\test.txt
filePath = "D:////path////test.txt"; // D:\\path\\test.txt
/*
* 反斜杠‘\\‘
*/
filePath = "D:\\\\path\\\\test.txt"; // D:\\path\\test.txt
// filePath = "D:\\path\\test.txt"; // 编译都通过不了啊,\\t是一个制表符
// filePath = "D:\\\\\\path\\\\test.txt"; // 编译都通过不了啊
// 正反斜杠混合使用
filePath = "D:\\\\path/test.txt"; // D:\\path\\test.txt
filePath = "D:/path\\\\test.txt"; // D:\\path\\test.txt
File file = new File(filePath);
System.out.println(file.getAbsolutePath());
@org.junit.Test
public void testName() throws Exception
String filePath = null;
filePath = "D:/path/test.txt"; // D:/path/test.txt
System.out.println(filePath);
filePath = "D://path//test.txt"; // D://path//test.txt
System.out.println(filePath);
filePath = "D:/path//test.txt"; // D:/path//test.txt
System.out.println(filePath);
filePath = "D:////path////test.txt"; // D:////path////test.txt
System.out.println(filePath);
/*
* 反斜杠‘\\‘
*/
filePath = "D:\\\\path\\\\test.txt"; // D:\\path\\test.txt
System.out.println(filePath);
// 正反斜杠混合使用
filePath = "D:\\\\path/test.txt"; // D:\\path/test.txt
System.out.println(filePath);
filePath = "D:/path\\\\test.txt"; // D:/path\\test.txt
System.out.println(filePath);
/**
* 总结:
* 1) 相对路径
*
* 相对路径:是相对于application(服务)目录所在的路径。
*
* 比如:
* 相对路径为"test/t.txt", 服务目录为:"D:/App"
* 则t.txt的绝对路径为:"D:/App/test/t.txt"
*
* 2) 绝对路径
*
* 没什么好说的。
*
* 3) 类路径
*
* a. Eclipse中右键运行(为当前类单独创建了一个类路径):
* /E:/workspace/AppServer/target/test-classes/
*
* b. Eclipse中启动tomcat(tomcat插件中的类路径)::
* /E:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/AppServer/WEB-INF/classes/
*
* c. tomcat中启动start.bat(tomcat服务中的类路径):
* /E:/apache-tomcat-7.0.62/webapps/AppServer/WEB-INF/classes
*
* 4) 路径中的正反斜杠(/ \\)
*
* a. ‘/‘ 正斜杠
* 怎么用都是对的,无论是单斜杠,双斜杠,多斜杠 或 混合使用,都能正确的解析文件路径。
*
* b. ‘\\‘ 反斜杠
* 只能使用双斜杠‘\\\\‘.
* 单斜杠,多斜杠 或 混合使用都会报错。编译都不能通过。
*
* c. 正反斜杠混合使用
* 反斜杠只能使用双斜杠‘\\\\‘, 正斜杠随意。 都能正确解析出路径。 "D:/aaa\\\\/bb.txt",这种写法也能解析。
*
* d. 反双斜杠‘\\\\‘,运行时打印字符串时会变成‘\\‘。
* 正斜杠,运行时打印字符串,打印结果和编译前一致。
*/
以上代码内容复制:
https://www.cnblogs.com/zj0208/p/8953303.html
以上是关于java程序问题?的主要内容,如果未能解决你的问题,请参考以下文章