dsa编程
⑴ 程序设计里面的断言是什么java里面的assert,assert.h又是什么
(一)首先明确:
java断言Assert是腊稿册jdk1.4引入的。
jvm 断言默认是关闭的。
断言是可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。
断言只适用于复杂的调试过程。
断言一般用于程序执轮宏行结果的判断,千万不要让断言处理业务流程。
(二)判断eclipse是否开启了断言,代码如下:
public class AssertTest {
public static void main(String[] args) {
boolean isOpen = false;
assert isOpen=true; //如果开启了断言,会将isOpen的值改为true
System.out.println(isOpen);//打印是否开启了断言
}
}
执行上面代码,如果打印 true说明已经启用了断言,如果为 false 则没有启用断言。
如果没有启用断言,则按按照下面方法开启断言。
(三)eclipse中开启断言
选择菜单:Run ---> Run... ---> 选择 Arguments 选项卡
在 VM arguments 文本框中输入: -ea 注意 中间没有空格,如果输入 -da 表示禁止断言。
然后关闭该窗口,提示保存,然后保存就开启了断言。如下图:
再次执行第二步操作,如果打印true,说明开启断言成功。
如果禁止断言,则按第二步操作中,删除 -ea 或者将 -ea 改为 -da 即可。
(四)断言使用
第 1 种使用方法:
public static void main(String[] args) {
boolean isOk = 1>2;
assert isOk;
System.out.println("程序正常");
}
因为 1>2 显然是错误的,所以执行结果抛出异常:Exception in thread "main" java.lang.AssertionError
如果把 1>2 改为 1<2 则程序能顺利执行,打印 “程序正常”
第 2 种使用方法:
public static void main(String[] args) {
boolean isOk = 1>2;
try{
assert isOk : "程序错误";
System.out.println("程序正常");
}catch(AssertionError err){
System.out.println(err.getMessage());
}
}
assert 后面跟个冒号表达式。如果冒号前为 true,则冒号后面的被忽略。
如果冒号前为false,则抛出AssertionError , 错误信息内容为冒号后面的内容,上面程序执行结果就是打印:"程序错误"
(五)有关断言的更多参数:
-ea java -ea 打开所有用户类的assertion
-da java -da 关闭所有用户类的assertion
-ea:<classname> java -ea:MyClass1 打开MyClass1的assertion
-da:<classname> java -da: MyClass1 关闭MyClass1的assertion
-ea:<packagename> java -ea:pkg1 打开pkg1包的assertion
-da:<packagename> java -da:pkg1 关闭pkg1包的assertion
-ea:... java -ea:... 打开缺省包(无名包)的assertion
-da:... java -da:... 关敬简闭缺省包(无名包)的assertion
-ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion
-da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion
-esa java -esa 打开系统类的assertion
-dsa java -dsa 关闭系统类的assertion
综合使用 java -dsa:MyClass1:pkg1 关闭MyClass1和pkg1包的assertion
方案1:AT89S52,DS12887时钟芯片,实践通过,运行稳定。自己根据程序连接引脚。
LCD显示的。
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDCOM XBYTE[0xcffc] //LCD写命令寄存器地址
#define LCDDATA XBYTE[0xcffd] //LCD写数据寄存器地址
#define LCDSTATUS XBYTE[0xcffe] //LCD读状态寄存器地址
#define DSA XBYTE[0x8f0a] //实时时钟寄存器A
#define DSB XBYTE[0x8f0b] //实时时钟寄存器B
#define DSC XBYTE[0x8f0c] //实时时钟寄存器C
#define DSD XBYTE[0x8f0d] //实时时钟寄存器D
#define SECOND XBYTE[0x8f05] //实时时钟分报警
sbit bflag=ACC^7;
uchar idata dt[7]={06,7,11,17,05,0,2}; //时间初值
uchar at[7]={9,8,7,4,2,0,6}; //年,月,日,时,分,秒,星期时标寄存器地址
uchar xdata *addr=0x8f00; //实时时钟片选地址
//函数的声明部分
//void delay1(uint x);
void lcd_busy();
void lcd_cmd(uchar lcd_cmd);
void lcd_data(uchar lcd_data);
void lcd_moveto(uchar position);
void init(void);
//void delay( unsigned int number );
void init_ds(void); /模链/实时时钟初始化
void WDS(void); //写时标函数
void RDS(void); //读时标函数
uchar ymd[10]={2,0,0,0,0,0,0,0,0,0}; //年月日
uchar hms[8]={0,0,0,0,0,0,0,0}; //时分秒
uchar weekday[3];
uchar code dis_buf[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x3a};
void init_ds(void) //实时时钟初始化
{
DSA=0x2f; //选时钟32.768kHz;中断周期500ms
ACC=DSC; //清中断请求唤大标志
ACC=DSD; //VRT=1;数据有效
DSB=0x7e; //中断允许,时标值为二进制码,24小旦链孙时制,芯片工作,方波输出允许
}
void WDS(void) //写时标函数
{
uchar i;
DSB=0x8e; //置SET位为1
DSB=0x8e;
for(i=0;i<7;i++)
{
*(addr+at[i])=dt[i]; //置时标初值
}
}
void RDS(void)
{
uchar i;
do
{
ACC=DSA;
}
while(bflag==1);
for(i=0;i<7;i++)
{
dt[i]=*(addr+at[i]);
}
}
void lcd_busy() //检测lcd忙程序
{
do
{
ACC=LCDSTATUS;
}
while(bflag==1); //当他忙的时候就不停的检测,直到空闲为止
}
void lcd_cmd(uchar lcd_cmd) //写命令函数
{
LCDCOM=lcd_cmd;
lcd_busy();
}
void lcd_data(uchar lcd_data) //写数据函数
{
LCDDATA=lcd_data;
lcd_busy();
}
void lcd_moveto(uchar position) //确定显示位置
{
uchar temp; //为显示位置对应的地址
if (position<16)
temp=(position+0x80-1); //为在第一行
else
temp=((position-16)+0xc0); //为第二行
lcd_cmd(temp);
}
void init(void) //lcd初始化
{
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x38); //置功能:2行,5*7字符
lcd_busy();
lcd_cmd(0x06); //置输入模式:地址增量,显示屏不移动
lcd_busy();
lcd_cmd(0x0c); //置显示开,不显示光标,光标不闪烁
lcd_busy();
lcd_cmd(0x01); //清显示
lcd_busy();
}
void shizhong(void) //时钟的每一位取出来
{
ymd[2]=dt[0]/10;
ymd[3]=dt[0]%10;
ymd[4]=10;
ymd[5]=dt[1]/10;
ymd[6]=dt[1]%10;
ymd[7]=10;
ymd[8]=dt[2]/10;
ymd[9]=dt[2]%10;
hms[0]=dt[3]/10;
hms[1]=dt[3]%10;
hms[2]=11;
hms[3]=dt[4]/10;
hms[4]=dt[4]%10;
hms[5]=11;
hms[6]=dt[5]/10;
hms[7]=dt[5]%10;
使用芯片:AT89S52,DS12887时钟芯片,实践通过,运行稳定。自己根据程序连接引脚。
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDCOM XBYTE[0xcffc] //LCD写命令寄存器地址
#define LCDDATA XBYTE[0xcffd] //LCD写数据寄存器地址
#define LCDSTATUS XBYTE[0xcffe] //LCD读状态寄存器地址
#define DSA XBYTE[0x8f0a] //实时时钟寄存器A
#define DSB XBYTE[0x8f0b] //实时时钟寄存器B
#define DSC XBYTE[0x8f0c] //实时时钟寄存器C
#define DSD XBYTE[0x8f0d] //实时时钟寄存器D
#define SECOND XBYTE[0x8f05] //实时时钟分报警
sbit bflag=ACC^7;
uchar idata dt[7]={06,7,11,17,05,0,2}; //时间初值
uchar at[7]={9,8,7,4,2,0,6}; //年,月,日,时,分,秒,星期时标寄存器地址
uchar xdata *addr=0x8f00; //实时时钟片选地址
//函数的声明部分
//void delay1(uint x);
void lcd_busy();
void lcd_cmd(uchar lcd_cmd);
void lcd_data(uchar lcd_data);
void lcd_moveto(uchar position);
void init(void);
//void delay( unsigned int number );
void init_ds(void); //实时时钟初始化
void WDS(void); //写时标函数
void RDS(void); //读时标函数
uchar ymd[10]={2,0,0,0,0,0,0,0,0,0}; //年月日
uchar hms[8]={0,0,0,0,0,0,0,0}; //时分秒
uchar weekday[3];
uchar code dis_buf[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x3a};
/*void delay1(uint x) //延时1ms程序
{
uchar j;
while(x--)
{
for(j=0;j<125;j++)
{;}
}
}
void delay( unsigned int number )
{
unsigned char i;
unsigned int u;
while(u<number)
{
for(i=0;i<=125;i++);
u++;
}
} */
void init_ds(void) //实时时钟初始化
{
DSA=0x2f; //选时钟32.768kHz;中断周期500ms
ACC=DSC; //清中断请求标志
ACC=DSD; //VRT=1;数据有效
DSB=0x7e; //中断允许,时标值为二进制码,24小时制,芯片工作,方波输出允许
}
void WDS(void) //写时标函数
{
uchar i;
DSB=0x8e; //置SET位为1
DSB=0x8e;
for(i=0;i<7;i++)
{
*(addr+at[i])=dt[i]; //置时标初值
}
}
void RDS(void)
{
uchar i;
do
{
ACC=DSA;
}
while(bflag==1);
for(i=0;i<7;i++)
{
dt[i]=*(addr+at[i]);
}
}
void lcd_busy() //检测lcd忙程序
{
do
{
ACC=LCDSTATUS;
}
while(bflag==1); //当他忙的时候就不停的检测,直到空闲为止
}
void lcd_cmd(uchar lcd_cmd) //写命令函数
{
LCDCOM=lcd_cmd;
lcd_busy();
}
void lcd_data(uchar lcd_data) //写数据函数
{
LCDDATA=lcd_data;
lcd_busy();
}
void lcd_moveto(uchar position) //确定显示位置
{
uchar temp; //为显示位置对应的地址
if (position<16)
temp=(position+0x80-1); //为在第一行
else
temp=((position-16)+0xc0); //为第二行
lcd_cmd(temp);
}
void init(void) //lcd初始化
{
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x38); //置功能:2行,5*7字符
lcd_busy();
lcd_cmd(0x06); //置输入模式:地址增量,显示屏不移动
lcd_busy();
lcd_cmd(0x0c); //置显示开,不显示光标,光标不闪烁
lcd_busy();
lcd_cmd(0x01); //清显示
lcd_busy();
}
void shizhong(void) //时钟的每一位取出来
{
ymd[2]=dt[0]/10;
ymd[3]=dt[0]%10;
ymd[4]=10;
ymd[5]=dt[1]/10;
ymd[6]=dt[1]%10;
ymd[7]=10;
ymd[8]=dt[2]/10;
ymd[9]=dt[2]%10;
hms[0]=dt[3]/10;
hms[1]=dt[3]%10;
hms[2]=11;
hms[3]=dt[4]/10;
hms[4]=dt[4]%10;
hms[5]=11;
hms[6]=dt[5]/10;
hms[7]=dt[5]%10;
switch(dt[6])
{
case 1:weekday[0]='m';weekday[1]='o';weekday[2]='n';break;
case 2:weekday[0]='t';weekday[1]='u';weekday[2]='e';break;
case 3:weekday[0]='w';weekday[1]='e';weekday[0]='n';break;
case 4:weekday[0]='t';weekday[1]='h';weekday[2]='u';break;
case 5:weekday[0]='f';weekday[1]='r';weekday[2]='i';break;
case 6:weekday[0]='s';weekday[1]='a';weekday[0]='t';break;
case 7:weekday[0]='s';weekday[1]='u';weekday[0]='n';break;
}
}
void main(void)
{
uchar i;
WDS();
init_ds();
init();
while(1)
{
RDS();
shizhong();
lcd_moveto(3);
for(i=0;i<10;i++)
{
lcd_data(dis_buf[ymd[i]]);
}
lcd_moveto(17);
for(i=0;i<8;i++)
{
lcd_data(dis_buf[hms[i]]);
}
lcd_data(0x20);
for(i=0;i<3;i++)
{
lcd_data(weekday[i]);
}
}
}
方案2:用内部的定时器做数字钟,通过数码管显示出来
使用芯片:AT89S52,DS12887时钟芯片,实践通过,运行稳定。自己根据程序连接引脚。
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define LCDCOM XBYTE[0xcffc] //LCD写命令寄存器地址
#define LCDDATA XBYTE[0xcffd] //LCD写数据寄存器地址
#define LCDSTATUS XBYTE[0xcffe] //LCD读状态寄存器地址
#define DSA XBYTE[0x8f0a] //实时时钟寄存器A
#define DSB XBYTE[0x8f0b] //实时时钟寄存器B
#define DSC XBYTE[0x8f0c] //实时时钟寄存器C
#define DSD XBYTE[0x8f0d] //实时时钟寄存器D
#define SECOND XBYTE[0x8f05] //实时时钟分报警
sbit bflag=ACC^7;
uchar idata dt[7]={06,7,11,17,05,0,2}; //时间初值
uchar at[7]={9,8,7,4,2,0,6}; //年,月,日,时,分,秒,星期时标寄存器地址
uchar xdata *addr=0x8f00; //实时时钟片选地址
//函数的声明部分
//void delay1(uint x);
void lcd_busy();
void lcd_cmd(uchar lcd_cmd);
void lcd_data(uchar lcd_data);
void lcd_moveto(uchar position);
void init(void);
//void delay( unsigned int number );
void init_ds(void); //实时时钟初始化
void WDS(void); //写时标函数
void RDS(void); //读时标函数
uchar ymd[10]={2,0,0,0,0,0,0,0,0,0}; //年月日
uchar hms[8]={0,0,0,0,0,0,0,0}; //时分秒
uchar weekday[3];
uchar code dis_buf[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e,0x3a};
/*void delay1(uint x) //延时1ms程序
{
uchar j;
while(x--)
{
for(j=0;j<125;j++)
{;}
}
}
void delay( unsigned int number )
{
unsigned char i;
unsigned int u;
while(u<number)
{
for(i=0;i<=125;i++);
u++;
}
} */
void init_ds(void) //实时时钟初始化
{
DSA=0x2f; //选时钟32.768kHz;中断周期500ms
ACC=DSC; //清中断请求标志
ACC=DSD; //VRT=1;数据有效
DSB=0x7e; //中断允许,时标值为二进制码,24小时制,芯片工作,方波输出允许
}
void WDS(void) //写时标函数
{
uchar i;
DSB=0x8e; //置SET位为1
DSB=0x8e;
for(i=0;i<7;i++)
{
*(addr+at[i])=dt[i]; //置时标初值
}
}
void RDS(void)
{
uchar i;
do
{
ACC=DSA;
}
while(bflag==1);
for(i=0;i<7;i++)
{
dt[i]=*(addr+at[i]);
}
}
void lcd_busy() //检测lcd忙程序
{
do
{
ACC=LCDSTATUS;
}
while(bflag==1); //当他忙的时候就不停的检测,直到空闲为止
}
void lcd_cmd(uchar lcd_cmd) //写命令函数
{
LCDCOM=lcd_cmd;
lcd_busy();
}
void lcd_data(uchar lcd_data) //写数据函数
{
LCDDATA=lcd_data;
lcd_busy();
}
void lcd_moveto(uchar position) //确定显示位置
{
uchar temp; //为显示位置对应的地址
if (position<16)
temp=(position+0x80-1); //为在第一行
else
temp=((position-16)+0xc0); //为第二行
lcd_cmd(temp);
}
void init(void) //lcd初始化
{
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x30); //置功能:1行,5*7字符
lcd_busy();
lcd_cmd(0x38); //置功能:2行,5*7字符
lcd_busy();
lcd_cmd(0x06); //置输入模式:地址增量,显示屏不移动
lcd_busy();
lcd_cmd(0x0c); //置显示开,不显示光标,光标不闪烁
lcd_busy();
lcd_cmd(0x01); //清显示
lcd_busy();
}
void shizhong(void) //时钟的每一位取出来
{
ymd[2]=dt[0]/10;
ymd[3]=dt[0]%10;
ymd[4]=10;
ymd[5]=dt[1]/10;
ymd[6]=dt[1]%10;
ymd[7]=10;
ymd[8]=dt[2]/10;
ymd[9]=dt[2]%10;
hms[0]=dt[3]/10;
hms[1]=dt[3]%10;
hms[2]=11;
hms[3]=dt[4]/10;
hms[4]=dt[4]%10;
hms[5]=11;
hms[6]=dt[5]/10;
hms[7]=dt[5]%10;
switch(dt[6])
{
case 1:weekday[0]='m';weekday[1]='o';weekday[2]='n';break;
case 2:weekday[0]='t';weekday[1]='u';weekday[2]='e';break;
case 3:weekday[0]='w';weekday[1]='e';weekday[0]='n';break;
case 4:weekday[0]='t';weekday[1]='h';weekday[2]='u';break;
case 5:weekday[0]='f';weekday[1]='r';weekday[2]='i';break;
case 6:weekday[0]='s';weekday[1]='a';weekday[0]='t';break;
case 7:weekday[0]='s';weekday[1]='u';weekday[0]='n';break;
}
}
void main(void)
{
uchar i;
WDS();
init_ds();
init();
while(1)
{
RDS();
shizhong();
lcd_moveto(3);
for(i=0;i<10;i++)
{
lcd_data(dis_buf[ymd[i]]);
}
lcd_moveto(17);
for(i=0;i<8;i++)
{
lcd_data(dis_buf[hms[i]]);
}
lcd_data(0x20);
for(i=0;i<3;i++)
{
lcd_data(weekday[i]);
}
}
}
再给一个:用内部的定时器做数字钟,通过数码管显示出来。
#include <regx52.h>
#define uchar unsigned char
#define uint unsigned int
uchar dispcode[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00}; //定义0到F的段选码
uchar dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}; //8位数码管的位选码
uchar dispbuf[8]={ 0,0,16,0,0,16,0,0}; //定义一个缓冲区
uchar dispbitcnt;
uchar second;
uchar minite;
uchar hour;
uint tcnt;
uchar mstcnt;
uchar i,j;
void main(void)
{
TMOD=0x02; //定时器0工作方式2
TH0=0x06; //每250us中断一次
TL0=0x06;
TR0=1; //启动定时器0
ET0=1; //定时器0中断允许
EA=1; //CPU开中断
while(1)
{
if(P0_0==0)
{ for(i=5;i>0;i--)
for(j=248;j>0;j--); //延时检查是否是P0_0被按下
if(P0_0==0) //如果被按下
{
second++; //秒就加1
if (second==60)
{
second=0;
}
dispbuf[0] =second%10; //存放秒的个位
dispbuf[1] =second/10; //存放秒的十位
while (P0_0==0); //等待P0_0变高
}
}
if(P0_1==0)
{ for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_1==0)
{
minite++;
if (minite==60)
{
minite=0;
}
dispbuf[3] =minite%10;
dispbuf[4] =minite/10;
while (P0_1==0);
} }
if(P0_2==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
dispbuf[6] =hour%10;
dispbuf[7] =hour/10;
while (P0_2==0);
} } } }
void t0 (void) interrupt 1 using 0 //定时器0中断服务程序
{
P1=dispcode[dispbuf[dispbitcnt]]; //为位选码
P3=dispbitcode[dispbitcnt]; //为段选码
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
tcnt++;
if(tcnt==4000) //此时有一秒钟了(4000*250us)
{
tcnt=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
dispbuf[0]=second%10;
dispbuf[1]=second/10;
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}
注:至于你说的蜂鸣器,这个很简单,在程序里设置一个标志位
sbit busy_louder 在硬件连接上采用一个放大器 与单片机的一个引脚相接 即时到60秒时,计时器清零,同时标志位置位,即可~
希望对你有帮助。
⑶ 汽车导航包编程翻译,谢谢
globalsettings
吧= 0
quitondoubleclick =不
x = 0
Y = 0
宽度= 800
高度= 480
安排=不
backgroundbitmap = \科帕奇1.bmp ..
startupanimation = noanimation
加速=是的
上面的=不
###############################################################
#
#顶行显示内容的liwh
#
###############################################################
#电池
# x = 720
# Y = 0
#宽度= 50
#高度= 25
# colorbattery = e4e4e4
# colorcritical =见
# colorlow = ff8000c
# colorhigh = 0fff00
###############################################################
#
#第一行图标的liwh
#
###############################################################
iconxpbutton
x = 558
Y = 410
命令= \ \ \ dsa.exe DSA SDMMC盘
sizenormal = 64
sizepushed = 64
scalealpha = 100
iconnormal = .. \ \ dsaok.ico图标
scalealpha = 60
iconpushed = .. \ \ dsaok.ico图标
# ---------------------------------
iconxpbutton
x = 622
Y = 410
命令= \ \ \ gpsapp.exe gpsapp SDMMC盘
sizenormal = 64
sizepushed = 64
scalealpha = 100
iconnormal = .. \ \媒体播放ICO图标
scalealpha = 60
iconpushed = .. \ \媒体播放ICO图标
# ---------------------------------
###############################################################
#
#第二行图标的liwh
#
###############################################################
# ---------------------------------
iconxpbutton
x = 686
Y = 410
命令= \ \ \ \ shnnavi.exe residentflash新科导航
sizenormal = 64
sizepushed = 64
scalealpha = 100
iconnormal = .. \ \新科ok.ico图标
scalealpha = 60
iconpushed = .. \ \新科ok.ico图标
# quitonexecute =是的
###############################################################
#
#底行图标的liwh
#
###############################################################
iconxpbutton
x = 2
Y = 416
newini = \导航\ navi3.ini ..
sizenormal = 48
sizepushed = 48
scalealpha = 100
iconnormal = .. \ \ 128.ico图标
scalealpha = 60
iconpushed = .. \ \ 128.ico图标
shutdownanimation = noanimation
# shutdownanimation =飞吧
# --------------------------------
iconxpbutton
x = 750
Y = 416
newini = \导航\ navi5.ini ..
sizenormal = 48
sizepushed = 48
scalealpha = 100
iconnormal = .. \ \ 128.ico图标
scalealpha = 60
iconpushed = .. \ \ 128.ico图标
shutdownanimation = noanimation
# shutdownanimation =飞吧
⑷ Java编程常见面试题目,要求正确答案
1.
final关键字,修饰类,方法,或者成员变量为最终的,使其不可被修改
finally可跟在try catch语句或者try语句后使用,表示这个方法一定会被执行
finalize通知垃圾回收机制回收被finalize标示的对象,但不保证马上就会执行
2.
可以继承也可以实现接口
由于构造方法必须与类型一致,所以其没有构造方法,继承有参构造方法必须调用父类的
直接new interface就是实现接口
3.
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。
Java内部类与C++嵌套类最大的不 同就在于是否有指向外部的引用上
4.
&&短路与,当两个条件,如a>b&&b>c,中a>b为假时b>c这个语句不会被执行而直接返回false
&两个条件都会被执行
5.
最重要区别是hashtable是线程安全的(同步)而hashMap不是。。
6.
Collection 层次结构中的根接口,而Collections是一个工具类,它包含有各种有关集合操作的静态方法
7.
系统测试的时候
8.
垃圾回收机制,因为java不能手动清理内存,而内存不清理系统资源会被耗尽,所以要有GC
9.
两个,String pool一个"xyz",堆里面一个String 对象
10.
11 -11
11.
s1+1,s1自动转换成int类型,其结果返回一个int,所以报错
12.
sleep在睡眠一段时间后会自己醒来,而wait不能,它必须别的线程唤醒它(notify或者notifyAll)
13.
java有标签但是没goto
14.
数组没length()方法只有length这个属性,String有
15.
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
16.
用equals ==只判断内存地址是否一致,而equals判断是否引用的是同一个对象
17.
IndexOutOfBoundsException 数组越界
NullPointerException 空指针异常
SystemException 系统异常
18.
error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
19.
List,Set是 Map不是
20.
abstract class可以有实现方法interface不能
21.
都不能
22.
都可以
23.
start()
24.
可以
25.
不可以,String 是final
26.
不能
27.
会,先执行finally里的,再return
28.
2<<3
29.
如果不重写方法是不可以,但是重写了就难说
30.
引用
31.
byte可以,因为其可以自动转换成int类型,其他都不可以
32.
public class Singleton
{
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
⑸ java编程一个AES加密txt文件的程序,其中AES解密文件的方法出错,求大神搭救
你是对文件内容加的密,应该和文件类型无关把。如果用的是
AES算法加的密的话,初始化的时候就会写到
keygen = KeyGenerator.getInstance("AES");
//生成密钥
deskey = keygen.generateKey();
//生成Cipher对象,指定其支持的DES算法
c = Cipher.getInstance("AES");
加密和解密的过程几乎是一样的,AES是对称加密方式,你看看加密和解密方法里的有没有写错的地方。
⑹ dsaa是什么计算机课
这个计算机的话,这个应该是一个讲编程的一个计算机课,然后这个课程也是非常简单的。
⑺ dsaa是什么课
dsaa是计算机知识中的一门编程课。
编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得昌虚到相应结果的过程。
为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。
在计算腊帆机系统中,一条机器指令规定了计算机系统的一个特定动作。一个系列的计算机在硬件轮迅雹设计制造时就用了若干指令规定了该系列计算机能够进行的基本操作,这些指令一起构成了该系列计算机的指令系统。
⑻ java的API中有哪些常用的包
Application Programming Interface 应用程序编程接口,Java的api就多的数不清了,平时编程用的都是API。
⑼ c语言编程题,急急急!!!!
/*
数入字符串:123asd
反转后:dsa321
Press any key to continue
*/
#include<stdio.h>
#defineMAXlen100
intlength(char*s){
intlen=0;
while(s[len])++len;
returnlen;
}
voidconvert(char*s){
inti,len=length(s);
charch;
for(i=0;i<len/2;++i){
ch=s[i];
s[i]=s[len-1-i];
s[len-1-i]=ch;
}
}
intmain(){
charstr[MAXlen];
printf("数入字符串:");
gets(str);
convert(str);
printf("反转后:%s ",str);
return0;
}