Java基础复习



 QIn思考者日记网-束洋洋个人博客

本篇幅对java基础的复习与整理,一些面试常问到的基础知识
Java基本类型与引用类型的区别?
8种基本类型
1、4种整型
byte、short、int、long
2、二中浮点型
float、double
3、一种Unicode编码的字符单元
char
4、一种真值类型
boolean
 
3种引用类型
类(class)
接口(interface)
数组(array)
 
基本类型的值就是一个数字,字符或者一个布尔值
引用类型就是地址,所指向的内存中保存着变量所表示的一个值或一组值。
 
 
我们都知道double属于Java中的基本类型,bigdecimal为什么不能做为Java的基本类型?
double是不精准的数据浮点类型,bigdecimal是精准的数据类型处理类。
 
Java中普通代码块、构造代码块、静态代码块的区别?
普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”。
构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数
  1. package com.syy.test;
  2.  
  3. /** 测试代码块
  4. * 直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
  5. * 构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
  6. * @author shuyangyang
  7. * @E-Mail:shuyangyang@aliyun.com
  8. * @Bolg:http://www.shuyangyang.com.cn
  9. * @date 2017年4月9日 上午10:29:24
  10. */
  11. public class TestCode {
  12.  
  13. {
  14. System.out.println("匿名类");
  15. }
  16. public TestCode(){
  17. System.out.println("构造类");
  18. }
  19. {
  20. System.out.println("第二匿名类");
  21. }
  22. public static void main(String[] args) {
  23. new TestCode();
  24. }
  25.  
  26. }
  27. //输出结果
  28. 匿名类 第二匿名类 构造类
 
静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
  1. package com.syy.test;
  2.  
  3. /** 测试代码块
  4. * 静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。
  5. * 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
  6. * 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
  7. * 注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
  8. * @author shuyangyang
  9. * @E-Mail:shuyangyang@aliyun.com
  10. * @Bolg:http://www.shuyangyang.com.cn
  11. * @date 2017年4月9日 上午10:29:24
  12. */
  13. public class TestCode2 {
  14.  
  15. {
  16. System.out.println("匿名类");
  17. }
  18. static{
  19. System.out.println("静态代码块");
  20. }
  21. public TestCode2(){
  22. System.out.println("构造方法");
  23. }
  24. {
  25. System.out.println("第二匿名类");
  26. }
  27. static{
  28. System.out.println("第二静态代码块");
  29. }
  30. public static void main(String[] args) {
  31. new TestCode2();
  32. }
  33.  
  34. }
  35. /**
  36. 输出结果:
  37. 静态代码块
  38. 第二静态代码块
  39. 匿名类
  40. 第二匿名类
  41. 构造方法
  42. * */
 
静态方法、主方法、构造方法、匿名类的执行顺序?
  1. package com.syy.test;
  2.  
  3. /** 测试代码块
  4. * 静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。
  5. * 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
  6. * 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
  7. * 注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
  8. * @author shuyangyang
  9. * @E-Mail:shuyangyang@aliyun.com
  10. * @Bolg:http://www.shuyangyang.com.cn
  11. * @date 2017年4月9日 上午10:29:24
  12. */
  13. public class TestCode2 {
  14.  
  15. {
  16. System.out.println("匿名类");
  17. }
  18. static{
  19. System.out.println("静态代码块");
  20. }
  21. public TestCode2(){
  22. System.out.println("构造类");
  23. }
  24. {
  25. System.out.println("第二匿名类");
  26. }
  27. static{
  28. System.out.println("第二静态代码块");
  29. }
  30. public static void main(String[] args) {
  31. System.out.println("主方法输出");
  32. new TestCode2();
  33. }
  34. }
  35. /**
  36. 输出结果:
  37. 静态代码块
  38. 第二静态代码块
  39. 主方法输出
  40. 匿名类
  41. 第二匿名类
  42. 构造类
  43. * */
 
 执行顺序:静态代码块-》主方法-》匿名类-》构造方法
 

Java变量命名规范:不能以数字开头?QIn思考者日记网-束洋洋个人博客

1、语法规范;
2、词法分析器的关系:词法分析器分为三步:第一步把词法单元分割出来,第二步判断词性,是数字,是普通变量,是关键字,还是数据类型……第三步确定其符合本词性所限定的语法规则,然后进行下一步处理。如果第一个字符就能判断词性的话,接下来就是把这个词交给相应词性的正则表达式匹配器来判断是否通过

如果数字能做普通变量的开头,那么就要先匹配数字,直到遇到特定字符串再分配给普通变量的正则表达式匹配器来判断是否通过QIn思考者日记网-束洋洋个人博客

这样对分析器的效率只有很小的影响。实际上关键字和普通变量的正则表达式就是重合的,比如c语言的while,当分析器读到e的时候也不能确定它是一个关键字还是普通变量QIn思考者日记网-束洋洋个人博客

所以现代语言做出这种决定更多是从人的阅读习惯和简化词法分析器结构出发。
3、举例:int 1 = 1;
if(1==2) 这种代码怎么解释?
 
 
Java三大特性:
1、封装
就是将对象的属性和实现细节隐藏起来,仅对外公开接口,控制程序中的属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增加安全性、可重用性和简化编程,使用者不必了解具体的实现细节,而只是通过外部接口以特定的访问权限来使用类成员。
封装的大概原则:1、把尽可能多的东西隐藏起来,对外提供简便的接口;2、把所有属性隐藏;3、封装的好处:将变化隔离,便于使用,提高重用性、安全性。
 
 
2、 继承(extends)
继承是一种联结层次模型,允许和鼓励类的重用,它提供了一种明确表示供述的方法。对象的一个新类可以从现有的类中派生,这个过程称为继承。新类继承了原始类的属性和方法,新类称为原始类的派生类(子类),而原始类称为派生类的基类(父类)。子类可以从父类继承特性(属性、方法、实例变量等),并且子类可以修改和增加新的方法使之更适合特殊的需要。私有成员能继承,但是由于访问权限的控制,在子类中不能直接使用父类的私有成员。并Java中是单继承的,一个子类只能有一个父类。继承中的构造方法,当生成子类对象时,Java默认首先调用父类中的不带参数的构造方法,然后执行构造方法,生成父类的对象。接下来再调用子类的构造方法,生成子类的对象。(要使用子类的对象,就必须生成父类的对象,没有父类对象就没有子类对象。比如,没有爹娘就没有子女)
如果子类使用super显示调用父类的某个构造方法,那么在执行的时候就会寻找与super对应的构造方法而不会再去寻找父类不带参数的构造方法。与this一样,super也必须作为构造方法的第一条执行语句,前面不能有其他可执行语句。
当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的。 
 
重载与重写
重载是让类以统一的方式处理不同类型数据的一种手段。多个函数名同时存在,具有不同的参数个数/类型
重载的时候,方法名要一样,但是参数类型/个数 不一样,返回值类型可以相同也可以不相同。
 
重写是子类对父类的函数重新定义,如果子类中定义某方法与父类方法有相同的名称和参数,即是方法重写。方法重写也称方法覆盖
 
3、多态
在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同,这种现象称为类的多态。类的多态性体现在两方面:一是方法的重载上,包括成员方法和构造方法的重载;二是在继承过程中,方法的重写。
多态性是面向对象的重要特征。方法重载和方法覆写实际上属于多态性的一种体现,真正的多态性还包括对象多态性的概念。
对象多态性主要是指子类和父类对象的相互转换关系。
a) 向上类型转换(upcast):比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
b) 向下类型转换(downcast):比如将Animal类型转换为Cat类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。
 
 
Java接口和抽象类
1、接口和抽象类最大的一个区别就是Java抽象类可以提供某些方法的部分实现,而接口只能定义不可以有实现,而且所有成员默认为公有的,实现接口时必须实现该接口定义的所有方法。但是,接口可以允许多重继承。任何一个实现接口所规定的方法类都可以具有这个接口的类型,而一个类可以实现多个接口,从而这个类就拥有了多种类型。
2、抽象类中可以存在私有成员,方法允许实现,继承抽象后可以不去实现抽象方法,但此时子类也必须声明为抽象类。抽象类不能多重继承。
 
Java有了抽象类为什么要使用接口?
1、接口是一组规范,抽象类只是类;
2、在继承抽象类时,必须覆盖该抽象类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目类型的参数,具有相同的返回值,这一点与接口相同。
3、当抽象父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用方法,子类也可以重写父类中的方法,而实现一个接口的时候,是一定要实现接口中定义的所有方法,而不可遗漏任何一个。
4、抽象类不能产生对象的可以由它的实现类来声明对象。
在实现接口时,我们也常写一个抽象类来实现接口中某些子类所需要的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去每个都要实现通用方法的重复工作。
 
 

 

(转载本站文章请注明作者和出处 思考者日记网|束洋洋个人博客 ,请勿用于任何商业用途)

『访问 思考者日记网404页面 寻找遗失儿童』

告知
  •     本站90%以上文章均属原创,部分转载已加上原作者出处。 如需转载本站文章请您务必保留本站出处!
  •     打广告评论者请自重,请为广大网友提供一个健康干净的网络空间。
  •  感谢主机屋提供网站空间;
  •  感谢万网阿里云提供域名解析;
  •  感谢EmpireCMS提供CMS系统;
  •  感谢bootstrap展示本站前端页面;
  •  感谢Glyphicons Halflings提供字体;
  •  感谢大家一直以来对本站的喜爱,感谢大家!
近期文章 建议与反馈

 

网友评论
我也来说两句
点击显示

 

点击显示弹幕