JAVA基础知识(转)
本文就java基础部分容易混淆的一些知识点进行了一下总结。因为Java本身知识点非常多,不可能在很短的篇幅就能叙述完,而且就某一个点来讲,如欲仔细去探究,也能阐述的非常多。这里不做全面仔细的论述,仅做为一个引子,抛砖引玉。具体个例,还需各位看官自己验证一下,以增进理解和记忆。
这下面的一些是我当初在过Sun公司的程序员认证的时候仔细学习指定教材SL-275时自己做的一些总结,也有后来在不同公司面试求职者或去求职时在不同公司看到的一些试题所涉及部分知识点。拟将来时间将求职笔试和面试java试题这一部分做个专题总结,希望能做到。
欢迎就这一部分各位朋友与我进行探讨,共同进步。虽然有很多朋友可能进行了多年的java开发老手,但可能仍旧对某些点缺乏仔细探究。去一些公司求职面试或笔试时的技术题目中,也往往会涉及到这里的一些内容。
所以,希望下边的这些总结能够对一些学习java或求职的朋友有些许帮助。
1、 关于java类中的缺省的构造器
如果一个java类没有显式定义没有参数的构造器,将有一个默认缺省的构造器。如果定义了一个有参数的构造器,那么原来的缺省的构造器将不在有效。
public class A{
}
此时如果用 new A(); java编译器将使用缺省的构造器。
public class A{
public A(int i){
}
}
如果此时用 new A(); 将产生一个编译错误,因为此时显式定义了,一个有参数的构造器。
2、Java中的类名与文件名
1、在一个java文件中可以有多于一个类定义(更常见于某些组件的监听器类),但只能有一个public class定义,且与文件同名。
2、如果一个java源文件中没有public类,那么每个类的名字没特殊规则,即不必与文件同名。
3、在编译后产生的class文件中,仍旧是多个单独分开的class文件。
3、import关键字
1、import语句必须定义在所有的class定义之前。
2、import语句只是为编译器指明了一个路径,并不像C或C++中的#include,所以用import .*并不影响性能
4、Java中的几个特殊关键字
Java中的关键字许多大家都比较熟悉,而有几个就不是很常用,如:
1、goto和const是保留关键字,在java中没使用
2、strictfp和volatile不常用; sizeof、zhen不是关键字。
3、true,false,null不是严格意义上的关键字,而是literals。
5、java方法中的传递值参
在Java方法中传递参数,对于基本类型来讲传递的是值参数,相当于建立的一个参数的拷贝,不影响原来变量的值。
在引用方法中可以改变传递对象的内容,但对象引用(像A@5d87b2)从来不会改变。
public class tt{
public static void main (String args[]){
A aa = new A();
aa.num =5;
tt t = new tt();
System.out.println("11 aa="+aa + "num="+aa.num);
t.test(aa);
System.out.println("22 aa="+aa + "num="+aa.num);
}
void test(A a){
A ab = new A();
a = ab;
System.out.println("33 ab="+ab + "num="+ab.num);
}
}
class A{
int num;
}
6、变量初始化
java中的变量在使用之前必须被初始化,当创建一个对象的时候一些类的变量会自动初始化并赋予缺省值。
数字类赋值0;char类型赋值'\u0000'; boolean类型赋值false;引用对象赋值null;
注意的是在方法之外的类变量的值是自动赋初始值,而方法内的局部变量必须手工初始化。
class AA{
int num;
void test(){
int j;
j =5;//没有这一行则编译不会通过。
j = j+num;
}
}
7、switch语句
这个点经常在求职笔试题目中出现。default放在最上边编译没问题;碰到符合分支的,如果没有break会一直向下运行。
public class tt{
public static void main (String args[]){
tt t = new tt();
t.test(2);//可改变成3运行一下看一下结果
}
void test(int i){
switch (i){
default:
System.out.println("default");
case 1:
System.out.println("111");
break;
case 2:
System.out.println("222");
break;
}
}
}
8、关于java中的label使用
· break [label]
· continue[lbele]
· lable: statement; //这里的statement必须是一个loop循环
public class tt{
public static void main (String args[]){
tt t = new tt();
t.test();
}
void test(){
System.out.println("0000");
lb1:for (int i=0;i<10;i++){
lb2:for (int j=0; j<2; j++){
if (i==2) continue lb1;
System.out.println("i="+i +" j="+j);
}
}
System.out.println("111111");
}
}
9、类型转换校正
class Employee
|
class Manager
向上校正,总是允许的,Manager直接使用父类Employee的方法。
向下校正,必须用instanceof检验,才能将一个Employee转换为Manager对象。
public void test(Employee e){
if (e instanceof Manager){
Manager m = (Mnager)e;
...
}
}
10、方法重载(overloading)、方法覆盖(overriding)
方法重载(overloading)一定要求名字相同,参数不同,返回类型可以相同也可以不同
class A{
void test(int i){
}
}
class AA extends A{
int test(int i, int j){
return 5;
}
}
注:方法覆盖(overriding)要求名字,参数,返回类型全部必须相同,访问控制符可以不同,但必须大过父类的。因为如果名字和参数都已经相同了则一定要求返回类型相同,否则认为这是一个新的方法了,名字就必须不同了。
class A{
void test(int i){
}
}
class AA extends A{
public void test(int i){//若是换成private则编译不通过。
}
}
注:关于覆盖方法抛出异常的问题。如A是父类,B是继承A的子类。B中的方法meth()去覆盖父类A的此方法时,B中不能throws出新的异常,只能是父类抛出的异常或其子集。更甚至可以不抛出异常。
11、关于类的构造器重载问题
class A{
public A(int i){
}
}
class AA extends A{
public AA(){
int i = 5; // 这里出错,没有父构造器
}
}
由于父类A自定义了构造器,所以缺省的构造器就丢失了,当子类的构造器自动试图调用父类没参数的构造器时却没有,所以会编译出错。
12、关于static关键字总结:
1、不能在static修饰的方法中引用this变量,只能引用一些静态变量或方法,或new新的对象(可以定义局部变量)。
简言之,静态方法或块中,只能引用静态的方法或变量。
2、类中的成员变量(static修饰)有缺省值,而类的定义的方法中的局部变量没有缺省值。
3、在类的构造器中,可以引用任何的静态或非静态的变量和方法,可以在非static方法中调用static方法。
4、static{}块中的代码在类装载中仅执行一次。
5、在7-7,A static method cannot be overridden but can be hidden. 不理解。
6、不能在无论非static方法中或static方法中定义static变量。
13、关于final关键字
1、不能继承final修饰的类,不能覆盖final修饰的方法。
2、final修饰的变量,若没赋值,必须在构造器中赋初始值。
class A{
final int j;
public A(){
j = 9;//若没有此行,则编译不通过。
}
}
3、final类型的方法参数可定义,但不能改变。
class A{
void m(final int i){ //这一行的声明i为一个final没问题。
i ++ ; //但在这里面,i的值不能再被改变。
}
}
14、Interface接口关键字
1、接口中的变量
1、必须初始化其值。
2、默认修饰符为public+static+final,其他的修饰符不允许。
2、接口中的方法
1、默认为public+abstract
2、其它修饰符 static,private,protected,final,synchronized,native均不能有。
interface A{
void s();
}
class AA implements A{
void s(){ //编译器在这里提示由于接口中的方法s()修饰符默认是public,
//而这里的s()默认是protected,小于public所以不允许。
}
}
15、abstract抽象关键字
abstract class A{
private int i;
private void m();{}
}
抽象类中可以有私有的变量和私有属性,而接口就不行(原因如上),
这是因为java是按实例虚拟调用的,在生成某一个具体的对象可以有私有的属性或方法的。
abstract class A{
private int i;
private void m(){};
public abstract void n();//若是private则编译不通过。
}
抽象类中的抽象方法是让其他类继承的,如果本身都是私有的,就没有什么意义了
16、集合类型
以有无顺序,允许不允许重复区分
Collections: 一组对象,无序集合,允许重复
Set:无序集合,不允许重复
List:有序集合,允许重复
注意:在JDK1.1中定义的集合类型,都是线程安全的,所以都是“重量级”的。像HashTable,Vector
而在java2中定义的一些新的集合类型如HashMap, ArrayList不是线程安全的,是“轻量级”的,但速度快,性能好。这一点在许多公司面试试题都见过。
17、布局管理器
FlowLayout,BorderLayout,GridLayout,CardLayout
关于Panel和Frame默认的Layout常在一些公司的面试试题中出现。
1、Panel和Applet类默认的布局管理器是FlowLayout 一个一个的加上去
2、Frame和window类默认的布局管理器是BorderLayout 按东南西北加入
3、xyLayout是Borland公司开发的布局管理器。
18、面试试题中Applet部分
1、使用代码
<applet code = "a.class" width=100 height=200>
<param name=a vlaue"11">
</applet>
2、可以覆盖的方法init(),start(),stop(),destory(),paint(g)
19、面试试题中线程部分
1、基本实现方式两中,继承Thread类和实现Runnable接口
2、必须实现父类或接口中的run()方法。
3、有关线程方法,start()启动线程。
join()指在调用这个线程的方法或进程中,必须等待此线程运行结束才能继续其他进程。
4、线程中的同步synchronized,注意死锁。
20、对象串行化
1、仅仅对象类型的数据可以串行化。
2、标记为transient的数据不可以串行化。
存储一个对象到某种永久性存储叫persistence,如存储到磁盘、磁带或别的机器的内存中。
java.io.Serializable接口没有定义方法要实现,仅仅是一个标记暗示实现了这个接口的类可以被考虑串行化。没有实现这个接口的对象不能保存或存储它们的状态。
当一个对象被串行化的时候,仅仅数据被保留,而方法和构造器不是串行化的部分。
一些对象类是不能串行化的因为他们代表的数据是经常变化的。如java.io.FileInputSream和java.langThread。如果串行化的对象包含了不可串行化的对象,整个串行化动作会失败,并抛出NotSerializableException。
21、java中的网络通讯
一般的TCP/IP网络数据通信主要可分2种,TCP和UDP
TCP:TCP是面向连接的通信协议,就像打电话,先要拨通建立连接,传送的数据不会丢失。
java提供了ServerSocket和socket类。在server端,建立一个serverSocket,并指定端口,并侦听连接。
服务器端代码
ServerSocket sc=new ServerSocket(1111);
Socket socket1= sc.accept();
DataInputStream s_in = new DataInputStream(socket1.getInputStream());
客户端代码
Socket socket2 = new Socket("192.168.1.1",1111);
UDP:UDP非面向连接,就像写信,将传输的数据包成一个分组,可能有数据丢失
服务器端代码
DatagramSocket server = new DatagramSocket(1234);
DatagramPacket in_packet =new DatagramPacket(in_buf,2000);
server.recieve(in_packet);
客户端代码
DatagramSocket client= new DatagramSocket(1235);
DatagramPacket out_packet=
new DatagramPacket (out_buf,100,"192.168.1.1",1234);
client.send(outPacket);
22、String对象
一般讲来创建的两个对象如果用==来比较肯定是不等的,因为他们的引用地址是不同的,而==是对于对象来讲是比较对象地址的。但对于String对象来讲是一个例外,两个String对象如果值相同,==比较也是相同的。我想这可能与Sun公司对String对象定义有关。
public class tt{
public static void main (String args[]){
tt t = new tt();
t.test(2);
}
void test(int i){
String s1 = "123";
String s2 = "123";
if (s1==s2)
System.out.println("111111");
else
System.out.println("2222222");
}
}
结果输出:111111
JAVA基础知识(转)的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- Java 基础知识(一)
Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...
- java 基础知识三 java变量
java 基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
随机推荐
- lucene-查询query->PhrasePrefixQuery使用短语缀搜索
PhrasePrefixQuery与Phrase有些类似.在PhraseQuery中,如果用户想查找短语“david robert”,又想查找短语“mary robert”.那么,他就只能构建两个Ph ...
- css-让div永远在最底部
<div class="a"></div> .a{ position:fixed; bottom:0; }
- sql-insert一条语句执行多条数据插入
有三种方法: .InSert Into <表名>(列名) Select <列名> From <源表名> 如: INSERT INTO TongXunLu (姓名,地 ...
- PV、UV、IP之间的区别与联系
先看图: 1.什么是PV值 PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多 ...
- 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...
- crontab 命令
1. crontab 可以在shell里面设置一些定时任务 格式 30 * * * * nohup sh /data/admin/adsprecise/sources/providers.sh mjo ...
- BIOS设置开机密码
步骤: 以上设置是方正电脑的BIOS,属于比较新的,对于其它BIOS也只是大同小异. 关于破解: 这种设置方式,直接拆开机箱,断电池即可. 还有一个,设置硬盘密码时要小心,这个是无法破解的.所以一般不 ...
- Android NDK学习之第一个实例---端口扫描
为什么要写一个端口扫描的程序,Java来写不是很方便吗?因为我也没有想到什么例子能够方便的来练习.于是想到以前找到的端口扫描的C代码,于是想用他们来练习.扫描服务端端口的方式有许多种,最简单的就是直接 ...
- android录音相关
android的麦克风在现在的生活中发挥着很大的作用,打电话,视频聊天,语音识别等等. android sdk的api里提供了很方便的调用方法,下面写一个小的DEMO. 五个按钮:开始录音,停止,播放 ...
- 如何自己编写一个easyui插件续
接着如何自己编写一个easyui插件继续分享一下如何从上一节写的“hello”插件继承出一个“hello2”. 参考了combobox的源码中继承combo,当然我这个简单很多了.都是根据自己的理解来 ...