`

java 基础深入

阅读更多

父类引用指向子类对象:

 从对象的内存角度来理解试试.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
Father f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
Son s1 = s;//s1指向那1.5M的内存.
Father f1 = (Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
Son s2 = (Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.
Son s3 = (Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.

 

多态:

多态性是指统一的接口,不同的表现形式。

总结:多态--》父类或者接口类型的引用指向子类或者实现该接口的类的对象..(多态是个运行时的行为..体现父与子的关系)

Java根据动态绑定决定执行“更具体”的方法,即子类方法。

http://liyanhui.iteye.com/blog/167853

 

2.对final类型的成员变量的初始化方式

   1.生明变量时直接赋值

   2.在生构造方法中完成赋值,如果一个类有多个构造方法,就要保证在每个构造方法中都要完成对该final类型变量的初始化工作

   3.对于final类型的引用变量来说,所谓的不能改变指的是该引用不能改变,但该应用所指向的对象的类容就可以该变的

 

三,一个类的声明可否既是abstract 又是final类型的呢?

    abstract 要求当前类被继承。而final不能被继承。。矛盾。了。。

四,pubic final类型的变量为什么一般都加上static呢?

  public class Test

{

   public static final str='aa';

}

   这样写的好处是节省内存。不加static的话。。如果Test有个100个变量的话就会在内存中有100个str的拷贝。加上了static只会有一个。。。

五。 ==  和equals的区别

   不要简单的说。。==比较内存地址。。equals比较的是内容。---》这是对String

  而对Object来说equals 其实还是比较的内存地址。。这是因为String 和Object的equals的实现是不一样的。。

六。HashSet ...

     当向集合set中增加对象时。首先集合计算要增加对象的hashCode码,根据该值来得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的话,那么集合set认为对象在集合不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合中不存在该对象,再进行一次散列,将该对象放到散列后计算出的地址里,如果equals方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。。

  对于于Object类型来说。。hashCode就是该对象的内存地址。。

 通常重写equals方法时,必须重写hashCode方法,如果一个类的两个对象,使用equals方法比较时,结果为true,那么该两个对象必须具有相同的hashcode

七。Arraylist linkedlist vector的区别?

      Arraylist底层是用数组来实现的。,底层会生成一个长度为10的数组来存放对象。。

     Vector 底层也是用数组来实现的。

    Arraylist的所有方法都不是同步的,,对于Vector。。大部分的public方法是同步的。。

   对于Arraylist ,查找速度非常快,增加和删除操作非常慢。(本质上是由数组的特点来决定的)

   LinkedList底层是用双向链表业实现的。。查找速度非常的慢..,增加和册除是非常的快的(本质是由双向链表业实现的)

八。关于匿名内部类:该类一定是继承了某个父类或实现了某个接口

九。泛形中。。的 ?等价于 ? extnds Object

十。简单的单态的实现:

     pubic class Singleton

{

     private static Singleton sigleton =new Singleton();

 

     private Singleton(){}  //防止外面NEW

 

     public static Singleton getInstance()  

     {

       return  sigleton;

     }

十一。关于wait,notify,notifyAll以及sleep方法的关系

        1.如果一个线程调用了某个对象的wait方法,那么该线程首先必须要拥有该对象的锁(换句话说,一个线程如果调用了某个对象的wait方法,那么该wait 方法必须要在synchronized中)

       2.如果一个线程调用了某个对象的wait方法,那么该线程就会释放对象的锁

       3.在java对象中,有两种池(锁池,等待池)

       4.如果一个线程调用了某个对象的wait方法,那么该线程进入该对象的等待池中(释放锁),如果未来某一时刻,另外一个线程调用了相同的对象的notify或者notifyAll方法,那么在该等待池中的等待的线程就会起来进入该对象的锁池中,去等待获得该对象的锁,如果获得锁成功后,那么线程将沿着wait方法之后的路径去执行。

       5.sleep(long time),如果一个线程调用了sleep方法睡眠,那么在睡眠的同时,它不会失去对象的锁的拥有权。

十二。关于synchronized关键字的作用

     1.在某个对象的所有synchronized方法中,在某一时刻,只能有一个唯一的一个线程去访问这些synchronized方法

     2.如果一个方法是synchronzied方法,那么该synchronized关键字表示给当前对象上锁(即this)

     3.如果一个synchronized方法是静态(static),那么该synchronized关键字表示给当前对象所对应的Class对象上锁.(每个类,不管生成多少对象,其对应的Class对象只有一个)

十三。关于初始化阶段:servlet 有几种初始化方式呢?

     1.客户端第一次访问该servlet,那么该servlet将被实例化

      2.可以通过在web.xml文件中,配置servlet的启动参数,让服务器启动后,该servlet自动完成实例化.

 

 十四。Iterator 的删除问题?

 

  eg:  list<String> list=new ArrayList<String>();

         list.add("aa");

         list.add(''bb');

         list.add("aabb");

 

        for(Iterator it=list.itrator();it.hasNest();)

         {

            it.remove();// 这样可以正常删除的

            list.remove()//会报异常  (注要与itrator的内部实现有关的)

         }

  十四。Socket编程总结

     使用ServerSocket 和Socket实现服务器端和客户端的Socket通信

    总结:1)建立Socket连接2)获得输入/输出流3)读/写数据4)关闭输入/输出流5)关闭Socket

 十五.数组的定义

       String [] arr = null;//表示定义数组。
 String [] arr = new String[10];//表示创建数组。
 Integer [] a = new Integer[]{1,2,3};//创建数组并赋值
 String [][] two = new String[4][5]; //二维数组创建。
 String [][] two = {{"A","b"},{"c","d"}};//二维数组初始化
 int[][][] b = {
          {{1,2,3},{1,2,3}},
            {{3,4,1},{2,3,4}}
               };
 //多维数组

16.runtimeException 和checked Excepton的理解:

从逻辑的角度来说,checked exceptions和runtime exception是有不同的使用目的的。checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。

checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出MalformedURLException。MalformedURLException就是一种checked exception。设想一下,你有一个简单的程序,用来提示用户输入一个URL,然后通过这个URL去下载一个网页。如果用户输入的URL有错误,构建器就会抛出一个exception。既然这个exception是checked exception,你的程序就可以捕获它并正确处理:比如说提示用户重新输入。

ArrayIndexOutOfBoundsException(因为数组numbers的成员是从0到2)。对于这个异常,调用方无法处理/纠正。

runtime exception用来指示一种调用方本身无法处理/恢复的程序错误。而程序错误通常是无法在运行过程中处理的,必须改正程序代码

 

17.线程:http://java.chinaitlab.com/line/768283_4.html

18. io   http://edu.codepub.com/2010/0623/23718.php

 

 

Java IO 的一般使用原则 : 

一、按数据来源(去向)分类:

1 、是文件: FileInputStream, FileOutputStream, ( 字节流 )FileReader, FileWriter( 字符 )

2 、是 byte[] : ByteArrayInputStream, ByteArrayOutputStream( 字节流 )

3 、是 Char[]: CharArrayReader, CharArrayWriter( 字符流 )

4 、是 String: StringBufferInputStream, StringBufferOuputStream ( 字节流 )StringReader, StringWriter( 字符流 )

5 、网络数据流: InputStream, OutputStream,( 字节流 ) Reader, Writer( 字符流 )

二、按是否格式化输出分:

1 、要格式化输出: PrintStream, PrintWriter

三、按是否要缓冲分:

1 、要缓冲: BufferedInputStream, BufferedOutputStream,( 字节流 ) BufferedReader, BufferedWriter( 字符流 )

四、按数据格式分:

1 、二进制格式(只要不能确定是纯文本的) : InputStream, OutputStream 及其所有带 Stream 结束的子类

2 、纯文本格式(含纯英文与汉字或其他编码方式); Reader, Writer 及其所有带 Reader, Writer 的子类

五、按输入输出分:

1 、输入: Reader, InputStream 类型的子类

2 、输出: Writer, OutputStream 类型的子类

六、特殊需要:

1 、从 Stream 到 Reader,Writer 的转换类: InputStreamReader, OutputStreamWriter

2 、对象输入输出: ObjectInputStream, ObjectOutputStream

3 、进程间通信: PipeInputStream, PipeOutputStream, PipeReader, PipeWriter

4 、合并输入: SequenceInputStream

5 、更特殊的需要: PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader

 

 

wait() 必须在synchronized 函数或者代码块里面
// wait()会让已经获得synchronized 函数或者代码块控制权的Thread暂时休息,并且丧失控制权
// 这个时候,由于该线程丧失控制权并且进入等待,其他线程就能取得控制权,并且在适当情况下调用notifyAll()来唤醒wait()的线程。
// 需要注意的是,被唤醒的线程由于已经丧失了控制权,所以需要等待唤醒它的线程结束操作,从而才能重新获得控制权。
//
// 所以wait()的确是马上让当前线程丧失控制权,其他的线程可以乘虚而入。
//
// 所以wait()的使用,必须存在2个以上线程,而且必须在不同的条件下唤醒wait()中的线程。

 

 

 

 

分享到:
评论

相关推荐

    java基础-深入教程

    java从基础到深入教程很实在很实用的!都是搜集来的经典案例!

    Java基础练习代码

    本文将深入探讨Java基础练习代码中的关键概念,帮助初学者巩固基础,提高编程技能。 首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建...

    深入体验Java_Web开发内幕—核心基础 完整版 pdf

    《深入体验Java_Web开发内幕—核心基础》是一本针对Java Web开发的深度解析书籍,旨在帮助读者全面理解和掌握Java Web开发的核心技术。这本书涵盖了从基础到高级的多个主题,旨在提供一个完整的Java Web开发学习路径...

    java基础学习课件ppt

    Java基础学习课件PPT是一套全面覆盖Java SE(标准版)基础知识的教育资源,适合初学者和希望巩固Java技能的开发者。这套课件旨在在一个月内帮助学习者掌握Java编程的核心概念,为深入学习和应用Java技术打下坚实的...

    java基础资料大全

    JAVA基础资料大全涉及的详细知识点如下: 1. Java开发环境搭建:介绍Java的开发环境,包括JDK的下载、安装、校验,以及JDK与JRE的区别和作用。 2. Java基础语法:包括程序的基本结构,如数据类型、变量、常量的...

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    《Java基础入门(第3版)》是一本针对Java初学者的教材,其课后答案文档提供了对书中习题的解答,旨在帮助读者巩固所学知识。Java是一种面向对象的编程语言,具备跨平台性,由Java虚拟机(JVM)负责解释执行。Java...

    深入了解Java语言基础

    深入了解Java语言基础,掌握其核心概念与应用技巧 Java,作为一种全球范围内广泛应用的编程语言,其强大之处在于它不仅是一种编程语言,同时也提供了一个开发环境和运行环境,具备跨平台、面向对象、分布式处理等...

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其教学设计旨在通过实例引导学生深入理解Java语言的核心概念。本教程覆盖了从环境搭建到程序设计的各个环节,旨在帮助学生建立起坚实的...

    Java基础教程PPT

    这份“Java基础教程PPT”是为初学者设计的,旨在帮助他们掌握Java编程的基础概念和技能。 首先,PPT可能会从Java的历史和特性开始讲解。Java由James Gosling在1995年推出,目标是“一次编写,到处运行”。它的主要...

    Java基础 学习笔记 Markdownr版

    3. 输入/输出(IO)流:Java的15IO流.md文件深入解析了IO流的使用,包括文件流、字符流、字节流以及缓冲流的处理。IO流是数据传输的桥梁,允许程序与外部设备进行数据交换。 4. 多线程:在10多线程.md中,介绍了...

    Java基础知识精讲,深入浅出,好资料

    这份"Java基础知识精讲"的资料深入浅出地介绍了Java的核心概念,是初学者理想的入门指南。以下将详细介绍其中可能涵盖的知识点。 1. **Java简介**:讲解Java的发展历史,其跨平台的特性(Write Once, Run Anywhere...

    java基础PPTJava基础PPT

    Java是一种广泛使用的...总的来说,这份"Java基础PPT"将带领学习者深入理解Java语言的基本概念和用法,为进一步的Java开发打下坚实的基础。通过细致的学习和实践,开发者可以熟练掌握这些知识,并运用到实际项目中去。

    《Java基础案例教程(第2版)》课后习题答案1

    【Java基础知识点】 1. **Java的起源与特性** - Java是由SUN Microsystems公司(后被Oracle收购)开发的一种面向对象的编程语言。 - Java有三个主要版本:Java Standard Edition (JavaSE),用于桌面应用;Java ...

    Java基础案例教程(第2版)_PPT.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其PPT形式的压缩包提供了清晰、直观的教学材料。在深入探讨这些知识点之前,我们首先了解一下Java语言的基础概念。 Java是一种面向对象...

    清华大学JAVA基础教程

    【清华大学JAVA基础教程】是一份专为初学者设计的JAVA编程入门资料,旨在帮助学习者快速掌握JAVA语言的基础知识和核心概念。这份教程全面而详细地介绍了JAVA这门广泛应用于软件开发、移动应用、大数据处理等多个领域...

    java基础教程(pdf)

    Java基础教程是初学者入门编程世界的一把钥匙,它涵盖了编程的基本概念以及Java语言的核心特性。这份PDF教程旨在提供一个全面而深入的学习路径,让你能够快速掌握Java编程的基础。 首先,我们从第1章“Java语言基础...

    java基础教学全套课件_pdf_ppt

    本套Java基础教学课件旨在全面介绍Java的核心概念和技术,帮助初学者建立起坚实的基础,逐步掌握编程技能。 首先,Java语言的基础部分涵盖了变量、数据类型、运算符和控制流程。在Java中,变量是用来存储数据的容器...

    深入体验Java.Web开发内幕—核心基础.pdf

    张孝祥 老师的经典力作!!! 清晰的PDF电子书《深入体验Java_Web开发内幕-核心基础》——地球人都知道,呵呵。。

    动力节点Java基础301集_史上最全的Java基础教程

    动力节点的《Java基础301集》是一个全面且深入的Java入门教程,涵盖了从基础知识到高级特性的广泛内容,适合Java初学者和寻求巩固基础的学习者。以下是一些主要的知识点详解: 1. **数据结构**:教程详细介绍了单项...

Global site tag (gtag.js) - Google Analytics