java 基础

方法

    为了不用重复的书写某段相同逻辑的代码,就将这一段代码提出来,那么这种提取形式称为方法

方法的重载(重要)

    在一类中,出现了方法名一致而参数列表不同的方法 

1.在同一个类中,不允许存在方法签名

(方法名称和一个参数列表(方法的参数的顺序和类型)组成)一致的方法
2.在调用方法的时候遵循的是最相近的匹配原则---就是说,类型能否自动转换且
转化最相近的值 
3.在方法重载的时候,尽量重载所有的情况

方法的传参问题:    
对于基本类型的数据而言,在传参的时候传递的是实际数据;对于引用类型,在传参的时候

传的是地址。

面向对象与面向过程

面向过程:重点关注流程中的每一个动作、步骤。

面向对象:在流程中重点关注对象。只要是找到了这个对象,就拥有了这个对象身上的一切

功能。

类与对象的关系

    将这一类事物的特征定义为属性,将事物的行为定义为方法,类是对象的概括

构造方法

    创建对象需要调用对应形式的构造方法。 ---每一个类中都至少有构造方法。如果没有手动添加,

那么jvm在编译的时候添加无参构造。如果手动添加,jvm就不再添加了

 构造方法与类名同名而且没有返回值类型。构造方法可以重载。

this关键字

    this在本类中调用本类中的属性或者是方法的。

this语句---this(参数)---表示调用本类中其他的对应形式的构造方法---this语句必须

放在构造函数的第一行

局部代码块

    在方法中用{}包起来的代码块---局部代码块。 ---用于限制变量的使用范围和生命周期,

以便于提高栈内存的利用率

匿名对象

    没有名字的对象---只能在创建的时候来使用一次。

面向对象的特征:

封装,继承,多态(、抽象)

封装

    将某些逻辑或者代码提取成某种对相应的形式,这个提取的过程是封装

比如说:将属性设置为私有的,然后通过提供对外的方法来获取或者设置这个属性值,

优点:提高代码的复用性,提高代码的安全性(数据的合法性)

继承

    发现一些类中有部分共同的属性和方法,将这些共有的属性和方法提取到了一个新的类中

让这个新的类和原来的类产生联系(关系),这种关系就称之为继承。利用extends关键字

新的类称之为子类(派生类),原来的类就称之为父类(超类,基类)。子类可以通过继承使用

父类中的一部分属性和方法。

super关键字

        指在子类中表示父类对象的引用,用于调用父类中的方法和属性

    方法的重写

    在父字类中存在方法签名完全相同的方法。称之为方法的重写(覆盖)。

    两等两小一大----重写的方法要对子类可见

    1.方法签名一致

    2.如果父类中的方法的返回值类型是基本类型/void,那么子类在重写这个方法的时候

返回值类型也必须一致。子类的方法的返回值类型和父类方法的返回值类型必须一致

    3在重写的时候,子类重写的方法的权限修饰符的范围要大于等于父类中方法的权限

修饰符的范围

        A a = new B(); //a 对象是使用向上造型的方式来创建的。a的声明类为A类,

那么A就告诉了a对象有一个m方法可以使用,并且告诉a对象m方法可以在任何地方法

使用a.m();//在执行这个方法的时候看的是具体的创建类。创建a对象用的类是B。那么

在执行m方法的时候看的也是B,然而B类却限制了m方法的使用范围仅仅是本类中。

---A类声明的时候说是任何地方可用,实际使用的时候却方法只能在本类中--矛盾了

    4.如果子类方法的返回值类型是引用类型,那么子类在重写方法的时候,

重写的方法的返回值类型是父类方法返回值类型本身或者是父类方法返回值类型的

子类

5

子类不能抛出比父类更多的异常---范围不能更大,而且指的是编译时异常

多态

    编译时多态:方法的重载

    运行时多态:方法的重写,向上造型 ---基于继承 ---- 继承是运行时多态的前提

static

    修饰变量,方法,代码块,以及内部类。

    静态变量:

                    

static修饰的变量称之为静态变量,或者也叫类变量。类在第一次使用的时候加载。静态变量在类加载的时候加载到了方法区中的静态区,并且在静态区中给予了默认值。静态变量是先于对象而存在的。可以不通过对象来调用静态变量而是通过类来调用,当然也可以用对象来调用。由于本类的所有对象存储的是该静态变量在静态区中的地址,所以对象共享静态变量。

static:修饰变量、方法、代码块以及内部类。静态变量在类加载的时候加载到方法区中的静态区,会在静态区中初始化。静态变量是先于对象出现的,所以一般习惯上都是通过类名来调用静态变量。静态变量是被这个类的所有对象所共享的。静态方法随着类的加载而加载到静态区,但是在静态区中只存储而不执行,在被调用的时候到栈内存中执行。静态方法也是先于对象而存在的,所以习惯上也是通过类名来调用静态方法。静态方法中不能直接使用本类中非静态的方法或者是非静态的属性。静态方法可以重载,可以被继承,父子类中也可以存在方法签名一致的静态方法,但是这不是重写!---一旦父子类中存在了方法签名一致的方法,要么都是静态的要么都是非静态的。静态代码块在类第一次真正使用(创建对象/调用方法)的时候执行一次。注意执行顺序

final

  修饰数据、方法以及类

 final修饰数据的时候,称之为常量---定义好之后值不可改变。---对于基本类型而言指的是实际值不可变,而对于引用类型而言,指的是地址不可变,但是属性或者元素值可以改

final修饰的方法称之为最终方法。---不可以被重写。---可以重载,可以被继承

final修饰的类称之为最终类---不能被继承

finally---在异常机制中使用,用于完成一些必须要做的事务


abstract

        发现每一个子类都对父类中的某个方法做了重写,那么此时父类中的方法

再声明方法体就没有意义了,所有可以将父类的这个方法声明为抽象方法,

用abstract修饰。而抽象方法必须放在抽象类中。抽象类也是用abstract修饰

抽象类不能创建对象,有构造方法。---所谓的抽象类不能创建对象是指的是

不能用java语言创建,jvm在运行的时候底层用C语言来创建这个对象

一个类继承了抽象类之后必须重写其中所有的抽象方法,除非这个类本身也是抽象类

抽象类中可以没有抽象方法,但是无论是否含有抽象方法,抽象类都不能用于创建对象。

抽象类中可以定义普通的方法或者属性吗?--可以---只要是一个普通类中可以定义的东西在抽象类中也可以定义

抽象类可以是最终类吗?---不能---抽象类必须被子类继承,然后子类中重写其中的抽象方法,但是最终类不能被继承

实体类和抽象类之间有什么区别?---抽象类不能用于创建对象;抽象类中可以含有抽象方法;抽象类一定不能是最终类

抽象方法可以重载吗?---可以---抽象方法之间可以重载,抽象方法也可以和实体方法重载

抽象方法可以用static修饰吗?---不可以

抽象方法可以用final修饰吗?---不可以

抽象方法可以用private修饰吗?---不可以

抽象方法可以是默认的吗?---可以---要求抽象类和子类必须同包

抽象类中的构造函数可以是私有的吗?---可以---任何一个类的构造函数都可以私有化


接口:

接口中定义的方法,用interface关键字来声明一个接口

用implements让类和接口之间产生联系,这种联系称之为实现。一个类实现

了接口之后必须实现这个接口中所有的抽象方法,除非这个类本身也是抽象

接口不能实例化,那么有构造方法吗?---没有---接口不是类---每一个接口编译完成之后也会产生一个class文件

java中,接口和类之间是多实现的关系---一个类可以实现多个接口

接口和抽象类的异同点有哪些?

都不能创建对象,都可以有抽象方法,实体类在继承了抽象类或者是实现了接口之后必须实现其中的抽象方法,除非这个类也是抽象类。

抽象类中可以有构造函数,可以有普通属性和实体方法;接口中没有构造函数,只能定义抽象方法和静态常量。抽象类之间是单继承,接口之间是多继承,以及接口和类之间是多实现。抽象类中的抽象方法只要不是private就行,而接口中的方法只能是public

抽象类可以继承抽象类,抽象类也可以实现接口

垃圾分代回收机制

       栈内存中的数据用完之后立即释放所占内存。方法区存的是类的信息,

只加载一次。垃圾分代回收机制针对的是堆内存。

堆内存中存储的是对象,对象在用完之后不一定会立即回收,而是会在某个不定的时刻被回收掉。内存使用达到警戒线的时候会启动回收器(GC ---garbage collector)进行回收。

System.gc(); --- 表面上是调用GC来回收垃圾,但是实际上仅仅起了一个通知性的作用---GC不一定会干。

将堆内存分为了新生代和老生代。将新生代分为了伊甸园区和幸存区。一个对象刚刚创建的时候是放到伊甸园区。经过一次回收,如果这个对象依然存在,则挪到幸存区。在幸存区中经过了多次回收,如果这个对象依然存在,则挪到老生代。老生代的扫描频率要远远低于新生代。老生代的对象一旦产生回收,可能会导致程序的卡顿甚至崩溃。


API --- Application Programming Interface --- 应用程序接口

Object String Pattern 数学类 日期类 包装类 --- 3.5 --- 4

异常 集合 映射 --- 3

File IO 线程 套接字 --- 4

反射 jdk8的一部分特性 --- 1

String 

 String是一个最终类。字符串是一个常量;字符串是被共享的。

异常是java中一套用于问题的反馈和处理的机制

总结:重写和重载有什么区别?

重载是在同一个类中,方法名一致而参数不桶的方法。方法的重载只和方法签名有关,

和修饰符、返回值类型、异常没有关系。方法的重载是一种编译时多态。

重写在父子类中存在了方法签名完全一致的非静态方法。方法重写的时候需要遵循两等两小一大

五个原则。

方法签名一致

当父类的返回值是void/基本类型,那么子类的返回值必须和父类的返回值一样

子类重写方法时,子类修饰符的权限必须大于等于父类修饰符权限

子类的抛异常时,不能超过父类抛出的异常数。

Collection<E>

集合顶级接口。<E>---泛型---用于规定集合中元素的类型---由于泛型的限制,集合中只能存储

对象。

List---列表

有序---保证元素的存入顺序---通过下标来操作其中的元素---允许元素重复---List中的元素是有序

可重复的。

ArrayList ---顺序表

    基于数组。内存空间连续。默认初始容量为10,每次扩容是在上一次容量的基础上增加一半---

基于右移10 -》15-》,增删元素相对较慢,查询元素相对较快。是线程不安全的列表

ArrayList的底层实现---用数组实现顺序表

LinkedList---链表

基于节点(Node)实现的。Node是一个静态内部类。内部空间不连续的。增删元素相对较快,

查询元素相对较慢。是线程不安全的列表

Vector---向量

    最早的列表---基于数组。默认初始容量是10.每次默认扩容一倍---基于三元表达式----

是线程安全的列表

Enumeration ---迭代器---通过指针的挪动来遍历每一个元素

Stack---栈

    遵循后进先出/先进后出的原则。将元素放入栈中---入栈/压栈,将元素从栈中取出---出栈

/弹栈。最先放入栈中元素---栈低元素,最后放入栈中的元素---栈顶元素


总结:

1.List和数组有什么区别?---长度,元素的数据类型、内存

2.Arraylist和LinkedList在增删元素的效率上谁块一些?

3. 在效率平衡点的时候,数据量相对较大的情况下,即使相对查询较多,为什么喜欢使用LinkedList---内存

Set---散列集合

    元素不可重复,元素是无序的。

     Hashset底层是基于HashMap----HashMap中维持了一个数组,数组的每一个位置称之为一个

桶,每一个桶中维持了一个链表。一个元素根据其哈希码进行运算,根据运算之后的结果平均的分

到这些桶中。当用了75%(加载因子)的桶的时候,会进行扩容,桶的数量会增加一倍。已有元素

会重新计算哈希码重新分布,这个过程称之为rehash操作。















    


        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值