在初次使用java时,往往我们对最基本的java类会忽略对其内部基本的实现的了解,也往往不屑于了解其内部实现机制,以为它们本来就是这样子。而其实贯穿java的整个过程,所有上层的使用,都是源于对底层的扩展,所以要真正去了解这门语言,就必须得从其底层开始认真去了解它。而要深入了解,就需要更多去关注其内部的实现是怎样子的。
在使用IDE的过程中,我们经常会需要能在IDE中就可以便捷的去查看java的源码,但若没有做相关设置,一般在IDE是查看不了java源码的,此次提供在eclipse中设置查看java源码的方式。
设置步骤如下:
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"
2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项:“c:program filesjavajre_1.8lib
t.jar”
点 左边的“+” 号展开它,
4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件(该文件在JDK安装目录的根目录下)
5.一路点"ok",设置完成
设置完成后,按住ctrl键再用鼠标单击某一个jdk方法名或类名,便能看到该方法的源代码了。此外按F3也能实现。
PS:rt.jar包含了jdk的基础类库,也就是你在java
doc里面看到的所有的类的class文件;src.zip文件里面放着的正是基本类所对应的源文件(即*.java格式的文件);同理,我们可以去网上下载各个JAVA开源框架所对应的源代码包,比如spring-src.zip,然后再按照上面的设置步骤设置,就可以查看到对应的JAVA框架源代码了。
转自:网页链接
⑵ Java源代码
packagecom.;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Scanner;
importstaticjava.lang.System.out;
importstaticjava.lang.System.in;
/**
*Createdbytracyon2017/10/11.
*/
publicclassLR{
staticint[]numbers;
staticList<Domain>domains=newArrayList<>();
publicstaticvoidmain(String...asd){
intm,n;
out.print("请输入数字个数N:");
n=input(1,Integer.MAX_VALUE);
out.print("请输入计算行数M:");
m=input(1,10000);
out.println("请输入"+n+"个数字,每个数字介于1跟1000000之间,用空格隔开:");
numbers=inputNumbers(n);
for(inti=0;i<m;i++){
domains.add(inputDomain(n,i+1));
}
for(Domaindomain:domains){
domain.output();
}
}
/**
*输入一个介于min跟max之间的整数
*@parammin
*@parammax
*@return
*/
privatestaticintinput(intmin,intmax){
Scannerscanner=newScanner(in);
try{
inti=scanner.nextInt();
if(i<min||i>max){
out.print("输入数字大小不符合要求,请重新输入”");
returninput(min,max);
}
returni;
}catch(Exceptione){
out.print("您输入的不是数字,请重新输入“");
returninput(min,max);
}
}
/**
*输入N个介于1到1000000之间的整数
*@paramn
*@return
*/
privatestaticint[]inputNumbers(intn){
Scannerscanner=newScanner(in);
StringnumStr=scanner.nextLine();
String[]nums=numStr.trim().split("\s+");
if(nums.length!=n){
out.println("输入数字个数不对,请重新输入:");
returninputNumbers(n);
}
int[]numbers=newint[n];
for(inti=0;i<n;i++){
try{
intnumber=Integer.valueOf(nums[i]);
if(number<1||number>10000){
out.print("输入数字大小不符合要求,请重新输入”");
numbers[i]=input(1,1000000);
}else{
numbers[i]=number;
}
}catch(NumberFormatExceptione){
out.print(String.format("您输入的%s不是数字,请重新输入:",nums[i]));
numbers[i]=input(1,1000000);
}
}
returnnumbers;
}
(intn,intindex){
out.println("请输入第"+index+"行的2个数字L,R(1<=L<=R<=%d)用空格隔开:");
Scannerscanner=newScanner(in);
StringnumStr=scanner.nextLine();
String[]nums=numStr.trim().split("\s+");
if(nums.length!=2){
out.print(String.format("输入数字个数不对,请重新输入!",n));
returninputDomain(n,index);
}
Stringls=nums[0];
Stringrs=nums[1];
try{
intl=Integer.valueOf(ls);
intr=Integer.valueOf(rs);
if(l<1||r<l||r>n){
out.print(String.format("输入数字大小不符合,请重新输入!",n));
returninputDomain(n,index);
}
returnnewDomain(l,r,index);
}catch(NumberFormatExceptione){
out.println(String.format("输入数字格式错误,请重新输入2个数字L,R(1<=L<=R<=%d)用空格隔开:",n));
returninputDomain(n,index);
}
}
privatestaticclassDomain{
intl;
intr;
intindex;
Domain(intl,intr,intindex){
this.l=l;
this.r=r;
this.index=index;
}
voidoutput(){
intresult=0;
for(inti=l-1;i<r;i++){
result+=numbers[i];
}
out.println(String.format("第%d行:第%d到第%d个数之和为:%d",index,l,r,result));
}
}
}
⑶ 求JAVA源代码,要有注释,所有财富都在下面了
每天有时间的话 , 会回答一两个图形界面的问题, 但是分数最好还是高点才有兴趣.
具体代码和详细的注释如下
员工类
publicclassEmp{
privateintnum;//工号
privateStringname;//姓名
privatedoublebasicPay;//基本工资
privatedoublemeritPay;//绩效工资
publicEmp(){//无参数构造器
}
publicEmp(intnum,Stringname,doublebasicPay,doublemeritPay){//有参数构造器
super();
this.num=num;
this.name=name;
this.basicPay=basicPay;
this.meritPay=meritPay;
}
//重写Object的toString方法
publicStringtoString(){
return"工号:"+num+" 姓名:"+name+" 基本工资:"+basicPay+" 绩效工资"+meritPay;
}
//下面是属性的set和get
publicintgetNum(){
returnnum;
}
publicvoidsetNum(intnum){
this.num=num;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetBasicPay(){
returnbasicPay;
}
publicvoidsetBasicPay(doublebasicPay){
this.basicPay=basicPay;
}
publicdoublegetMeritPay(){
returnmeritPay;
}
publicvoidsetMeritPay(doublemeritPay){
this.meritPay=meritPay;
}
}
输入界面类
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.swing.*;
{
JTextFieldjtfnum,jtfname,jtfbp,jtfmp;
JButtonjbwtf;
publicEmpFrome(){
JLabeljl1=newJLabel("工号");
jtfnum=newJTextField(8);
add(jl1);
add(jtfnum);
JLabeljl2=newJLabel("姓名");
jtfname=newJTextField(8);
add(jl2);
add(jtfname);
JLabeljl3=newJLabel("基本工资");
jtfbp=newJTextField(8);
add(jl3);
add(jtfbp);
JLabeljl4=newJLabel("绩效工资");
jtfmp=newJTextField(8);
add(jl4);
add(jtfmp);
JLabeljl5=newJLabel();
jbwtf=newJButton("写入文件");
jbwtf.addActionListener(this);
add(jl5);
add(jbwtf);
setLayout(newGridLayout(5,2));
setTitle("员工信息录入");
setSize(290,230);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
Stringcmd=e.getActionCommand();
if(cmd.equals("写入文件")){
try{
//获取数据
intnum=Integer.parseInt(jtfnum.getText().trim());
Stringname=jtfname.getText().trim();
doublebp=Double.parseDouble(jtfbp.getText().trim());
doublemp=Double.parseDouble(jtfmp.getText().trim());
Empemp=newEmp(num,name,bp,mp);
writeToFile(emp);
JOptionPane.showMessageDialog(this,"录入成功");//提示成功
//清空文本框
jtfnum.setText("");
jtfname.setText("");
jtfbp.setText("");
jtfmp.setText("");
}catch(Exceptionex){
//当输入不符合规范时,提示错误
JOptionPane.showMessageDialog(this,"请输入正确的数据: 工号整型,工资浮点型","录入错误",JOptionPane.ERROR_MESSAGE);
}
}
}
//定义的文件路径
finalstaticStringFILE_PATH="employee.dat";
publicvoidwriteToFile(Empemp){//IO操作,追加写入
BufferedWriterbw=null;
try{
bw=newBufferedWriter(newFileWriter(newFile(FILE_PATH),true));//为true表示追加
bw.write(emp.toString());//写入员工信息
bw.newLine();//换行
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(bw!=null){
try{
bw.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
测试类
publicclassEmpTest{
publicstaticvoidmain(String[]args){
newEmpFrome();
}
}
测试效果
⑷ 如何在Eclipse中查看JDK以及Java框架的源码
在Eclipse中查看JDK类库的源代码
设置:
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"
2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE)
3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar” 点 左边的“+” 号展开它
4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件
5.一路点"ok",结束。
dt.jar是关于运行环境的类库,主要是swing的包 tools.jar是关于一些工具的类库 rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的class文件
⑸ Java哪些开源框架的源代码值得一读
Spring
spring做为现在最流行java web框架,可以作为任何一个项目的基础框架,值得仔细研究学习
⑹ 怎样用JAVA写出逆波兰表达式求值部分的源代码(提供代码框架)
下面的代码是用来计算表达式的,看看是不是你要的
public class OPNode {
char op;// 运算符号
int level;// 优先级
//设置优先级
public OPNode(String op) {
this.op = op.charAt(0);
if (op.equals("+") || op.equals("-")) {
this.level = 1;
} else if (op.equals("*") || op.equals("/")) {
this.level = 2;
} else if (op.equals("(")) {
this.level = -3;
} else {
this.level = -1;
}
}
}
//主类
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OPText {
public static void main(String[] args) {
String expression = "2+2+(8-2)/3";// 要计算的表达式
List list = new LinkedList();
//正则式
Pattern entryOfExpression = Pattern
.compile("[0-9]+(\\.[0-9]+)?|\\(|\\)|\\+|-|\\*|/");
Deque stack = new LinkedList();//栈
Matcher m = entryOfExpression.matcher(expression);
while (m.find()) {
//提取语素
String nodeString = expression.substring(m.start(), m.end());
if (nodeString.matches("[0-9].*")) {
list.add(Double.valueOf(nodeString));//如果是数字直接送入列表
} else {
OPNode opn = new OPNode(nodeString);//如果是运算符
int peekLevel = (stack.peek() == null) ? 0 : ((OPNode) stack
.peek()).level;
if (opn.level >=peekLevel) {
stack.push(opn);//新的运算符比旧的优先级别高则入栈
} else {
if (opn.level == -1) {
OPNode temp = (OPNode) stack.pop();
while (temp.level != -3) {//如果为"("则一直出栈一直到")"
list.add(temp);
System.out.println(nodeString);
temp = (OPNode) stack.pop();
}
} else if (opn.level == -3) {
stack.push(opn);
} else {//如果新运算符比栈顶运算符底则一直出栈
OPNode temp = (OPNode) stack.pop();
while (temp.level > opn.level) {
list.add(temp);
if (stack.isEmpty()) {
break;
}
temp = (OPNode) stack.pop();
}
stack.push(opn);
}
}
}
}
OPNode temp = null;
while (!stack.isEmpty()) {
temp = (OPNode) stack.pop();
list.add(temp);
}//后续表达式计算
stack.clear();
for (Object o : list) {
if (o instanceof Double) {
stack.push(o);//为数字入栈
} else {
double op2 = ((Double) stack.pop()).doubleValue();
double op1 = ((Double) stack.pop()).doubleValue();
switch (((OPNode) o).op) {
case '+':
stack.push(op1 + op2);
break;
case '-':
stack.push(op1 - op2);
break;
case '*':
stack.push(op1 * op2);
break;
case '/':
stack.push(op1 / op2);
break;
}
}
}
System.out.println("结果为:" + stack.pop());
}
}
呃,太晚了,没心思去改了
明天再说