JavaSE面向对象学习笔记总结

1,构造函数:

用于给对象进行初始化,是给与之对应的对象进行初始化,它具有正对性,函数中的一种。

特点:
1. 该函数的名称和所在的类的名称相同
2. 不需要定义返回类型
3. 该函数没有具体的返回值

记住:所有对象创建时,都需要初始化才可以使用。

注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自定生产一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果该类中自己定义了构造函数,那么默认的构造函数就没有了。

2,封装(面向对象特征之一)

this

代表对象,就是所在函数所属对象的引用。

this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。

开发时,什么时候使用this呢?在定义功能时,如果该功能内部使用到了该工作的对象,这时就用this来表示这
个对象。

this还

static

关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)

特点:
1. 想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。
2. 被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式:类名.静态方式。
3. 静态随着类的加载而加载。而且优先于对象存在。

3,设计模式

单例设计模式

解决的问题:保证一个类在内存中的对象的唯一性。比如:多程序读取一个配置文件,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要改配置文件对象在内存中是唯一的。

Runtime()方法就是单例设计模式进行设计的。

  • 饿汉式

    class Single{
    
    }
    
  • 懒汉式

4,继承(面对对象特征之一)

final
抽象类:abstract
接口:interface
注意:接口中的成员都有固定的修饰符
成员变量:public static final 
成员方法:public abstract
eg:
interface Inter{
    public static final int x = 3;
    public abstract voidshow();
}

5,多态(面对对象特征之一)

函数本身就具备多态性,某一种事物有不同的具体表现。

体现:父类引用或接口的引用指向了自己的子类的对象。//Animal a = newCat();

    class Person{

6,内部类

如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。这时,为了方便设计和访问,直接将A类定义在B类中, 就可以了。A类就称为内部类。内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。

当内部类定义在外部类中的成员位置上,可以使用一些成员修饰符修饰private、static。
1. 默认修饰符。
2. 私有修饰符
3. 静态修饰符
    如果内部类被静态修饰,相当于外部类,会出现访问局部性,只能访问外部类中的静态成员。
    注意:如果内部类中定义了静态成员,那么该内部类必须是静态的。

内部类编译后的文件名为:“外部类名$内部类名.java”

为什么内部类可以直接访问外部类中的成员呢?

那是因为内部类中都持有一个外部类的引用。这个引用是 外部类名.this
内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。
当内部类被定义在局部位置上,只能访问局部中被final修饰的局部变量。

7,匿名内部类

没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。

匿名内部类的格式:new 父类名$接口名(){ 定义子类成员或者覆盖父类方法 }.方法

匿名内部类的使用场景:

当函数的参数是接口类型引用时,如果接口中的方法不超过3个。可以通过匿名内部类来完成参数的传递。
其实就是在创建匿名内部类时,该类中的封装的方法不要过多,最好两个或者两个以内。

8,异常

异常:就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。
——java.lang.Throwable:
Throwable:可抛出的。
|–Error:错误。一般情况下,不编写正对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。
|–Exception:异常,可以有正对性的处理方式。

9,多线程

进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。
线程:其实就是进程中的一个程序执行单元,一条执行路径。进程负责的是应用程序的空间的表示。线程负责的是应用程序的执行顺序。

一个进程至少有一个线程在运行,但一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区,自己的变量。
jvm在启动时,首先有一个主线程,负责程序的执行,调用的是main函数。主线程执行的代码都在main方法中。
当产生垃圾时,收垃圾的动作,是不需要主线程来完成,因为这样,会出现主线程中的代码执行会停止,会去运行垃圾回收器代码,效率较低,所以单独一个线程来负责垃圾回收。

  • 同步代码块

    java中提供了一个解决方式:就是同步代码块。
    格式:
    synchronized(对象) { // 任意对象都可以。这个对象就是锁。
    需要被同步的代码;
    }

  • 同步函数

    其实就是将同步关键字定义在函数上,让函数具备了同步性。
    同步函数是用的哪个锁呢?
    通过验证,函数都有自己所属的对象this,所以同步函数所使用的锁就是this锁。

当同步函数被static修饰时,这时的同步用的哪个锁呢?
静态函数在加载时所属于类,这时有可能还没有改类产生的对象,但是该类的字节码文件加载进内存就已经被封装成了对象,这个对象就是该类的字节码文件对象。
所以静态加载时,只有一个对象存在,那么静态同步函数就使用的这个对象。这个对象就是类名.class

同步代码块和同步函数的区别?

同步代码块使用的锁可以是任意对象。
同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。
在一个类中只有一个同步,可以使用同步函数。如果有多同步,必须使用同步代码块,
来确定不同的锁,所以同步代码块相对灵活一些。

Lock接口

多线程在JDK1.5版本升级时,推出一个接口Lock接口。

解决线程安全问题使用同步的形式,(同步代码块,要么同步函数)其实最终使用的都是锁机制。

所以 同步是隐式的锁操作,二Lock对象是显示的锁操作,它的出现就替代了同步。

String字符串:

StringBuffer字符串缓冲区

StringBuilder字符串缓冲区

Integer对象

集合框架

用于存储数据的容器。
特点:
1. 对象封装数据,对象多了也需要存储。集合用于存储对象。
2. 对象的个数确定可以使用数组,但是不确定怎么办?可以用集合。因为集合是可变长度的。

集合与数组的区别:

  1. 数组是固定长度的;集合是可变长度的。
  2. 数组可是存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
  3. 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同的数据类型。

Collection接口

Collection:
|——List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|——Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素的唯一性。

Inerator接口:

迭代器:是一个接口。作用:用于取集合中的元素。

List接口:

List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|——ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|——LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|—— Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

Set接口:

Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
|——HashSet:底层数据结构是哈希表,线程时不同步的。无序,高效;HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。当元素的hashCode值相同是,才继续判断元素的equals是否为true。
如果为true,那么视为相同元素,不存。如果为false,那么存储。
如果hashCode值不同,那么不判断equals,从而提高了对象比较的速度。
|——LinkedHashSet:有序,hashSet的子类。
|——TreeeSet:对Set集合中的元素的进行指定顺序的排序。不同步。Tree底层的数据结构就是二叉树。

Map集合:

|——Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。
|——HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null值。替代了Hashtable。
|——TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。

Collections:

它的出现给集合提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法。
Collections.sort(list);//list集合进行元素的自然顺序排序
Collections.sort(list,new ComparatorByLen());//按指定的比较器方法排序

Arrays:

用于操作数组对象的工具类,里面都是静态方法。

泛型:

jdk1.5 版本以后出现的一个安全机制。表现格式:< >

好处

1. 将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题。
2. 避免了强制转换的麻烦。

只要带有了< >的类或者接口,都属于带有类型参数的类或者接口,在使用这些类或者接口时,必须给< >中传递一个具体的引用数据类型。

API—java.lang.System:

属性和行为都是静态的。

API—java.lang.Runtime;

类中没有构造方法,不能创建对象。

API—java.util.Math:

用于数学运算的工具类,属性和行为都是静态的。该类时final不允许继承。

API—java.util.Data:

日期类:月份从0-11;

API—java.util.Calendar:

日历类

IO流

用于处理设备上数据

  • 字节流:InputStream OutputStream
  • 字符流:Reader Writer

File类

将文件系统中的文件和文件夹封装成了对象。提供了更多的属性和行为可以对这些文件和文件夹进行操作。这些是流对象办不到的,因为流只操作数据。

递归:

就是函数自身调用自身

RandomAccessFile:

管道流:

对象的序列化:

目的:将一个具体的对象进行持久化,写入到硬盘上。

网络编程:

  • 端口
  • Socket:

    • UDP传输:

      1. 只要是网络传输,必须有socket
    • TCP传输:

  • 反射技术:其实

正则表达式:

其实是用来操作字符串的一些规则

你可能感兴趣的:(后端,[JavaSE,基础],JAVA基础)