vlambda博客
学习文章列表

JAVA基础测试含答案

1.简述java面向对象的特征,面向过程与面向对象对比,有什么区别?


1封装

是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响.

找共性,将共有的属性、方法放到父类中

2.继承:

   子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。

3.封装:

   一个类包括多个属性及方法。

程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。


2.StringBuilder与String的区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。

StringBuffer:长度可变,可以将多个字符串值直接联合,效率高

StringBuffer简易替换,使用字符串缓冲区,比 StringBuffer 要快

StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃.StringBuffer要用在全局变量中


3.集合List、Map、Set三个接口,存取元素时,各有什么特点?

List,set继承于Collection

Map没有继承于Collection,其相对是独立的

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

4.abstract class和interface有什么区别?

(1)接口可以被多重implements,抽象类只能被单一extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)  当功能需要累积时用抽象类,不需要累积时用接口

5.Linux常用命令(10个)

◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、

exit、last;

◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;

◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、

crontab;

◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、

finger、mail、 nslookup;

◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、

who;


6.创建一个线程的步骤线程与进程的区别,以及线程的几种状态?

一个进程可以拥有多个线程,它们看似同时执行,但互相之间并不同步。

线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。

Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

线程有两种实现方法分别是继承Thread类与实现Runnable接口,然后重写run().


7.类、包、方法各自的命名规则?

  1. 类名、接口名:每个单词的首字母应该大写,尤其第一个单词的首字母应该大写。(驼峰规则)   class  MyFirstClass

  2. 字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写。(以便跟上面的有所区别)    boolean isWoman

3. 常量:全部用大写字母表示。如果由几个单词组成,则由下画线连接。

        public final int  GREEN   

4. Java包(Package):全部用小写字母。        package  java.awt.event


8.System.out.println()   System.out.print()  System.out.printf() 的区别?

printf可以按照格式输出  println可以在输出后回车换行  print就是单纯的输出


9.instanceof():的作用?

用法是:A instanceof B ,返回值为boolean类型,用来判断A是否是B的实例对象或者B子类的实例对象。如果是则返回true,否则返回false。


10.如何退出循环体?

用break; return 方法。


11.catch,true、false、friendly,sizeof、interfacedefault那些不是java关键字?

关键字列表:

   abstract  boolean   break   byte     case    catch       char    class

   continue  default   do      double   else    extends     enum    false

   final     finally   float    for     if     implements  import  instanceof

   int       interface long    native   new     null        package private

   protected public    return  short    static  super       switch  synchronized

   this      throw     throws  transient true   try         void    volatile  while

Java 中 true、false不是关键字,而是boolean类型的字面量。但也不能当作变量用。

所有的关键字都是小写,friendly,sizeof不是java的关键字

保留字:const,goto :这两个已经削去意义,但同样不能用作变量名。


12.什么是实例变量和局部变量?

实例变量也是类中独立于方法之外的变量,不过没有static修饰。全局变量就是谁都可以用.

局部变量是类的方法中的变量,局部变量就是私有变量,意思就是只能自己的对象调用,而不让其它的对象用。


13.  IO流,分为几种?各有什么作用?

字节流字符流。字节流继承于InputStream OutputStream,字符流继承于Reader Writer。在java.io包中还有许多其他的流低层流与调层流高层流主要是为了提高性能和使用方便。


14.什么是重载与重写?

方法的重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。

重载Overloading 一个类多个方法,名称相同,参数个数类型不同。

两者都是Java多态性的不同表现。

Overloaded的方法是可以改变返回值的类型

15.什么时候用equals与“==”的区别?分别是什么时候使用?

equals用来比较字符串,==用来比较基本类型(如int long)


16.什么是枚举、什么是泛型?

泛型是java5才加入的,  编译期间 约束 类型 的,保证对象安全

比如List stus = new ArrayList ();

在编译期间就约束了 ,该list里面只能存放 Student类型的对象

枚举:

枚举是一种类型,用于定义变量,以限制变量的赋值 赋值时通过"枚举名.值"来取得相关枚举中的值

public enum Season {

        winter, spring, summer, fall;

}表示Season(季节)的值只能是枚举里面定义的   winter, spring, summer, fall(春夏秋冬);


17.内部类有几种?各有什么用途?

内部类分为成员内部类、静态内部类、方法内部类、匿名内部类
1.内部类可以很好的实现隐藏
 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。


18.排序的方式有几种?

冒泡排序
  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较 a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对 a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。
  优点:稳定;
  缺点:慢,每次只能移动相邻两个数据。

选择排序
  冒泡排序的改进版。
  每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
  选择排序是不稳定的排序方法。

插入排序
  已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)
  优点:稳定,快;
  缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

快速排序
  快速排序是目前已知的最快的排序方法。
  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据 a[x]作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n] 两组数据进行快速排序。</a[x],a[k+1]~a[n]中的每一个数据>

  优点:极快,数据移动少;
  缺点:不稳定。


19.堆和栈的概念?


栈是一种线形集合,其添加和删除元素的操作应在同一段完成。

栈按照后进先出的方式进行处理。

堆是栈的一个组成元素


20.如何创建一个Socket程序?

ServerSocket ss = new ServerSocket(4001);

        Socket s = ss.accept();

        BufferedReader br = new BufferedReader(new InputStreamReader(s.

                getInputStream()));

        PrintStream ps=new PrintStream(s.getOutputStream());

        String temp = br.readLine();

  while (true)

        {

            System.out.println("客户端:"+temp);

            ps.println(temp);

            if (temp.equals("stop"))

            {

                break;

            }

            temp = br.readLine();

        }

        br.close();

        ps.close();

        ss.close();

    }

}


public class ClientSocket

{

  public static void main(String[] args) throws Exception

  {

      Socket s = new Socket("localhost", 4001);

      PrintStream ps = new PrintStream(s.getOutputStream());

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      BufferedReader br_server = new BufferedReader(new InputStreamReader(s.

              getInputStream()));

      String temp = br.readLine();

      while (true)

      {

          ps.println(temp);

          temp = br_server.readLine();

          System.out.println("服务器的信息:" + temp);

          if (temp.equals("stop"))

          {

              break;

          }

          temp = br.readLine();

      }

      s.close();

      br.close();

      br_server.close();

  }

}