ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA基础随手记

2021-09-13 17:02:29  阅读:179  来源: 互联网

标签:随手 内部 java 对象 基础 equals hashcode JAVA 方法


8个基本数据类型:byte short int long char float double boolean

switch的参数类型:byte\short\int\char\string\enum

java注释:单行// 多行/* */ 文档/** **/

访问修饰符:private 类内可见 default 同包可见 protected 同包+子类可见 public 所有类可见

final: 修饰类-不可继承 修饰方法-不可重写 修饰变量-引用指向地址不可变,但内存保存的内容是可变的

finally:异常捕捉的一部分,一般和try/catch一起使用,用来放无论是否报异常,都会执行的代码

finallize:object类的方法,由垃圾收集器调用,作为垃圾是否可以回收的最终判断

this: 相当于指向本身的指针 1、调用自身的属性和方法 2、形参名称和属性名相同时,用this进行区分 3、this()执行构造方法

super 相当于指向父类的指针 1、调用父类的属性和方法 2、子类和父类属性和方法名称相同时,用super区分 3、super()执行父类构造方法

static 创建独立于类对象实例的属性,可以修饰变量、方法、代码块、内部类、静态导包。 在类加载时就进行内存分配和初始化,并只分配和初始化一次。因此可以用来提高程序效率,一般只需要执行一次的代码,可以用static修饰(*util类等)。 独立于类对象存在,可以直接通过类名.静态变量的方式调用。

流程控制 break 跳出当前循环,不再继续循环 continue 跳过本次循环,继续下一次循环 return 方法结束,返回调用方法的地方

面向对象: 面相对象有封装、继承、多态等特点,可以实现程序的低耦合,因此便于维护、复用和扩展。 效率比面相过程低

封装:把一个类的属性进行私有化,并对外提供给属性赋值和获取的方法

继承:通过子类对父类的继承,可以实现父类代码的复用,同时子类可以根据需要进行扩展

多态:多态分为重写和重载,重写是子类继承父类,可以对父类的方法重写;重载是同一个类中,允许存在方法名相同,方法参数不同的方法,参数不同包括参数个数、类型和顺序。

抽象类与接口

相同点: 1、都不能实例化 2、都含有抽象方法 3、都位于程序的顶端,提供给子类继承或者实现

不同点:

抽象类                                                            接口

abstract修饰                                           interface修饰

属性定义任意                                         默认staticfanal修饰

方法访问修饰符任意                              默认public,不能用private和protected

可以有抽象方法和非抽象方法                所有方法必须是抽象的

子类继承抽象类用extends                    子类实现接口用implement

只能继承一个抽象类                             可以实现多个接口

 

普通类和抽象类:普通类不能有抽象方法,可以实例化 抽象类可以用抽象方法,不能实例化

成员变量与局部变量

成员变量                                                                                                局部变量

1、定义在类中,方法外                                                                   定义在类的方法内部

2、作用域为整个类                                                                          作用域为方法内部

3、生命周期,随对象的创建而创建,对象的回收而回收                  随着方法的执行而创建,方法执行完销毁

4、存在堆中                                                                                    存在栈中

5、初始值:有初始值                                                                      无初始值,调用的时候必须赋值

无参构造函数的作用: 子类继承父类,在执行子类初始化方法时,如果没有明确通过super调用父类的指定构造函数时,会默认调用无参的构造函数,如果父类没有无参构造函数,此时会有问题。

构造方法的左右 初始化 当没有写构造函数时,会默认有无参构造函数

构造函数的特点 1、名称和类名相同 2、没有返回值,但是不能用void修饰 3、生成对象时自动执行,不需要调用

内部类

成员内部类、局部内部类、静态内部类、匿名内部类

成员内部类:定义在类中,方法外的非静态的内部类 可以访问外部类的所有属性和方法、包括静态与非静态、公有和私有。 创建方式:外部类实例.new 内部类()

局部内部类:定义在类内部的方法内部的类 非静态局部内部类,可以访问外部类所有属性和方法;静态的局部内部类,只能访问静态属性和方法。 创建方式,在方法内 new 内部类();

匿名内部类:没有类名的内部类 1、必须继承抽象类或实现接口 2、不能有静态变量和方法 3、参数必须用final修饰 4、不能是抽象类,必须实现继承的类或实现的接口的所有方法

创建方式:new 抽象类\接口{ 具体实现 } 不能有静态变量和方法(调用静态类和方法,是通过类名.静态属性或方法,内部类没有类名,无法调用) 参数必须是final(主要是生命周期的问题,局部变量存在栈中,随着方法的创建和执行完而生成和销毁,当方法执行完,局部变量销毁时,如果此时内部类调用局部变量,就会有问题,因此将局部变量用final修饰。JDK1.8之后,会自动提我们把匿名内部类用到的参数用final修饰。)

静态内部类:用static修饰的内部类,静态内部类只能访问外部类的静态变量 创建方式:new 外部类.内部类()

内部类的优点 1、内部类可以访问外部类的内容,包括私有属性和方法 2、内部类具有封装性 3、内部类可以实现“多继承” 4、匿名内部类方便定义回调

内部类的场景 1、多算法的场合 2、解决一些非面相对象的语句 3、当一个类只需要被外部类所使用时 4、适当的内部类,使得代码更加灵活和富有可扩展性

重写与重载 构造方法不能被继承,所以不能被重写,但可以重载

==和equals的区别 ==是比较的内存地址,用来判断两个比较对象是否为同一个对象 equals分两种情况:

1、类没有重写equals方法时,equals等同于==;

2、类重写了equals方法是,一般通过比较两个对象的内容是否一致来判断是否equals,重写了equals必须重写hashcode方法。

什么是hashcode:hashcode是在object定义的方法,所以所有的java类都有hashcode方法。hashcode方法是用来获取hash码也叫散列码的方法。实际返回的是一个int类型的数字,用来记录对象在hash表中的索引位置。hash表是通过键值对的方式存储的,可以 通过key快速的找到对应的值。

为什么要用hashcode:以hashset为例,往hashset里添加元素时,会先获取对象的hashcode,并判断hashcode所在位置是否已存了对象,当没有存在对象时,即可将对象存入hashset中,当hashcode已存在时,再进行equals判断 对象是否真的已存在,如果equals为false时,将对象散列到别的位置,当equals为true时,加入失败。通过这种方式,可以大大的减少equals的次数,从而提高加入hashset的效率。

hashcode和equals的规定 1、如果两个对象相等,则hashcode相同 2、如果两个对象相等,则equals返回true 3、两个对象的hashcode相同,对象不一定相等

为什么重写了equals必须重写hashcode:java规定,两个对象相等时,hashcode必须相同。当我们重写了equals,假如改成了通过比较对象的内容来判断equals是否返回true,当equals返回true时,表示两个对象相等,但是由于hashcode没有重写,计算的还是对象所在内存的hashcode,则此时在两个对象相等的情况下,hashcode不同,违反了java的规定。

值传递 java只有值传递,当对象实例作为参数时,实际传入的为对象引用的拷贝。方法可以修改参数的指向,但因为是操作的副本,因此不会影响方法调用者中的引用。

JAVA 常用包

java.lang 基础类

java.io 输入输出

java.nio java.io的 补充

java.util 工具类

java.net 网络相关

java.sql 数据库相关

反射:java可以在运行时,动态地获取类的所有属性和方法,并且调用这些属性和方法,这种动态获取的机制就叫反射机制

静态编译,是指编译时,确定类型绑定对象 动态编译,是指运行时,确定类型绑定对象

反射的优点,可以动态的获取类的所有属性和方法,包括私用属性和方法,编程更为灵活

场景: 1、反射机制是框架的灵魂 2、jdbc通过class.forName获取驱动 3、spring读取xml或者properties的信息,通过反射机制获取类信息 4、可以动态地配置实例的属性 5、JDK反向代理

创建方式 1、对象实例.getClass() 2、Class.forName(XXX.类名) 3、类名.class

获取私有方法:instance获取目标类实例,getDeclaredMethod获取方法,setAccessible(true)取消访问检查,invoke执行方法

String:

字符串常量池:字符串常量池是堆内存中的一块区域,用来保存字符串。当创建一个字符串对象时,会先在常量池中,寻找该字符串是否已创建,如果已创建 则将已创建的字符串的引用返回,若未创建,则创建一个字符串,并返回引用,通过这种方式,可以节省内存空间 string的特点: 1、不可变,对string的任何操作,实际是生成新的string对象,并将新的对象的引用返回 2、字符串常量池优化,即创建时会先判断字符串常量池中是否已存在 3、final修饰,不可继承(原因:1、实现字符串常量池;2、线程安全问题;3、实现hashcode的不可变性)

string a = new String("aaa");会生成两个对象,一个是字符串常量池的aaa,另外一个是堆中的aaa,并返回堆中aaa的地址

字符串反转:reverse()

常用方法:indexOf trim splite equals tolowercase touppercase substring replace

hashMap的key用string的好处: hashMap的实现是通过hashCode作为KEY来确定value存储位置,因为字符串是不可变的,所以在计算hashCode的之后,可以进行缓存而不需要重新计算,因此效率比别的对象快。

标签:随手,内部,java,对象,基础,equals,hashcode,JAVA,方法
来源: https://www.cnblogs.com/lihaisong/p/15263203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有