学习笔记: Java基础+集合+多线程+JVM

  • Post author:
  • Post category:java


目录



Java基础



Java的特点



面向对象和面向过程的区别

  • 面向过程:

    面向过程是一种以过程为中心的编程思想。面向过程的性能比面向对象高,因为类的调用需要实例化,开销大,比如单片机,嵌入式开发等一般都采用面向过程开发。
  • 面向对象:

    因为对象具有封装,继承,多态的特性,所以面向对象易维护,易复用,易扩展,可以设计出低耦合,更灵活和更易维护的系统。



面向对象的特性以及你对这些特性的理解

  1. 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
  2. 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
  3. 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调

    用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西。
  4. 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

注意:默认情况下面向对象有 3 大特性,封装、继承、多态,如果面试官问让说出 4 大特性,那么我们就把抽象加上去



Java语言的特点

  1. 面向对象(封装,继承,多态);
  2. 平台无关性(Java虚拟机实现平台无关性);
  3. 支持多线程(与C++相比,Java语言提供了多线程支持);
  4. 支持网络编程;
  5. 编译与解释并存;
  6. 可靠性;
  7. 安全性;



Java和C++的区别

  • 都是面向对象的语言,都支持封装,继承和多态;
  • Java不提供指针来直接访问内存,程序内存更安全;
  • Java的类是单继承,而C++支持多继承;虽然Java的类不可以多继承,但接口可以多继承;
  • Java有自动内存管理机制,不需要程序员手动释放无用内存;
  • 在C语言中,字符串或者字符数组的最后都会有一个‘\0’来表示结束。但在Java语言中没有结束符这一概念。



什么是Java程序的主类,应用程序和小程序的主类有什么不同?

一个程序中可以有多个类,但只能有一个类是主类。主类是Java程序执行的入口点。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承来自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。

应用程序是从主线程启动的(即main()方法),而applet小程序中没有main()方法,主要是嵌在浏览器页面上运行(调用init()或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。



import java和javax的区别

JavaAPI所必需的包是java开头的包,javax当时只是扩展API包来使用。随着时间推移,javax逐渐地扩展为Java API的组成部分。但是将javax包移动到java包会消耗大量时间和会破坏一堆现有的代码。最终决定javax包将成为API的一部分。



获取用键盘输入常用的两种方法?

  • 方法一:通过Scanner
 	Scanner input = new Scanner(System.in);
	String str=input.nextLine();
	input.close();
  • 方法二:通过BufferedReader
BufferedReader input=new BufferedReader(new     InputStreamReader(System.in));
String str=input.readLine();//readLine()需要throws IOException
input.close();



基本数据类型和引用类型



自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型

装箱和拆箱操作发生在引用类型与值类型之间转换。



数据类型之间的转换

(1)字符串如何转基本数据类型?

调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型。

(2)基本数据类型如何转字符串?

一种方法是将基本数据类型与空字符串(“”)连接(+)即可获得其所对应的字符串;另一种方法是调用 String

类中的 valueOf()方法返回相应字符串。



String类常用方法



是否可以继承String类?

String类是final类,不可以被继承。



String 是基本数据类型吗?

String 是引用类型,底层用 char 数组实现的。



当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 语言的方法调用只支持参数的值传递。



Integer 与 int 的区别

int 是 java 提供的 8 种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是 java为 int 提供的封装类。int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况。



Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math 类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil 的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor 的英文意义是地板,该方法就表示向下取整,Math.floor (11.6)的结果为 11,Math.floor (-11.6)的结果是-12;最难掌握的是 round 方法,它表示“四

舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)

的结果为 12,Math.round(-11.5)的结果为-11。



String 是最基本的数据类型吗?

基本数据类型包括 byte、int、char、long、float、double、boolean 和 short。

java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer 类



String s = new String(“xyz”);创建了几个 String Object? 二者之间有什么区别?

两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String 每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新 String 对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。



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

数组没有 length()这个方法,有 length 的属性。String 有 length()这个方法。



下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”;

答:对于如下代码:

String s1 = “a”;

String s2 = s1 + “b”;

String s3 = “a” + “b”;

System.out.println(s2 = = “ab”);

System.out.println(s3 = = “ab”);

第一条语句打印的结果为 false,第二条语句打印的结果为 true,这说明 javac 编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。

编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,

上面的代码应该只创建了一个 String 对象。

String s = “a” + “b” + “c” + “d”;

System.out.println(s == “abcd”);

最终打印的结果应该为 true。



short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 运算时会自动提升表达式的类型,所以结果是 int 型,

再赋值给 short 类型 s1 时,编译器将报告需要强制转换类型的错误。

对于 short s1 = 1; s1 += 1;由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处

理,因此可以正确编译。



char 型变量中能不能存贮一个中文汉字?为什么?

char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:unicode 编码占用两个字节,所以,char 类型的变量也是占用两个字节。



版权声明:本文为Ddsof_Cai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。