java基础知识整理

Posted silence-fire

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础知识整理相关的知识,希望对你有一定的参考价值。

1.面向对象的特征:抽象、继承、封装、多态(形象记忆:抽积分多--想想10086)

  1.1抽象

  忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口)。抽象包括两个方面:数据抽象、过程抽象。

    •   数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
    •   过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

  1.2继承

  一个类可以从现有的类中派生,这个过程称为类继承;新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。子类可以从父类中继承方法变量,这里注意,不会继承父类的构造器!子类可以新增自己的方法与变量,同时拥有父类的方法与属性;而且子类可以重写父类的方法;

  1.3封装

  就是把类中具体的方法和属性封装起来,用private私有化,通过类似于get/set的方法访问方法或者变量,最常见的就是javabean;

  1.4多态

  多态是指允许不同类的对象对同一消息做出响应.多态性包括参数化多态性(重载)和包含多态性(重写,继承,接口实现);方法的重写,重载与动态链接构成多态性。java引入多态的概念原因之一就是弥补类的单继承带来的功能不足;

    • 动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接
    • 重载与重写 --->比较直白的理解方式就是:重载是发生在同一个类中,同一个类的,同名的不同参数和返回值类型的构造器/方法;重写是发生在不同类中,有同一个方法,同一类返回值,不同的方法实现;

 2.作用域public,private,protected,以及不写时的区别

技术分享图片

3.String 是最基本的数据类型吗?String中常用的方法有什么?String是否可以被继承?Stirng与Stringbuilder,StringBuffer的区别?

  • 不是,基础数据类型只包含:整型(byte,short,int,long);浮点型(float,double);char型(char);boolean型(char);谐音:征服菜逼(成为大神的必然结果)

  包含的字节(一个字节包含8位,一位就是一个二进制位)分别是:

  byte-1;short-2;int-4;long-8;(很好记忆:笨死了,分别是1*2*2*2)

  float-4;double-8;

  char-2~4(这根编码方式有关,因为语言太多的缘故);

  boolean-一般理论上占1字节,但是在java虚拟机中由于都用int类型代替,所以实际上是占了4字节;

  • String常用方法:String比较常用的包括两方面:构造方法,方法;
    • 构造方法:
      • String(String value)
      • String(char chars[], int startIndex, int numChars)
      • String(StringBuilder builder)
      • String(StringBuffer buffer)
    • 常用方法
      • length()//返回该字符串的长度
      • equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写
      • charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1
      • substring(int beginIndex, int endIndex)//该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回
      • concat(String str)//将参数中的字符串str连接到当前字符串的后面,效果等价于“+”
      • indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1
      •  toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串,对应的有大写方法:toUpperCase()
      • replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串
      • trim()//截去字符串两端的空格,但对于中间的空格不处理
      • contains(String str)//判断参数s是否被包含在字符串中,并返回一个布尔类型的值
      • split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回
      • 将string转化为各种基本类型的方法:各种基本类型封装类的[parseXXX]方法
      • 将各种基本类型转化为stirng方法:String类中的各种[valueOf]方法
  • String是final方法,不能被继承,但是,不属于Stirng本身的方法(比如从父类继承的)是可以被重写的,比如toString();这个平时比较有用
  • 在执行速度方面:StringBuilder>StringBuffer>String
    • String为字符串常亮,StringBuilder和StringBuffer是字符串变量,后两者是变量支持对同一个对象进行修改,StringBuilder支持单线程(也就是线程不安全),StringBuffer支持多线程(线程安全);

4.基本类型与其对应的封装类有什么区别和联系:(了解思路:是什么为什么有什么注意点

  • 基本类型,是数据的基本属性,而对应的封装类,则是一个类,在使用的时候直接使用其对象;基本数据类型只能按值传递,而封装类按引用传递;
  • 封装类的出现,是为了更方便的使用一些基本类型不具备的方法,让我们能够用面向对象的方式进行编程
  • JDK5.0开始可以自动封包了 ,也就是基本数据可以自动封装成封装类,基本数据类型的好处就是速度快(不涉及到对象的构造和回收),封装类的目的主要是更好的处理数据之间的转换,方法很多,用起来也方便;

5.&和&&的区别?

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与,&&具有短路特性

6.heap 和stack 有什么区别?[属于JVM内容]

java中的堆(heap)和栈(stack),是一种内存的存储机制,分别是堆内存和栈内存,在程序中定义的基本类型变量和对象的引用变量,都是存储在stack内存中的,当执行超过变量的作用域之后,会自动释放这个变量对应的内存空间,另做他用;heap内存主要存储new出来的对象和数组,它们占用的内存不会被自动释放,只有没有引用变量指向它的时候,才变为垃圾,在随后的一定时间短被gc(垃圾回收器)回收;

通俗点说:就是steap中存放的是java中的指针,可以指向heap中的实际存储的数据;

7.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?

该方法返回与参数最接近的整数,Math.round(11.5)==12 Math.round(-11.5)==-11

8.数组有没有length()这个方法? String 有没有length()这个方法?

这是个陷阱,数组是一种数据结构,而不是一个类,而String是一个类,所以有方法length(),数组这种数据结构有的只是length属性;

9.在JAVA 中,如何跳出当前的多重嵌套循环?

可以使用break;这里注意普通的break只能跳出一层循环,而使用标号就可以跳出多重循环;使用return直接连下面所有的程序都不执行了,这点要注意!

10.构造器是否能被override,能够被overload,能够被继承?override与overload的区别?

  • 构造器Constructor 不能被继承,因此不能重写Overrid,但可以被重载Overload
  • 前面“多态”里讲了的;同一个类与不同的类的区别;

11.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?[hashcode的存储机制]

不对,有相同的hash code

结论(没太明白,先记着):

  • 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等
  • 如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等

12.以下二条语句返回值为true 的有: 
A:“beijing”==“beijing”; 
B:“beijing”.equalsIgnoreCase(new String(“beijing”));

结论:A和B,A中两个Beijing是没有new出来的,所以指向的堆地址相同,但是后面B的new的指向不同的堆地址;==对比的是物理地址;equals对比的是值得大小;

13.我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

 1 public String translate(String str){
 2 String tempStr = "";
 3 try{
 4 tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
 5 tempStr = tempStr.trim();
 6 }catch (Exception e){
 7 System.err.println(e.getMessage());
 8 }
 9 return tempStr;
10 }

14.abstract class 和interface 有什么区别?接口中是否可以定义静态方法?

先了解抽象方法:它只有声明,而没有具体的实现,也就是方法体。例如:public void fun();

抽象类(abstract class):

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

  • 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
  • 抽象类不能用来创建对象;
  • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类;

抽象类和普通的类并没有区别;

接口(interface):

接口中可以有变量和方法,其中的变量会被隐式地指定为public static final变量,方法会被隐式地指定为public abstract方法且只能是public abstract方法;且所有的方法不能有具体的实现;如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。但是对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法();

 两者区别:

  • 抽象类可以有自己的实现方法,但是接口只能有public abstract方法;
  • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口;
  • 设计层次上:
    • 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象;
    • 对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动;

接口中不能定义静态方法:一个类要实现接口中的方法,其实就是对接口方法的重写。而要实现静态方法,就必须重写接口中的静态方法;如果可以定义抽象静态方法static,设 static abstract method(); 是抽象类A的方法,那么因为是静态方法那可以用A.method(); 而这个方法又是抽象的没有方法体,掉用了怎么执行呢?

15.java问什么不允许在静态方法中访问非静态方法或变量?

静态方法是属于类的,而普通方法是属于对象的。属于类的静态方法可以在对象不存在的时候就能访问到,而普通方法必须先new一个对象才能用这个对象访问。当我们访问调用静态方法的时候(使用类名.静态方法名)这个时候就没有对象创建,所以普通方法是访问不到的。为了避免这种错误,所以java就不允许在静态方法中访问非静态方法。

16.Static inner class(静态嵌套类)与Inner Class(内部类)有什么区别?

使用方式:

1 static class Outer {
2     class Inner {}
3     static class StaticInner {}
4 }
5 
6 Outer outer = new Outer();
7 Outer.Inner inner = outer.new Inner();
8 Outer.StaticInner inner0 = new Outer.StaticInner();

静态内部类的作用:只是为了降低包的深度,方便类的使用,静态内部类适用于包含类当中,但又不依赖与外在的类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用;

非静态内部类的不同之处:可以自由使用外部类的所有变量和方法;

17.静态变量和实例变量的区别?

静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它

18.写clone()方法时,通常都有一行代码,是什么?

clone的用途与含义:https://blog.csdn.net/u011514810/article/details/52345113

clone的实际使用:http://www.cnblogs.com/o-andy-o/archive/2012/04/06/2434904.html

19.GC 是什么? 为什么要有GC?GC会有内存泄漏吗?

GC:垃圾回收器,用于内存的管理,准确的说是用来管理heap内存的,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”,如果没有索引指向相应对象的内存区域,GC会在固定时间进行内存回收,但是stack内存的却是根据代码中变量是否超过了变量的作用域而被java回收。扩展:前面的stack内存和heap内存的区别;在扩展:研究JVM机制;

GC会发生内存泄漏,当存在没有用却又有索引指向他的时候就无法回收相应内存;

20.String s=new String(“xyz”);创建了几个String Object?

两个对象,一个是"xyx",一个是指向"xyx"的引用对象s;

20.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数

21.说出一些常用的类,包,接口,请各举5 个;

22.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)?

可以继承其他类或实现其他接口

23.在java 中一个类被声明为final 类型,表示了什么意思?

表示该类不能被继承,是顶级类



以上是关于java基础知识整理的主要内容,如果未能解决你的问题,请参考以下文章

JSP页面开发知识点整理

小程序各种功能代码片段整理---持续更新

常用python日期日志获取内容循环的代码片段

为 Blogger 上的博客格式化代码片段 [关闭]

Java基础知识整理

Java语言基础之方法的设计