Java教程

JAVA基础随手记

本文主要是介绍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基础随手记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!