`

Java基础知识部分总结

    博客分类:
  • java
阅读更多
本文就java基础部分容易混淆的一些知识点进行了一下总结。因为Java本身知识点非常多,不可能在很短的篇幅就能叙述完,而且就某一个点来讲,如欲仔细去探究,也能阐述的非常多。这里不做全面仔细的论述,仅做为一个引子,抛砖引玉。具体个例,还需各位看官自己验证一下,以增进理解和记忆。
    这下面的一些是我当初在过Sun公司的程序员认证的时候仔细学习指定教材SL-275时自己做的一些总结,也有后来在不同公司面试求职者或去求职时在不同公司看到的一些试题所涉及部分知识点。拟将来时间将求职笔试和面试java试题这一部分做个专题总结,希望能做到。
    欢迎就这一部分各位朋友与我进行探讨,共同进步。
1、虽然有很多朋友可能进行了多年的java开发老手,但可能仍旧对某些点缺乏仔细探究。
2、去一些公司求职面试或笔试时的技术题目中,也往往会涉及到这里的一些内容。
    所以,希望下边的这些总结能够对一些学习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


分享到:
评论

相关推荐

    2022年Java入门系统Java基础知识部分总结.docx

    Java基础知识部分总结 以下是对给定文件的知识点总结: 1. Java 类中的缺省的构造器 在 Java 中,如果一个类没有显式定义无参数的构造器,那么将有一个默认的缺省构造器。但是,如果定义了一个有参数的构造器,...

    Java 基础知识部分总结

    Java基础知识是每位Java开发者必备的技能,涵盖了许多重要的概念。以下是对标题和描述中提到的一些关键知识点的详细解释: 1. **默认构造器**:在Java中,如果一个类没有显式声明无参数的构造器,Java编译器会自动...

    JAVA基础知识精华总结.rar

    在《JAVA基础知识精华总结》中,我们可以期待涵盖以下几个关键领域: 1. **Java语法基础**:包括基本的数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制(如条件语句if-else、循环for、...

    java基础知识大总结

    Java基础知识大总结涵盖了Java编程语言的核心概念和结构,为初学者提供了一个全面的参考资料。下面将详细解析这些知识点: 1. JVM、JRE和JDK的区别: - JVM(Java Virtual Machine)是Java虚拟机,它是Java程序跨...

    java基础知识总结(经典)

    Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...

    JAVA基础知识总结

    Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...

    java基础知识点归纳总结

    "java基础知识点归纳总结" java是一种广泛应用的编程语言,以下是java基础知识点的归纳总结: 一、java 概述 * java是由Sun公司的James Gosling等人开发的语言,最初名称为Oak,1994年更名为Java。 * java有三种...

    java基础知识总结(超级经典)

    Java是一种广泛使用的面向对象的编程语言,它简单、面向对象、稳定且跨平台。...学习Java基础不仅仅是学习它的语法和编程模型,还要理解Java的运行环境、开发环境以及如何有效地使用Java平台进行软件开发。

    java基础知识总结(很详细全面)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)的James Gosling等人于1991年...无论是初学者还是经验丰富的开发者,对Java基础知识的深入理解和实践都是提升编程技能的关键。

    java基础知识总结文档

    Java 基础知识文档详述了Java编程语言...以上只是Java基础知识的一部分,深入学习还需要涵盖多线程、集合框架、网络编程、反射、注解等更多内容。对于初学者,理解并掌握这些基础知识是构建坚实Java编程技能的第一步。

    Java基础知识总结大全

    ### Java基础知识总结大全 #### 一、Java内存区域划分 Java程序运行时,根据不同的功能需求,被划分为几个不同的内存区域,主要包括: 1. **寄存器**:寄存器是CPU的一部分,用于存放计算过程中的临时数据,通常...

    java基础知识应用

    在“java基础知识应用”这个主题中,我们主要探讨的是Java语言的基础概念及其在实际开发中的应用,特别是与数据库交互的部分。 一、Java语言基础 1. 类与对象:Java基于面向对象的编程理念,所有程序都是由类和对象...

    java基础知识总结经典.pdf

    Java基础知识总结经典 本资源总结了Java基础知识,涵盖了Java概述、Java语法基础、Java开发环境配置、Java命令等多个方面。下面是该资源中所涵盖的知识点: 一、Java概述: * Java的历史:1991年,Sun公司的James...

    Java常见基础知识总结

    Java基础知识总结 Java是一种广泛使用的编程语言,掌握Java基础知识是每个Java开发者所必需的。以下是Java基础知识的总结,涵盖了异常、泛型、反射、IO和注解等方面。 一、异常 在Java中,所有的异常都有一个共同...

    java基础知识总结 超级经典

    3 确定步骤 每一个思路部分用到哪些语句 方法 和对象 4 代码实现 用具体的java语言代码把思路体现出来 学习新技术的四点: 1 该技术是什么 2 该技术有什么特点 使用注意 : 3 该技术怎么使用 demo 4 该技术什么...

    java知识体系总结

    1. **Java基础** - **语法**:Java语法与C++类似,但更简洁,没有指针和内存管理。 - **数据类型**:包括基本类型(如int、float、boolean)和引用类型(类、接口、数组)。 - **变量**:声明变量时需要指定类型...

    JAVA基础知识点总结

    JAVA基础知识点总结 Java是一种广泛使用的面向对象的编程语言,其设计目标是具有跨平台的能力,这主要得益于Java平台的特性。Java平台由两大部分组成:Java应用编程接口(API)和Java虚拟机(JVM)。API是一系列...

Global site tag (gtag.js) - Google Analytics