转义字符
换行\n
空格\t
退格\b
制表符\t 相当于Tab键
通过\转换后面字符的含义
if和switch很像,那什么时候使用呢?如果判断的具体数值不多,而是符合byte short int char 类型,使用switch,其他情况,使用if,虽然都可以,但是switch效率据说稍微高一点点…
2.内存结构
JAVA程序在运行时,需要在内存中分配空间,为了提高效率,有对空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存内存管理方式
堆内存:用于存储局部变量,当数据使用完,所占空间会自动释放
栈内存
数组和对象,通过new建立的实例都放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认的初始值
实体不再被使用,会在不确定的时间被垃圾回收器回收
方法区
本地方法,寄存器
数组还有另外一种格式
int [] arr = new int[]{3,6,8,74,99,12};
int [] arr1 = {3,6,8,74,99,12};
我们把他叫做静态初始化
4.匿名对象
这是一个小知识点,匿名换句话其实就是没有名字的意思
匿名对象是对象的简化版
匿名对象两种使用情况
当对对象方法仅进行一次调用的时候
匿名对象可以作为实际参数进行传递
5.构造函数的小细节,当一个类中没有定义构造函数时,系统默认给该类加入一个空参数构造方法
static是一个修饰符,是一个修饰成员变量,成员函数的关键字,被静态修饰之后,他就不在内存中了,被单独提取出来,每个人都能访问,静态修饰内容被对象所共享
当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用:类名.静态成员
System.err.println(Person.country);
一样可以
这样,我们可以总结一下static的特点
1.随着类的加载而加载
所谓随着类的加载而加载,Person这个类你一使用的时候,静态就已经存在了
2.优先于对象存在
明确一点,静态时先存在的,参照1
3.被所有对象所共享
4.可以直接被类名所调用
实例变量和类变量的区别:
存放位置
类变量随着类的加载而存在于方法区中,随着类的消失而消失
实例变量随着对象的建立而存在于堆内存中
生命周期
类变量生命周期最长,随着类的消失而消失
实例变量的生命周期随着对象的消失而消失
静态变量的使用注意事项
静态方法只能访问静态成员
非静态方法方法即可以访问静态也可以访问非静态
静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所在静态方法中不可以出现他们
主函数是静态
静态有利有弊
利:对对象的共享数据进行单独控件的存储,节省空间,没必要每个对象都存储一遍,也可以直接被类名调用
弊:生命周期过长,访问出现局限性(静态虽好,只能访问静态)
OK,了解了主函数,我们回到静态,什么时候使用static?
要从两方面下手,因为静态修饰的内容有成员变量和函数
什时候定义静态变量
当对象中出现共享数据时,该数据被静态修饰,对象中的特有数据,定义成非静态,存在于堆内存中
什么时候定义静态函数
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义为静态
6.没错,打印了子类的值,为什么?因为输出的num前面其实默认带了一个this,如果我们要打印父类的值,需要加super,这是一个新的关键字了,所以变量的特点:如果子类中出现非私有的同名成员变量时,子类要访问本类中的成员变量,用this,子类访问父类中的同名变量,用super,this和super的使用几乎一致,this代表的是本类对象的引用,super代表父类对象的引用
7.重载:只看同名函数的参数列表
重写:字符类方法要一模一样 ,包括返回值类型
8.看不懂
特点
1.抽象方法一定定义在抽象类中
2.抽象方法和抽象类都必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的方法要被使用必须由子类复写其所有的抽象方法后建立子类对象调用
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
9.对捕获的异常对象进项常见的处理方法
getMessage() 错误信息
toString() 转换成string的异常信息
printStackTrace 打印内存中的跟踪信息