首页 > 编程语言 >Java基础必须会的!

Java基础必须会的!

时间:2023-03-27 17:01:25浏览次数:39  
标签:Java 子类 基础 ---------------------------------------------------------------------


  • 由于此文章是从本人笔记上截取,可能存在格式不正确的情况,尚且谅解,另外把一些链接也放了进去,还请大家仔细看。
  • 面向对象概念?

(1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,需要的时候直接调用对象即可完成所需的功能。

 强调具备功能的对象;

例如:一个公司招人,并不是因为那个人完成不了,而是因为效率比较低,所以找一些人来做所需要的功能,最后直接找负责那个功能的负责人,即可汇聚起来完成软件。

(2)思想特点:

 A:是符合人们思考习惯的一种思想;

 B:将复杂的事情简单化了;

 C:将程序员从执行者变成了指挥者;

 比如我要达到某种结果,我就寻找能帮我达到该结果的功能的对象,如我要洗衣服我就买洗衣机,

 至于怎么洗我不管。

面向对象三要素

 封装(Encapsulation)

 继承(Inheritance)

 多态(Polymorphism)

面向对象五原则

 单一职责原则(SRP)

 开放-封闭原则(OCP)

 Liskov替换原则(LSP)

 依赖倒置原则(DIP)

 接口隔离原则(ISP)

面向对象六视点

 复用(Reusibility)

 扩展(Extensibility)

 分离(Separability)

 变化(Change)

 简约(Simplicity)

 一致(Coherance)

--------------------------------------------------------------------------------------------------------------------------------------------------------

  • 抽象类和接口

抽象类特点抽象类和抽象方法必须用abstract关键字修饰格式

abstract class类名 {}

publicabstract void eat();

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

只有抽象类,其他为空代码块 ,防止被实例化

抽象类不能实例化

那么,抽象类如何实例化呢?

按照多态的方式,由具体的子类实例化。

其实这也是多态的一种,抽象类多态。

抽象类的子类‘’

要么是抽象类

要么重写抽象类中的所有抽象方法

  • ------------------------------------------------------------------------------------------------------------------------------------------------------
  •  接口:·
  • 接口

接口是抽象的,里面的方法跟变量都是抽象的,并且变量系统默认为 final,

方法只能被重写。

接口可以直接创建对象,目标为被继承的人类,

  • ------------------------------------------------------------------------------------------------------------------------------------------------------
  • 构造函数和初始化函数的执行顺序
  • 静态代码块,构造代码块,构造方法的输出顺序优先级。
  • 一切看父类,如果父类子类都有静态代码块,就按顺序执行静态代码块,然后执行父类的构造代码块,构造方法执行完毕之后才会执行子类的构造代码块,构造方法。
  • ------------------------------------------------------------------------------------------------------------------------------------------------------
  • 文件读写和序列化:
  • 字节流输入流:inputStream 读
  • 字节输出流:outputStream 写
  • 字符流输入流:Rredter 读
  • 字符流输出流:Writer 写
  • ------------------------------------------------------------------------------------------------------------------------------------------------------

 

  • 集合——List、Map、Set:

List:ArrayList、LinkedList、Vector


List:有下标,有序,值可以重复

 

ArrayList:有下标,存取有序,可以用for循环与iterator遍历,不安全,查询快,增删慢。

1.2


LinkedList:底层是链表,增删快,查询慢,线程不安全


Vector:线程安全,底层是数组,查询慢于ArrayList

1.0


Map:HashMap,Hashtable,TreeMap


Map

键值对,键不可以为空,值可以为空,可以根据键找到值,无序,无下标,值可以重复

HashMap:

键值对,键与值都可以为空,线程不安全的,效率高

Hashtable

键与值不可以为null,线程安全的,效率低

TreeMap

可以根据一定的顺序进行排序


Set:HashSet TreeSet


Set

无序,存的值不可以重复

HashSet

Set的实现类

TreeSet

可以根据一定的顺序进行排序


------------------------------------------------------------------------------------------------------------------------------------------------------

  • 访问控制:

可见/访问性

在同一类中

同一包中

不同包中 

同一包子类中 

不同包子类中 

 public

yes

yes

yes

yes

yes

 protected 

yes

yes

 no

yes

yes

默认(defualt)

yes

yes

 no

yes

 no

 private

yes

 no

 no

 no

 no


 

Protected  对同包的类和子类是公开的,可访问的,对于其他的则不可访问。

只有public defualt可以修饰类

(1) 在java中有public、protected、private三种显示的修饰符用于控制可见性,package不是显示的修饰

符,它是隐含的,即如果在类、变量等前没加显示的可见性修饰符,那它就是package级别的。如果在类的定义中没有指定package,那么java会把它放在缺省包中,一般来说这个缺省的包就是当前目录。

(2)在子类中的方法如果重载了父类的方法,那么该方法的可见级别应更底或者相同,如父类中的方法是public,那么子类中方法必须是public。

(3) 在java中,一般来说,变量成员最好是private,对它们的访问可以通过public的方法,在这些方法中可以做些控制以保证数据的一致性。这些方法名一般以get和set做为前缀。

 

来自<javascript:void(0)>

  • ------------------------------------------------------------------------------------------------------------------------------------------------------
  • 异常处理:

例如空指针异常

类型转换异常

io中当执行到最后的时候会报一个异常

数组下标越界异常

数据转换异常

异常分为运行时异常与非运行时异常。运行时异常继承了RuntimeException

非运行时异常是除RuntimeException,而且必须解决,否则不可以编译通过

------------------------------------------------------------------------------------------------------------------------------------------------------

  • 泛型:

泛型的好处是在编译的时候检查

类型安全,并且所有的

强制转换都是自动和

隐式的,以提高代码的重用率,提高了集合的安全性。

Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。

注意:并且还要注意的一点是,Java中没有所谓的泛型数组一说

泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。

为了避免类型转换造成的异常。

这种转换不仅显得混乱,更可能导致类型转换异常

ClassCastException,运行时异常往往让人难以检测到。保证列表中的元素为一个特定的数据类型,这样就可以取消类型转换,减少发生错误的机会, 

这也是泛型设计的初衷。

来自<http://baike.baidu.com/link?url=6RLnEjqqr4yNRrJ-4L948aXevqHq9kvseoQQv_Jb58BBHTA1zvYir8mK0wtplcq9e7HnJOl9_03366k3tzVmYa>

------------------------------------------------------------------------------------------------------------------------------------------------------

  • Java关键字:static final Volatile synchronized
  • synchronized:线程安全同步

------------------------------------------------------------------------------------------------------------------------------------------------------

  • Transient this.super等

静态的优点和弊端

优点:

对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份

可直接被类名调用

弊端:

生命周期过长,随着类的消失而消失

访问出现权限,即静态虽好但只能访问静态

Final 最终,定义变量,变量不可被改变,定义方法,方法不可被重写,定义类,类不可以被继承

  • Transient :对象序列化,被修饰后的属性不参与对象的序列化
  • This.super:调用本类的无参构造方法。

----------------------------------------------------------------------------------------------------------------------------------------------------------

  • 多线程及线程同步:

多线程共同操作CPU,每一个线程在CPU上执行,由于线程之间会争夺CPU的使用权,得到使用权的线程会执行,但是CPU在执行一个时间片段之后会放弃线程的执行权,从而多个线程之间会再次争夺,从而出现线程安全问题。

  • 解决方法是加同步代码块或者同步函数。保证每一个线程顺利执行完毕,再交换线程,但是会降低运行效率
  • 设计模式:

单例模式:饿汉式,懒汉式。

保证单一对象,懒汉式有线程安全问题,可以在函数上加上Synchronized解决。

  • UserDao  or Userbean及serverlet
  • 反射:
  • 反射的使用提高了代码的重用性,在不创建对象的前提下获得该类的方法和属性,提高了代码的灵活性,降低了局限性

标签:Java,子类,基础,---------------------------------------------------------------------
From: https://blog.51cto.com/u_15996166/6152519

相关文章