java学习笔记1 基础

方法(变量)修饰符的使用顺序

在这里插入图片描述

权限修饰符

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

关键字

在这里插入图片描述

this

this代表其所在函数所属对象的引用。(本类对象的引用)
用法:当在函数内需要用到调用该函数的对象时,就用this。
this也可以用于在构造函数中调用其他构造函数。
注意:只能定义在构造函数的第一行,因为初始化动作要先执行。

static

    ·用于修饰成员(成员变量和成员函数)
被修饰后的成员有以下特点:
    ·随着类的加载而加载
    ·优先于对象存在
    ·被所有对象所共享
    ·可以直接被类名调用
使用注意:
    ·静态方法只能访问静态成员
    ·静态方法中不可用写this,super关键字
    ·主函数是静态的

补充:

在这里插入图片描述即使子类和父类中都有同样的static方法和变量,他们是没有任何关系的,他们是相互独立的,他们是属于各自类本身的。因此也是不存在多态特性的。而对于普通方法的调用是存在“重写”而最终呈现出多态特性的。
同样的道理:对于static修饰的变量,当子类与父类中存在相同的static变量时,也是根据“静态引用”而不是根据“动态引用”来调用相应的变量的。
而在父类和子类中对于非static变量和方法,是根据“动态引用”来调用相应的变量和方法。

在这里插入图片描述

final

在这里插入图片描述

instanceof

Java中instanceof关键字的理解
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。

注释

在这里插入图片描述

标识符

标志符:支持_和$

比较运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

位运算符

在这里插入图片描述

函数
定义

在这里插入图片描述

特点

在这里插入图片描述

主函数

在这里插入图片描述

重载

在这里插入图片描述

重写(覆写)

方法覆写
a、 在子类中可以根据需要对从基类中继承来的方法进行重写。
b、 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
c、 重写方法不能使用比被重写方法更严格的访问权限。
严格顺序private>default>protecte>public ,这个与多态有关,讲了多态就会明白得多。
当某个地方由父类修饰了,可以调用父类的某个方法。
若子类对该方法访问更严格,当传递子类过来,那么可能造成不可访问.

重写equals和hashCode

在这里插入图片描述

覆写与重载的区别

a、重载(Overloading)
Java中方法的重载,指的是在类中可以创建多个方法,它们具有相同的名字,但具有不同的引数列(参数类型和个数)和不同的定义。
而返回值的类型可以相同也不以不同,但是不能仅仅通过不同的返回值来区分重载函数。
调用方法的时候根据参数列表来判断调用哪个方法。重载是一个类中的多态性表现。

b、覆写(Overriding)
Java中,子类默认可以继承父类中的方法,而不需要重新编写相同的方法,但是有时候,
子类并不想原封不动的继承父类中的方法,而是做出一定的修改,这就是采用方法的覆写(也成为覆盖)来实现的。
Java中覆写指的是,在子类中对父类中同一重名函数实现部分加以改变,但与父类的该方法的方法名、返回类型和参数
列表都保持一致。即子类对父类中的函数进行重新定义,子类中的新方法将覆盖父类原有的方法。覆写是父类与子类之间的一种多态表现。

补充:

在这里插入图片描述

构造函数

在这里插入图片描述

数组
定义

在这里插入图片描述

数组中的数组

在这里插入图片描述

Java内存分配之堆、栈和常量池

Java内存分配主要包括以下几个区域:

  • 寄存器:我们在程序中无法控制
  • 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
  • 堆:存放用new产生的数据
  • 静态域:存放在对象中用static定义的静态成员
  • 常量池:存放常量
  • 非RAM(随机存取存储器)存储:硬盘等永久存储空间

Java内存分配中的栈
  在函数中定义的一些 基本类型的变量数据 对象的引用变量 都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

Java内存分配中的堆
  堆内存用来存放由 new创建的对象和数组 。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
  在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。
  引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍 然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。
   实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!

常量池 (constant pool)
  常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种 基本类型(如int、long 等等)和 对象型(如String及数组 )的 常量值(final )还包含一些以文本形式出现的符号引用,比如:

  • 类和接口的全限定名;
  • 字段的名称和描述符;
  • 方法和名称和描述符。
      虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和 floating point常量)和对其他类型,字段和方法的符号引用。
      对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的, 对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引 用。说到这里,对常量池中的字符串值的存储位置应该有一个比较明了的理解了。
       在程序执行的时候,常量池会储存在Method Area,而不是堆中。

堆与栈
  Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、 anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。 堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器 ,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态 分配内存, 存取速度较慢
   栈的优势是,存取速度比堆要快 ,仅次于寄存器,栈 数据可以共享 。但缺点是,存在栈中的 数据大小与生存期必须是确定的 ,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。


这里我们主要关心栈,堆和常量池,对于 栈和常量池中的对象可以共享 ,对于 堆中的对象不可以共享 。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。

字符串内存分配:
  对于字符串,其 对象的引用都是存储在栈 中的, 如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中 ,如果是运行期(new出来的)才能确定的就存储在堆中。对于 equals相等的字符串,在常量池中永远只有一份,在堆中有多份

其他:
对象内存分布在堆中,其中的成员变量变量默认值 int—0,double—0.0,char—‘’ 对象(引用)—null,
类中成员方法中的局部变量在栈中,栈中没找到在堆中找。

匿名对象

在这里插入图片描述
在这里插入图片描述

封装

在这里插入图片描述

代码块

在这里插入图片描述

单例设计模式

在这里插入图片描述
在这里插入图片描述

继承

继承的好处:

  1. 提高了代码的复用性
  2. 让类与类之间产生了关系,给第三个特征多态提供了前提

继承的弊端:

  1. 打破了封装性

java中只支持单继承。不支持多继承,但对于C++中的多继承机制进行改良

单继承:一个子类只能有一个直接父类
多继承:一个子类可以有多个直接父类(java中不允许)
    java不直接支持,因为多个父类中有相同成员,会产生调用不确定性。
    在java中是通过“多实现”的方式来体现

java支持多层(多重)继承:
C继承B,B继承A。
就会出现继承体现。

当使用一个继承体现时:

  1. 查看该体系中的顶层类,了解该体系的基本功能。
  2. 重建体系中的最子类对象,完成功能的使用。

什么时候定义继承呢?
当类与类之间存在着所属关系的时候,就定义继承。xxx是yyyy的一种:xxx extends yyy

所属关系: is a 关系。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

一个对象的实例化过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

抽象类

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

接口

接口的特点:

  1. 是对外暴露的规则
  2. 是程序的功能扩展
  3. 接口的出现降低耦合性
  4. 接口可以用来多实现
  5. 类与接口之间是实习关系,而且类可以继承一个类的同时实现多个接口
  6. 接口与接口之间可以有继承关系
    在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

接口与抽象类

在这里插入图片描述

多态

在这里插入图片描述
函数的重载算是函数的多态

在这里插入图片描述
在这里插入图片描述

多态时成员的特点

在这里插入图片描述

内部类

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

匿名内部类(匿名子类)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

异常

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

处理原则

在这里插入图片描述在这里插入图片描述

注意事项

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值