- 相干保举
初学者JAVA进修入门
初学者JAVA进修入门信任会对老手的你很有赞助哦~一路来看看吧!更多内容请存眷应届毕业生测验网!
1 甚么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎样回事?
答:Java是一种通用的,并发的,强范例的,面向东西的编程说话(摘自Java标准第二版) JDK是Sun公司散发的收费Java开辟东西,正式称号为J2SDK(Java2 Softw
are Develop Kit)。
2 甚么是JRE/J2RE?
答:J2RE是Java2 Runtime Environment,即Java运转环境,偶然简称JRE。
假设你只要要运转Java法式或Applet,下载并装置它便可。
假设你要自行开辟Java软件,请下载JDK。在JDK中附带有J2RE。
重视由于Microsoft对Java的撑持不完整,请不要利用IE自带的假造机来运转Applet,务
必安
装一个J2RE或JDK。
3 进修Java用甚么东西比拟好?
答:作者倡议起首利用JDK 文本编辑器,这有助你懂得以下几个根本观点:path,class
path
,package
并熟习根基号令:javac和java。并且下载和你的JDK版本分歧的API赞助。
假设你不必定类或函数的用法,请先查阅API而不是发贴乞助。
当你熟习Java今后,你能够或许或许斟酌换一个IDE。良多人保举JCreator,现实上JCreator的功效还 是很弱的。
作者保举eclipse,下载网址//www.eclipse.org ;。因eclispe是收费的.
4 进修Java有哪些好的参考书?
答:作者起首保举Thinking in Java,中文名《Java编程思惟》,有中文版。
该书第一章先容了良多面向东西的编程思惟,作为老手该当当真浏览。
除此之外,O′relly出书社和Wrox出书社的书也不错。作者本身不喜好大陆作者的书。
或许你感觉英文太难,可是网上大大都材料都是英文的。别的,你须要常常查阅API,而
那也
是英文的。
5 Java和C 哪一个更好?
答:这个题目是一个很不得当的题目。你该当问:Java和C 哪一个更合用于我的名目?
假设你不须要跨平台,不须要散布式,要强调法式的运转速率,C 更加合用。
反之?你该当斟酌Java。
6 甚么是J2SE/J2EE/J2ME?
答:J2SE便是普通的Java。
J2ME是针对嵌入式装备的,比方Java手机,它有本身的SDK。而J2EE利用J2SE的SDK。
J2EE标准更多的是对J2EE办事器的请求和开辟职员的束缚。概况见后继《J2EE FAQ》。
二、号令篇
7 我写了第一个Java法式,该当若何编译/运转?
答:起首请将法式保管为xxx.java文件,
而后在dos窗口下利用javac xxx.java号令,你会发明该目次下多了一个xxx.class文件,再利用java xxx号令,你的java法式就起头运转了。
8 我照你说的做了,可是呈现甚么"′javac′ 不是内部或内部号令,也不是可运转的程
序或
批处置文件。"。
答:你碰着了path题目。操纵体系在必然的规模(path)内搜刮javac.exe,可是没能找到。
请编辑你的操纵体系环境变量,新增一个JAVA_HOME变量,设为你JDK的装置目次,
再编辑Path变量,加上一项 %JAVA_HOME%in。
而后关掉并新开一个dos窗口,你就能够或许或许利用javac和java号令了。
9 环境变量怎样设置?
答:请向身旁会设的人征询。
10 javac xxx.java顺遂经由进程了,可是java xxx的时辰显现甚么"NoClassDefFoundErro
r"?br>?br> 答:你碰着了classpath题目。java号令在必然的规模(classpath)内搜刮你要用的class文件,可是未能找到。
起首请确认你不错敲成java xxx.class,
其次,查抄你的CLASSPATH环境变量,假设你设置了该变量又不包罗.(代表今后目次
)的?br> 睿?br> 你就会碰着这个题目。请在你的CLASSPATH环境变量中加入一项. 。另
外参见15。
11 我在java xxx的时辰显现"Exception in thread "main" java.lang.NoSuchMethod
Erro
r: main"。
答:起首,在你的法式中每一个java文件有且只能有一个public类,
这个类的类名必须和文件名的巨细写完整一样。
其次,在你要运转的类中有且只能有一个public static void main(String[] args)方
法,
这个方式便是你的主法式。
12 package是甚么意义?怎样用?
答:为了独一标识每一个类并分组,java利用了package的观点。
每一个类都有一个全名,比方String的全名是java.lang.String,此中java.lang是包名,
Stri
ng是短名。
如许,假设你也界说了String,你能够或许或许把它放在mypackage中,
经由进程利用全名mypackage.String和java.lang.String来辨别这两个类。
同时,将逻辑上相干的类放在统一个包中,能够或许或许使法式布局更加清晰。
你要做的便是在java文件开首加一行"package mypackage;"。
重视包不嵌套或包罗干系,A包和A.B包对java号令来讲是并列的两个包(固然开辟者
能够或许或许?br> 凳景?含干系)??br>
13 我不申明任何package会怎样样?
答:你的类被以为放在默许包中。这时辰全名和短名是分歧的。
14 在一个类中怎样利用其余类?
答:假设你利用java.lang包中的类,不必做任何事。
假设你利用其余包中的类,利用import package1.class1; 或 import package2.*;
这里.*表现引入这个包中的统统类。而后在法式中你能够或许或许利用其余类的短名。
假设短名有抵触,利用全名来辨别。
15 我用了package的时辰显现"NoClassDefFoundError",可是我把统统package去掉的时
候能
普通运转。
答:将你的java文件按包名寄存。
比方你的任务目次是/work,你的类是package1.class1,那末将它寄存为/work/package
1/cl
ass1.java。
假设不申明包,那末间接放在/work下。
在/work下履行javac package1/class1.java,再履行java package1.class1,你会发明
统统
普通。
别的,你能够或许或许斟酌起头利用IDE。
16 我想把java编译成exe文件,该怎样做?
答:JDK只能将java源文件编译为class文件。
class文件是一种跨平台的字节码,必须依托平台相干的JRE来运转。Java以此来完成跨
平台?br> 浴?br> 有些开辟东西能够或许或许将java文件编译为exe文件。作者否决这类做法,因
为如许就打消了跨平台性。
假设你确信你的软件只在Windows平台上运转,你能够或许或许斟酌利用C /C#来编程。
17 我在编译的时辰碰着甚么"deprecated API",是甚么意义?
答:所谓deprecated是指已?时,可是为了向前兼容起见依然保留的方式??br> 这些方
法能够或许或许会在今后打消撑持。你该当改用较新的方式。
普通在API里面会申明你该当用甚么方式来取代之。
三、I/O篇
18 我怎样给java法式加启动参数,就像dir /p/w那样?
答:还记得public static void main(String[] args)吗?这里的args便是你的启动参数。
在运转时你输出java package1.class1 -arg1 -arg2,args中就会有两个String,一个是arg1,别的一个是arg2。
19 我怎样从键盘输出一个int/double/字符串?
答:java的I/O操纵比C 要庞杂一点。假设要从键盘输出,样例代码以下:
BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) )
;
String s = cin.readLine();
如许你就取得了一个字符串,假设你须要数字的话再加上:
int n = Integer.parseInt( s ); 或 double d = Double.parseDouble( s );
20 我怎样输出一个int/double/字符串?
答:在法式起头写:
PrintWriter cout = new PrintWriter( System.out );
须要时写:
cout.print(n); 或cout.println("hello")等等。
21 我发明有些书上间接用System.in和System.out输出输出,比你要简略很多。
答:java利用unicode,是双字节。而System.in和System.out是单字节的stream。
假设你要输出输出双字节笔墨比方中文,请利用作者的做法。
22 我怎样从文件输出一个int/double/字符串?
答:近似于从键盘输出,只不过换成
BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) );
PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) );
别的假设你还没下载API,请起头下载并浏览java.io包中的内容。
23 我想读写文件的指定地位,该怎样办?
答:你必定不当真看API。java.io.RandomAccessFile能够或许或许知足你的须要。
24 怎样鉴定要读的文件已到了绝顶?
答:你必定不当真看API。在Reaer的read方式中明白申明前往-1表现流的开头。
四、 关头字篇
25 java里面怎样界说宏?
答:java不撑持宏,由于宏代换不能保障范例宁静。
假设你须要界说常量,能够或许或许将它界说为某个类的static final成员。参见26和30。
26 java里面没法用const。
答:你能够或许或许用final关头字。比方 final int m = 9。被申明为final的变量不能被再次
赋值?br> ?br> final也能够或许或许用于申明方式或类,被申明为final的方式或类不能被持续
。
重视const是java的保留字以备扩大。
27 java里面也不能用goto。
答:乃至在面向进程的说话中你也能够或许或许完整不必goto。请查抄你的法式流程是不是是公道。
假设你须要从多层轮回中敏捷跳出,java增强了(和C 比拟)break和continue的功效
,支?br> ?label。
比方:
outer :
while( ... )
{
inner :
for( ... )
{
... break inner; ...
... continue outer; ...
}
}
和const一样,goto也是java的保留字以备扩大。
28 java里面能不能重载操纵符?
答:不能。String的 号是独一一个内置的重载操纵符。你能够或许或许经由进程界说接口和方式来实
现类
似功效。
29 我new了一个东西,可是没法delete掉它。
答:java有主动内存收受接管机制,即所谓Garbarge Collector。你再也不必担忧指针毛病,内?br> 嬉绯隽恕?br>
30 我想晓得为甚么main方式必须被申明为public static?
答:申明为public是为了这个方式能够或许或许被内部挪用,概况见面向东西篇37。
static是为了将某个成员变量/方式联系干系到类(class)而非实例(instance)。
你不须要建立一个东西就能够或许或许间接利用这个类的static成员,
在A类中挪用B类的static成员能够或许或许利用B.staticMember的写法。
重视一个类的static成员变量是独一的,被统统该类东西所同享的。
31 throw和throws有甚么差别?
答:throws用于申明一个方式会抛出哪些非常。而throw是在方式体中现实履行抛出非常
的举措。
假设你在方式中throw一个非常,却不在方式申明中申明之,编译器会报错。
重视Error和RuntimeException的子类是破例,无需不凡申明。
32 甚么是非常?
答:非常最早在Ada说话中引入,用于在法式中静态处置毛病并规复。
你能够或许或许在方式中阻挡底层非常并处置之,也能够或许或许抛给更高层的模块去处置。
你也能够或许或许抛出本身的非常唆使产生了某些不普通环境。罕见的阻挡处置代码以下:
try
{
...... //以下是能够或许或许产生非常的代码
...... //非常被抛出,履行流程间断并转向阻挡代码。
......
}
catch(Exception1 e) //假设Exception1是Exception2的子类并要做不凡处置,应排在
后面
{
//产生Exception1时被该段阻挡
}
catch(Exception2 e)
{
//产生Exception2时被该段阻挡
}
finally //这是可选的
{
//不管非常是不是是产生,均履行此段代码
}
33 final和finally有甚么差别?
答:final请见26。finally用于非常机制,参见32。
五、 面向东西篇
34 extends和implements有甚么差别?
答:extends用于(单)持续一个类(class),而implements用于完成一个接口(inter
face)。
interface的引入是为了部分地供给多持续的功效。
在interface中只要申明方式头,而将方式体留给完成的class来做。
这些完成的class的实例完整能够或许或许看成interface的实例来看待。
风趣的是在interface之间也能够或许或许申明为extends(单持续)的干系。
35 java怎样完成多持续?
答:java不撑持显式的多持续。
由于在显式多持续的说话比方c 中,会呈现子类自愿申明先人虚基类机关函数的题目,
而这是违背面向东西的封装性准绳的。
java供给了interface和implements关头字来部分地完成多持续。参见34。
36 abstract是甚么?
答:被申明为abstract的方式无需给出方式体,留给子类来完成。
而假设一个类中有abstract方式,那末这个类也必须申明为abstract。
被申明为abstract的类没法实例化,虽然它能够或许或许界说机关方式供子类利用。
37 public,protected,private有甚么差别?
答:这些关头字用于申明类和成员的可见性。
public成员能够或许或许被任何类拜候,
protected成员限于本身和子类拜候,
private成员限于本身拜候。
Java还供给了第四种的默许可见性,当不任何public,protected,private润色时,成
员是?br> ?一包内可见??br>
类能够或许或许用public或默许来润色。
38 Override和Overload有甚么差别?
答:Override是指父类和子类之间方式的持续干系,这些方式有着不异的称号和参数范例。
Overload是指统一个类中差别方式(能够或许或许在子类也能够或许或许在父类中界说)间的干系,
这些方式有着不异的称号和差别的参数范例。
39 我持续了一个方式,但此刻我想挪用在父类中界说的方式。
答:用super.xxx()能够或许或许在子类中挪用父类方式。
40 我想在子类的机关方式中挪用父类的机关方式,该怎样办?
答:在子类机关方式的第一行挪用super(...)便可。
41 我在统一个类中界说了好几个机关方式并且想在一个机关方式中挪用别的一个。
答:在机关方式第一行挪用this(...)。
42 我不界说机关方式会怎样样?
答:主动取得一个无参数的机关方式。
43 我挪用无参数的机关方式失利了。
答:假设你最少界说了一个机关方式,就不再有主动供给的无参数的机关方式了。
你须要显式界说一个无参数的机关方式。
44 我该怎样界说近似于C 中的析构方式(destructor)?
答:供给一个void finalize()方式。在Garbarge Collector收受接管该东西时会挪用该方式。
重视现实上你很难鉴定一个东西会在甚么时辰被收受接管。作者从未感应须要供给该方式。
45 我想将一个父类东西转换成一个子类东西该怎样做?
答:强迫范例转换。如
public void meth(A a)
{
B b = (B)a;
}
假设a现实上并不是B的实例,会抛出ClassCastException。以是请确保a确切是B的实例
。
46 实在我不必定a是不是是B的实例,能不能分环境处置?
答:能够或许或许利用instanceof操纵符。比方
if( a instanceof B )
{
B b = (B)a;
}
else
{
...
}
47 我在方式里点窜了一个东西的值,可是加入方式后我发明这个东西的值没变!
答:很能够或许或许你把传入参数重赋了一个新东西,比方以下代码就会形成这类毛病:
public void fun1(A a) //a是部分参数,指向了一个内在东西。
{
a = new A(); //a指向了一个新东西,和内在东西脱钩了。假设你要让a作为传
出变
量,不要写这一句。
a.setAttr(attr);//点窜了新东西的值,内在东西不被点窜。
}
根基范例也会呈现这类环境。比方:
public void fun2(int a)
{
a = 10;//只感化于本方式,里面的变量不会变更。
}
六、java.util篇
48 java能静态分派数组吗?
答:能够或许或许。比方int n = 3; Language[] myLanguages = new Language[n];
49 我怎样晓得数组的长度?
答:用length属性。如上例中的 myLanguages.length 就为 3。
50 我还想让数组的长度能主动转变,能够或许或许增添/删除元素。
答:用挨次表--java.util.List接口。
你能够或许或许挑选用ArrayList或是LinkedList,前者是数组完成,后者是链表完成。
比方: List list = new ArrayList(); 或是 List list = new LinkedList(); 。
51 甚么是链表?为甚么要有两种完成?
答:请补习数据布局。
52 我想用行列/栈。
答:用java.util.LinkedList。
53 我但愿不要有反复的元素。
答:用调集--java.util.Set接口。比方:Set set = new HashSet()。
54 我想遍历调集/Map。
答:用java.util.Iterator。参见API。
55 我还要能够或许或许排序。
答:用java.util.TreeSet。比方:Set set = new TreeSet()。放出来的元素会主动排
序。
你须要为元素完成Comparable接口,还能够或许或许须要供给equals()方式,compareTo()方式,
hash
Code()方式。
56 可是我想给数组排序。
答:java.util.Arrays类包罗了sort等适用方式。
57 我想按差别方式排序。
答:为每种方式界说一个完成了接口Comparator的类并和Arrays综合应用。
58 Map有甚么用?
答:存储key-value的关头字-值对,你能够或许或许经由进程关头字来疾速存取响应的值。
59 set方式没题目,可是get方式前往的是Object。
答:强迫范例转换成你须要的范例。参见45。
60 我要取得一个随机数。
答:利用java.util.Random类。
61 我比拟两个String老是false,可是它们明显都是"abc" !
答:比拟String必然要利用equals或equalsIgnoreCase方式,不要利用 == !
==比拟的是两个援用(变量)是不是是指向了统一个东西,而不是比拟其内容。
【初学者JAVA进修入门】相干文章:
Java编程说话初学者入门课程12-05
Java说话入门的几个关头进修点12-03
Java入门教程:若何利用一个Java03-17
java运算符入门教程03-28
Java入门教程:常量和变量03-18
java常量和变量入门教程03-28
日语入门进修03-03
日语进修的入门方式04-10
显卡入门进修教程03-19