JAVA基础知识个人总结

1.简述static和final的用法

答:

1.1 static:修饰属性,方法,代码块
1.1.1 静态属性:

被static修饰的变量也可以叫类变量,可以通过“类名.属性名” 来访问(共有的类变量与对象无关,只和类有关)
注意:类中的实例变量是在创建对象时被初始化的,并static修饰的属性,会在类加载的时候被创建并进行初始化。类加载只进行一次,所以类变量只会被创建一次。

1.2 静态方法:类名.方法名 直接访问

注意:static修饰的方法,不能直接访问本类中的非静态成员(包括方法和属性)。本类的非静态方法可以访问本类的静态成员(包括属性和方法),也可以调用静态方法。

1.2final:修饰变量、类、方法
1.2.1 修饰变量

被final修饰的成员变量就是常量(常量名大写),一旦赋值不能改变。
修饰局部变量:
修饰基本数据类型——>变量的值不能改变。
修饰引用类型——>引用只能指向固定的对象。
修饰实例变量:
默认值不生效,可以再赋值。

1.2.2 修饰方法:不能被子类覆盖
1.2.3 修饰类不能被继承

注意:在一个final类中的所有方法,默认都是final的
final 不能由来修饰构造方法

2. abstract class和 interface有什么区别?

2.1 相同点

A. 两者都是抽象类,都不能实例化。
B.interface实现类及abstract class的子类都必须实现已声明的抽象方法。

2.2 不同点

A. interface 需要实现,要用关键字 implements。
而abstract class需要继承, 使用关键字 extends。
B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
C. interface 强调特定功能的实现,而 abstract class 强调的是所属关系。
D. 尽管interface 实现类及 abstract class 的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明(declaration, 没有方法体),实现类必须要实现。而abstract class 的子类可以有选择的实现。

面向对象的三大基本特征?

封装性:
封装性为类的公用成员提供公有、缺省、保护和私有等访问权限,
目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:
允许通过继承父类的某些特性或者全部特性而产生全新的类,
子类不仅可以直接继承父类的共性,而且也可以创建他特有的个性。
多态性:
是指在基类中定义属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,
多态性有两种表现形式: 重载和覆盖

Error和Exception

Error:
指不可能指望程序能处理的这样的情况,比如内存溢出
Exception:
表示需要捕获或者需要程序进行处理的异常。
是一种设计或实现问题。
也就是说,他表示如果程序运行正常从不会发生的情况。
常见异常:
NullPointerException : 空指针异常,当操作一个空引用时会出现此错误。
NumberFormatException : 数据格式转换异常,数据格式转换出现问题。
ClassCastException : 强制类型转换,类型不匹配时出现此异常。
ArrayIndexOutOfBoundsException : 数组下标越界异常,当使用一个不存在的数组下表是出现此异常。
ClassNoFoundException:指定类找不到,类名称和路径加载错误,通常是视图通过字符串来加载某个类时可能引发异常。
IllegalArgumentException:方法传递参数错误。
NoCalssDefFoundExcetion:未找到类定义错误。
SQLException:SQL异常。

多线程的实现方式,同步实现方式?

多线程的两种实现方式:
  • 继承 Thread 类
  • 实现 Runnable 接口
实现同步的两种方法:
  • 同步方法:在方法返回类型前面加上synchronized 关键字
  • 同步代码块:synchronized(这里写需要同步的对象){…}

Java 与其他语言相比有什么优点?

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。
Java技术具有卓越的通用性、高效性、平台可移植性和安全性。
Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。
Java是纯面向对象开发,功能强大,分支众多。

Java的跨平台原理

Java源程序(.java文件)通过编译器便已成为Class文件(字节码文件),
而他的class文件是基于字节码(一byte为单位储存的文件),
而字节码文件是描述程序要运行的虚指令的集合,这个集合与任何平台无关,
但Java虚拟机认识它(只要在不同的平台下部署相应的JRE,运行JVM!就可以了)

Java 中的集合

  • list(列表)
    List和Set继承了collection接口,为map不是。
    List中存放元素有顺序并且可以重复。
  • set(集)
    set中存放的元素是无序并且不可能重复的。
  • map(映射)
    Map中存放的是键值对。
ArrayList和LinkedList的区别
  • ArrayList是实现了基于动态数组的数据结构。
  • ArrayList查询速度快,增删慢。因为LinkedList要移动指针。
  • LinkedList基于链表的数据结构。
  • LinkedList增(add)删(remove)速度快,查询慢。因为ArrayList要移动数据。
HashMap和HashTable的区别
  • HashTable实现了Map接口,除了HashTable具有同步功能之外,它和HahMap的用法是一样的
  • 在使用时一般是用ArrayList代替Vector,LInkedList代替Stack,HashMap代替HashTable,即使多线程中需要同步,也要用同步包装类。

在这里插入图片描述

String StringBuffer和StringBuilder的区别

  • 运行(执行)速度:
    StringBuilder > StringBuffer > String
  • 线程安全
    StringBuilder线程不安全
    StringBuffer线程安全
  • StringBuilder: 适用于单线程下在字符缓冲区进行大量操作的情况。
  • StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况。

线程的几种实现方式

  • extends(继承) — Thread类
  • implements(实现)— Runnable接口
  • implements(实现)— Callable 接口
    1. Callable规定的方法是call(),Runnable规定的方法是run()。
    2. Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
    3. call方法可以抛出异常,闰方法不可以。
    4. 运行Callable任务可以拿到一个Future对象,表示异步计算结果。

线程的几种启动方式

  • 继承Thread类。重写run方法,在run方法里填写响应的逻辑代码。
  • 实现Runnable接口。并编写run方法。 以实现接口的方式创建线程可以对类进行更好的扩展。该类可以继承其他类来扩展自身去求,相比第一种方法更灵活、扩展性更强。
  • 实现Callable接口创建线程与Runnable接口不同之处的在于:如果想要线程在执行完之后得到带有返回值的线程就要实现Callable接口。

同步和异步的区别

  • 如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
  • 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.

构造器如何工作

  • 分配对象空间,并将对象中成员初始化为0或者为空,java不允许用户操作一个不定值的对象。
  • 执行属性值的显式初始化
  • 执行构造器
  • 将变量关联到堆中的对象上

super与 this的区别

不同点:
		1.super()主要是对父类构造函数的调用,this()是对重载构造函数的调用。
		2.super()主要是在继承父类的子类构造函数中使用,在不同的类中使用
		3. this()主要是在同一类中的不同构造函数中使用。
相同点:
		1. super()和thsi()都必须在构造函数的第一行进行调用,否则就是错误的。

接口与实现类的区别

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

字符串储存机制

字符串会储存在常量池中。在给字符串赋值的时候,JVM会检查常量池中是否易迅在该字符串,如果存在就直接饮用该地址。否则会在常量池中创建该字符串然后引用该地址。

如何创建反射对象

  • 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()
  • 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值