java程序求解释?(10行)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序求解释?(10行)相关的知识,希望对你有一定的参考价值。
import java.util.*;
public class TimerTest
public static void main(String[] args)
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
static class MyTask extends TimerTask
public void run()
// TODO Auto-generated method stub
System.out.println("________");
为什么“static class MyTask extends TimerTask”中Mytask类是静态(static)的?
静态类只初始化1次,就是只在第一次加载时初始化。
静态方法是属于类,而不属于某个具体的对象。
记住“静态方法只能访问静态方法”,Main()主方法是静态的,Mytask要被main 调用,所以,。,
用static修饰的类或方法,都是常用的,为了节省资源,只在第一次加载时进行初始化。如果是非静态类,当new出的对象被gc回收后,这个类下次还是需要初始化。
---------------------------------------------------
1 static 修饰实例变量
本身实例变量依托于对象才能存在,只有有了对象才能访问实例变量。然而static修饰的属性代表它在内存当中只有一份值,而且并不依托任何一个对象存在它是这个类所有对象和这个类所共享的一块空间。
2 static 修饰方法
本身成员方法只有确认了对象才能调用,但是静态方法不用对象也可以直接通过 类名+方法名调用
3 static 修饰代码块
用于初始化静态变量,于类第一次被加载的时候执行只执行一次.
参考资料:http://zhidao.baidu.com/question/80656460.html?si=4&wtp=wk
参考技术A Timer有3个类,你用的是util包中的Timer。个人感觉,swing中的Timer最好用。
util包中的Timer,需要一个执行器。触发是它自己触发的,执行是由执行器执行的。
你这样写程序,触发器是静态内部类。本来只一个实例的,你现在的程序倒也能实现。不过。。为什么不做为外部类,创建一个实例以调用schedule呢? 参考技术B 这里使用的是静态内部类的例子。使用static内部类,这时只是为了把类MyTask隐藏在类TimerTest内部,并且不需要内部类MyTask引用外围类TimerTest对象。 参考技术C 也可以不是静态的啊!
求解释一个C语言程序
题目是:读取正整数m和n(假定它们满足m>=n>0),显示所有从集合1,2,…,m中取出的n个数的组合。例如,若m=3,n=2,则可以按以下形式之一显示:
3 2
3 1
2 1
#include<stdio.h>
#include<string.h>
int ans[10];
int m, n;
void DFS(int d, int p)
int i;
if(d == n)
for(i = 0; i < n; i++)
printf("%d ", ans[i]);
printf("\n");
return ;
for(i = p+1; i <= m; i++)
ans[d] = i;
DFS(d+1, i);
int main()
scanf("%d %d", &m, &n);
DFS(0, 0);
return 0;
这个递归实在是看不懂,求解释思路。多加点注解,以及解释一下各个字母以及关键数字的含义好吗?
for(i = p+1; i <= m; i++)
ans[d] = i;
DFS(d+1, i);
主要就是这里不懂。还有DFS的两个参数是什么意思。
#include <string.h>
int ans[10];
int m, n;
void DFS(int d, int p) // 需要第d个数,按顺序 从 p + 1 到 m 中选择
int i;
if (d == n) // 如果已选出 n 个数,就输出
for (i = 0; i < n; i++)
printf("%d ", ans[i]);
printf("\\n");
return;
for (i = p + 1; i <= m; i++)
ans[d] = i; // 选择 第 d 个数为 p +1 到 m , 假设选择了 x
DFS(d + 1, i); // 继续选择 第 d + 1 个数, 则选择范围是 x + 1 到 m
int main()
scanf("%d %d", &m, &n); // 输入两个数 m, n
DFS(0, 0); // 第一个是 选出个数,
return 0;
解释下哦:
比如 m = 3, n = 2;
首先调用 DFS(0, 0) 需要第 0 个数,选择范围从 0 + 1 到 m(3),
然后进入 for 循环 i = 0 + 1, 因此第一个数选择1,
继续 调用 DFS(1, 1) 需要第 1 个数,选择范围从 1 + 1 到 m(3),
然后进入新函数的循环 i = 1+1,因此第二个数选择 2 ,
继续 调用 DFS(2, 2) 需要第 2 个数,由于 2 等于n, 表明选择完成,输出 ( 1, 2)
退出函数DFS(2,2) 退回到 DFS(1, 1) 的下一个 for 循环:
循环 i = 2+1,因此第二个数选择 3 ,
继续 调用 DFS(2, 3) 需要第 2 个数,由于 2 等于n, 表明选择完成,输出 ( 1,3)
退出函数DFS(2,3) 退回到 DFS(1, 1) 的下一个 for 循换,循环条件不满足,DFS(1, 1) 执行结束返回到 DFS(0, 0) 继续执行 循环:
i = 1 + 1, 因此第一个数选择2,
继续 调用 DFS(1, 2) 需要第 1 个数,选择范围从 2 + 1 到 m(3),
然后进入新函数的循环 i = 2+1,因此第二个数选择 3 ,
继续 调用 DFS(2, 3) 需要第 2 个数,由于 2 等于n, 表明选择完成,输出 ( 2, 3)
退出函数DFS(2,3) 退回到 DFS(1, 2) 的下一个 for 循环: 循环条件不满足,DFS(1, 1) 执行结束返回到 DFS(0, 0) 继续执行
i = 2 + 1因此第一个数选择3,
继续 调用 DFS(1, 3) 需要第 1 个数,选择范围从 3 + 1 到 m(3), 很明显这里的循环将不能执行,因为循环条件是假的,因此退出 DFS(1, 3) 返回到 DFS(0, 0) 继续执行 循环:循环条件不满足。返回到 主程序 main
执行结束。
参考技术A escsew_'_beppeps:# 参考技术B 第一个main()
inta=1,b=4,c=2;
//给整数a,b,c赋值
float
x=10.5,y=2.0,z;
//给小数x,y赋值,申明小数z
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
//计算z的算式:sqrt表示开根号,要加#include(stdio.h)才能用,(double)表示把y强制类型转换成double型,*表示乘法,/表示除法
printf(“%f\n".z);//输出浮点数z
第二个
m=(k+=i*=k);
赋值语句结合顺序是从右往左结合:最右边i*=k
是i=i*k的简写,计算结果i=2*2=4;同理,k+=i是k=k+i;计算结果k=2+4=6最后m=k;所以m=6;
以上是关于java程序求解释?(10行)的主要内容,如果未能解决你的问题,请参考以下文章
(c语言题目没看懂什么意思,求解释)编一个程序,统计从键盘输入的命令行中,第二个参数所包含的英文字符
java实现下载文件,如果文件名为中文,下载后内容为空,求解释!