Java基础知识
- "+"的使用:
- 左右两边都是数值,进行加法运算
- 左右两边有一边是字符,进行拼接
- 运算顺序从左到右
- Java数据类型的分类
- 基本数据类型
- 数值型:整型,浮点型
- 字符型:
- 布尔型:
- 引用数据类型
- 类
- 接口
- 数组
- 基本数据类型
- 字符常量
- 用单引号括起来
- 本质是一个整数,因此可以进行运算
- byte、short和char之间不会进行相互之间的自动类型转换,但是他们三者可以进行计算,在计算时首先转换为int类型。
- char类型可以保存int的常量值但是不可以保存int的变量值,需要进行强转。
- 强转只针对于最近的操作数有效
- 基本数据类型和String类型的转换
- 基本数据类型->String : 加“”
- String->基本数据类型(只对数字字符使用) :调用parseXX方法即可
- instanceof 检查是否是类的对象
- &和&&的区别(| 和|| 的区别类似)
- &&短路与:第一个条件为false不会在判断第二个条件
- &逻辑与:无论如何都会判断第二个条件
- 命名规范
- 包名:多单词组成,都小写
- 类名,接口名:每个单词首字母大写
- 变量,方法名:第一个单词首字母小写,以后的单词首字母都大写
- 常量名:所有字母均大写
- switch(表达式)中表达式的返回值必须是(byte、short、int、char、enum、String)
- 数组使用
- 定义- 数据类型 数组名[] = new 数据类型[大小]
- 数据类型[] 数组名 = new 数据类型[大小]
- 数据类型[] 数组名;数组名 = new 数据类型[大小]
- 数组的使用
- 数据类型可以是引用类型和基本数据类型
- 数组本身属于引用数据类型
- Java内存结构分析
- 一般存放基本数据类型
- 存放对象
- 方法区:常量池(常量,数组等)
- Java创建对象的流程
(1) 先加载类的信息(属性信息,和方法信息,并且只会加载一次)
(2)在堆中分配空间,进行默认初始化
(3)把地址赋值给变量,则这个变量就会指向某一个对象
(4)进行指定初始化,也就是给对象的属性赋值 - Java的方法调用机制
(1)当程序执行到方法时,就会开辟一个独立的空间(栈空间)
(2)当方法执行完毕,执行到return语句就会返回
(3)返回到调用方法的地方
(4)返回后继续执行方法后面的代码
(5)当main方法执行完毕整个程序结束 - Java成员方法的传参机制
- 基本数据类型是值传递
- 引用数据类型是地址传递
- 方法的重载
- 方法名相同
- 形参列表不同(形参的个数、类型或者顺序至少有一个不同,参数名无要求)
- 返回值无要求
- (方法的重写:方法名和参数列表必须相同返回值类型必须和父类一样或者是其子类,子类方法不能缩小父类方法的修饰范围)
- 可变参数
- 可变参数的实参可以为0个或者任意多个
- 可变参数的实参可以为数组
- 可变参数的本质就是数组
- 可变参数可以和普通参数一起放在形参列表,但是必须保证可变参数在最
- 一个形参列表中只能出现一个可变参数
- 语法结构: 访问修饰符 方法名称(参数类型 …可变参数名称
- Java中的全局变量(类的属性值)可以不用赋值直接使用,因为全局变量有默认值;局部变量(方法中定义的变量)必须赋值后才能使用,因为没有默认值;属性和局部变量可以重名,访问的时候 遵循就近原则。
- 构造方法
- 名字和类名相同
- 没有返回值
- 创建对象的时候由系统自动调用完成对象的初始化
- this:那个对象调用,this就指向当前对象
- this可以用来访问本类的成员,方法和构造器;
- 可以用于区分当前类的成员和局部变量
- 访问成员方法
- 访问构造器
- 只能在类定义的方法中使用
- 访问修饰符
- 公开级别:用public修饰,对外公开,可以修饰类
- 受保护级别:protected ,对子类以及用同一个包中的类公开
- 默认级别:没有关键字,向同一个包中的类公开,可以修饰类
- 私有级别:private ,只有本类才可以访问
- 继承
- 子类只能访问父类的非私有属性和方法,父类的私有属性和方法必须通过其提供的共有方法来访问
- 子类必须调用父类的构造器完成父类的初始化
- 当创建子类对象的是时候,无论使用子类的那个构造器,默认情况下总会调用父类的无参构造器,如果父类没有无参构造其,就需要使用super指定一个父类的构造方法从而完成对父类的初始化工作
- 如若要调用父类的构造方法则需要通过super显示调用
- super在构造方法中用来调用父类的构造器的时候,必须放在第一行
- this在构造方法中用来调用本类的构造器的时候必须放在第一行
- super和this不能同时出现在构造器中
- 父类构造器的调用不限于直接父类
- Java中子类最多只能继承一个父类(单继承机制)
- 多态
- 父类的引用可以指向子类的对象(一个对象的编译类型和运行类型可以不一致)
- 编译类型在对象定义的时候就确定了不能改变
- 运行类型是可以变化的
- 编译类型看定义时 = 的左边,运行类型看=的右边
- 向上转型
- 语法:父类类型 引用名 = new 子类类型();
- 父类引用指向了子类对象
- 调用方法的规则
- 可以调用父类中的所有成员(需要遵守访问权限)
- 不能调用子类的特有成员(因为能调用那些成员是由编译阶段的编译类型来定的)
- 调用方法的时候,从子类开始查找方法(子类和父类共同拥有的方法)
- 向下转型
- 语法:子类类型 引用名 =(子类类型)父类引用;
- 要求父类的引用必须指向的是当前目标类型的对象?
- Java的动态绑定机制?
- 当调用对象方法的时候,该方法回合对象的内存地址/运行类型绑定
- 当调用对象的属性时,没有动态绑定机制,哪里声明,哪里使用
- 类变量,即静态变量在加载类的时候就会加载,即使没有创建对象,只要类加载了,就可以使用静态变量了,可以用类名.静态变量名/对象名.静态变量名访问
- 类方法和普通方法
- 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;
- 类方法中没有this的参数,普通方法中隐含着this的参数
- 类方法可以通过类名调用,而普通方法只能通过对象名.方法名来调用
- 类方法中不允许使用和对象有关的关键字,例如:super和this;普通成员方法可以
- 类方法只能访问静态方法或者静态变量;普通方法可以访问静态成员也可以访问非静态成员
- 代码块
- [修饰符]{代码};
- 修饰符可选,要写的话也只能写static
- 代码块分为普通代码块和静态代码块
- ;可以省略
- 类什么时候被加载
- 创建对象实例的时候
- 创建子类对象实例的时候(先加载父类 ,然后加载子类)
- 使用类的静态成员的时候
- 什么是设计模式
- 设计模式是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式
- 常用类
- 装箱:基本类型->包装类型,称为拆箱
基本类型 | 包装类型 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
- 包装类型和String类型之间的相互转化
- 包装类型转换为String
(1)包装类型+“”
(2)包装类型.toString ()
(3)String.ValueOf(包装类型) - String转换为包装类型
(1) 包装类型.parseXXX(String类型)
(2)new 包装类型(String类型)
- 创建String对象的两种方式
- 直接赋值 String s = " xiaoming“
- 先从常量池查看是否有“xiaoming”,如果有直接指向,如果没有,先创建,再指向,s最终指向的是常量池的的空间地址
- 使用构造方法创建 String s = new String (“xiaoming”)
- 先在堆中创建空间,里面维护了value属性,指向常量池的“xiaoming”空间,如果常量池没有“xiaoming”,重新创建。如果有,直接通过value指向,最终s通过value指向常量池中的地址。
- String使用final修饰的,一个字符串对象一旦被创建就不能改变(保存字符串常量),StringBuffer保存的是字符串变量,其中的值可以更改;
- String常见方法
- equals:区分大小写,判断内容是否相同
- equalsIgnoreCase:不区分大小写,判断内容是否相同
- length:获取字符个数,字符串长度
- indexOf:获取字符第一次在字符串中出现的索引位置,索引从0开始
- lastIndexOf:获取字符最后一次在字符串中出现的索引位置,索引从0开始
- substring:截取指定范围的子串
- trim:去除前后空格
- charAt:获取某索引处的字符,不能使用Str[index]这种方式
- compareTo:比较两个字符串的大小
- String和StringBuffer之间的转化:
- String->StringBuffer:
- 1.使用构造方法
StringBuffer str = new StringBuffer(string)
- 2.使用append方法
StringBuffer str1 = new StringBuffer(string) str1 = str1.append(string)
- StringBuffer->String :
- 1.使用toString方法
String s = stringBuffer3.toString();
- 2.使用构造器
String s1 = new String(StringBuffer类型)
StringBuffer类
- 基本介绍
- StringBuffer的直接实现父类是 AbstractStringB
- StringBuffer实现了Serializable,即StringBuffer的对象可串行化
- 在父类中,AbstractStringBulider有属性 char[] value,不是final (value数组存放字符串内容)
IDEA使用快捷键
- 删除当前行, 默认是 ctrl + Y 自己配置 ctrl + d
- 复制当前行, 自己配置 ctrl + alt + 向下光标
- 补全代码 alt + /
- 添加注释和取消注释 ctrl + / 【第一次是添加注释,第二次是取消注释】
- 导入该行需要的类 先配置 auto import , 然后使用 alt+enter 即可
- 快速格式化代码 ctrl + alt + L
- 快速运行程序 自己定义 alt + R
- 生成构造器等 alt + insert [提高开发效率]
- 查看一个类的层级关系 ctrl + H [学习继承后,非常有用]
- 将光标放在一个方法上,输入 ctrl + B , 可以定位到方法 [学继承后,非常有用]
- 自动的分配变量名 , 通过 在后面假 .var
- 还有很多其它的快捷键