关于Java你该知道的几个基础小知识【奔跑吧!JAVA】

举报
Jack20 发表于 2021/06/14 12:20:08 2021/06/14
【摘要】 1.java语言是强类型还是弱类型语言?为什么?Java 是强类语言,在使用变量时有如下规则:       (1)变量必须声明,并且初始化以后才能使用。       (2)变量必须有明确的类型(type)。       (3)变量不能重复定义。         是一种弱类型语言,即变量在声明时,不能明确声明其类型变量的类型是在运行时确定的,并且可以随时改变2.JAVA的数据类型有哪些?⑴基本...

1.java语言是强类型还是弱类型语言?为什么?

Java 是强类语言,在使用变量时有如下规则:

       (1)变量必须声明,并且初始化以后才能使用。

       (2)变量必须有明确的类型(type)。

       (3)变量不能重复定义。

         是一种弱类型语言,即变量在声明时,不能明确声明其类型

变量的类型是在运行时确定的,并且可以随时改变


2.JAVA的数据类型有哪些?

⑴基本数据类型(八种):

                  整型:    byte 1字节, short 2字节, int 4字节, long 8字节

浮点型:    float  4字节, double  8字节

【float 类型共 32位(不 int相同),其中 1位为符号位, 指数 8 位, 尾数23 位。】

【double 类型能表示64位,其中1 位符号位,11位指数,52位尾数】

【浮点数的字面量默认是double】

字符型:    char 2字节【unicode编码值】

boolean型:  boolean  1字节  【值只有true和false】


隐式类型转换:

正方向:      charà byteàshortà intàlongàfloatàdouble

     ⑵引用类型(自定义类型):对象:比如String

                                                               数组:int[]

                                                               接口:interface


3.JAVA中成员变量和局部变量的区别?

   ⑴成员变量:是在类范围内定义的(也叫成员属性)

        类属性:使用static修饰的就是类属性。

作用域: 类属性的作用域与这个类的生存范围相同,它作为类的一个成员,与类共存亡。只要类存在,程序就可以访问该类的类属性。

         实例属性:不被static修饰的就是实例属性。

作用域: 实例属性则从这个类的实例(对象)被创建开始存在,直到系统完全销毁这个实例,它作为实例(对象)的一个成员,与实例(对象)共存亡。只要实例存在,程序就可以访问该实例的实例属性。

⑵局部变量:在一个方法内定义的变量。(包括方法的形式参数)

         1.形参:作用域是整个方法体

         2.方法局部变量:一个代码块中

         3.代码块局部变量:一个代码块中

注意:局部变量除了形式参数外,都必须显示初使化(必须显示指定初使值)。否则不可以访问它们。形式参数不须显示初使化,它在被调用时由系统完成。


4.java中,++和后++的区别是什么?

   i++,  后++,  先将 i 的值作为整个表达的值,  然后将i 增加 1。

    ++i,  先++,  先将 i 增加1,  然后将 i 的值作为整个表达的值。


5.在JAVA中final关键字的特点有哪些?

final可以修饰类,方法,变量

      final 修饰的类,不能再被继承

final修饰的方法,不能覆盖final 方法

final 修饰的变量

          final的局部变量,只能初始化不能改

      final的方法参数,不能改

    final 的引用,引用指向不能改,但是对象的属性可以改


6.JAVA中抽象类和接口的区别是什么?

抽象类--不具体的类

 1 抽象方法,只有行为的概念,没有具体的行为实现。

   使用:abstract 关键字修饰,并且没有方法体。

 2 包含抽象方法的类,就一定是抽象类。

   使用: abstract 关键字修饰,包含抽象方法。

  如:平面图形一定可以计算面积。

 public abstract class CRMSystem{
      public abstract Client addClient(
               String name, String qq);
  }

 3. 抽象方法和抽象类非常适合作为系统的分析和设计的工具。

 4. 抽象类不能直接创建实例。可以定义引用变量。

 5. 抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法。

接口:

 1. 接口:全部的方法都是抽象方法,全部的属性都是常量。接口用来表示纯抽象概念,没有任何具体的方法和属性。

 2 .不能实例化,可以定义变量。

 3 .接口变量可以引用具体实现类的实例。

 4 .接口只能被实现,一个具体类实现接口,必须使用全部的抽象方法。

 5 .接口之间可以继承。

 6 .一个具体类可以实现多个接口,实现多继承现象,表示:一个概念即是XXX也是XXX.

 7 .接口中的属性,默认是常量 public static final

 8 .接中的方法一定是:public abstract

 9 .实现一个接口,使用关键字implements, 实现实际上是一种继承关系。接口和实现类是父子类型的关系


7.JAVA中重载和重写的区别是什么?

重载:方法名相同,参数不同(参数类型或者长度)

                   重载和修饰符和返回类型无关。

                  一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。

  二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。


重写:两同两小一大(规则)

两同:方法名相同 参数类型 相同

两小:返回值类型(基本数据类型要一致,引用类型可以是其子类)

  抛出的异常要小(也可以抛出父类型的异常的部分异常,或者不抛出异常)

一大:访问控制修饰符大

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

 (2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

 (3)只有实例方法才能被重写,超类中的final方法不能被重写。

 (4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。


8.什么是集合框架?

集合框架包括集合不映射(Collection and Map)

         List 元素有先后次序的集合, 元素有 index 位置, 元素可以重复,继承自 Collection 接口,实现类: ArrayList, Vector, LinkedList

         List 表示有先后次序的对象集合

                  ArrayList是使用变长数组算法实现的,ArrayList 实现自 List

                          1)  ArrayList 和 Vector 的比较

                                Vector(1.0 版本提供的),线程安全的,效率稍低,也是使用变长数组算法实现的,继承自 List 接口

                      ArrayList,线程不安全的,效率高速度快(现在较常用)


                         2) ArrayList 和 LinkedList 的比较

  LinkedList 是采用双向循环链表实现的 List

                            ArrayList 是采用变长数组算法实现的的 List

                                   在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

                                   ArrayList查询速度快,而LinkedList增删速度快


 Set 元素无续, 不能重复添加, 是数学意义上的集合, 继承自 Collection 接口

  实现类: HashSet(是一个只有 Key的 HashMap),使用Set时要重写hashCode,equals方法

         HashMap 以键-值对(关键字:值)的形式存储对象,关键字 key 是唯一的、不重复的

1)  key 可以是任何对象,Value可以任何对象

2)  (key:value)成对放置在集合中

3)  重复的 key 算一个,重复添加是替换操作(会覆盖原来的元素)

4)     HashMap 根据 key 检索查找value 值

HashMap     新,非线程安全,不检查锁,快

Hashtable    旧  (JDK1.2 版本以前),线程安全,检查锁,慢一点(差的很小)


9.java中内部类的分类都有什么?它们各自都有什么特点?

1)  根据位置的不同,Java 中的内部类分为四种:

  静态内部类  

          使用 static 修饰,声明在类体中

          静态内部类中可以访问外部类的静态成员

  成员内部类

         声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例

         内部类实例可以访问共享外部类的成员变量(很常用)

          如:链表的节点就可以定义为内部类

  局部内部类  把类声明在方法中,就是局部内部类,作用域

           类似局部变量(很少见)

  匿名内部类  

                  匿名类,非常常见,可以写在任何地方,就像一般的语句

语法更象是创建对象:Date d = new Date(){//...};

匿名类是对原类的一个继承,同时创建了实例,{} 就是继承以后的类体

类体中可使用所有类的语法

匿名类不能写构造器

匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现

2)  任何内部类都编译成独立的class 文件

3)  最大的作用:封装!


10.Java中的异常有哪些区别是什么?

6.png

     异常是程序运行过程过程出现的错误,在Java中用类来描述,用对象来表示具体的异常。Java将其区分为Error与Exception,Error是程序无力处理的错误,Exception是程序可以处理的错误。

  1)Error与Exception

    Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。Error:一般指虚拟机相关问题,如虚拟机崩溃,虚拟机出错等这种错误无法恢复或不可捕获,将导致应用程序中断。对于Error一般不编写针对性代码对齐进行处理。

Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。

2)运行时异常和非运行时异常

检查异常:当代码中抛出了一个检查异常,那么编译器在编译代码时会检查代码是否有处理该异常的代码片段,没有则编译不通过。

非检查异常:编译器不检查该类异常抛出是否有代码处理。

(ClassNotFoundException不是RuntimeException的子类)

    运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException,ArrayIndexOutOfBoundsException, ClassCastException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

         自定义异常 (自己定义异常表达错误)   

                 MyException extends Exception  检测(check)异常

                 MyException extends RuntimException 运行时(runtime)异常

【奔跑吧!JAVA】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/265241

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。