包装类型就是基础数据类型的引用类型
八大基本数据类型byte,short,int ,long
double ,float,boolean,char
不同数据类型组合运算最终的结果类型向右看齐,——自动向上强转,变为更大的数据类型
char=short
高精度类型得到低精度结果需要进行强转
int、integer、new Integer()**int与integer、new Integer在使用==========比较时,结果一定为true**
因为在比较的时候涉及到自动拆装箱
**integer与new Integer()进行==========比较时,结果一定是false**
integer是内存地址值是指向integer缓存中,new integer()的地址值是指向堆中的
Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为true,在此范围外为false。
访问控制权限 类、接口、方法java.lang下的方法不需要导包
Math中的几个常见方法Math.floor() 表示向下取整,返回double类型 (floor—地板)
往小了取值
Math.ceil() 表示向上取整,返回double类型 (ceil—天花板) 、
往大了取值
Math.round() 四舍五入,返回int类型
方法名 不能以数字开头
方法结束之后由谁结束 方法在调用时,会占用栈内存,调用完毕之后程序由栈自动释放,而不是gc
gc主要针对的是堆区
内存1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)
2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)
3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)
构造方法 特点方法名和类名相同没有返回值,也不写void构造方法可以重载 作用
创建对象时进行赋值在创建对象的时候被调用 分类
默认无参带参构造方法可以重载 Object基类
java中的所有类都直接或者间接的继承object
注意上面说了是所有的类,但是接口不继承object类,因为java中接口就是接口,类就是类是两个完全不一样的平行的概念
抽象类abstract类不能用来创建abstract类的对象;
final类不能用来派生子类,因为用final修饰的类不能被继承;
abstract类就是被用来继承的;
接口中也可以有abstract方法。
抽象类中可以有普通方法,但是抽象方法必须在抽象类中
继承子类只可以单继承,继承具有传递性,
但是子类不可以继承父类的构造方法
子类构造器会默认调用super(),用于初始化父类成员
当父类中存在有参构造时,必须提供无参构造器,因为子类构造器会默认调用super()使用无参构造来初始化父类
一个类作为父类必须有无参构造
接口接口的实现类可以直接获取接口中的属性
重写实现接口中的方法只能使用public方法
内部类 变量成员变量:定义在类中的变量是类的成员变量,可以不进行初始化,java会自动进行初始化,
如果是引用类型默认初始化为null,
如果是基本类型例如int则会默认初始化为0
局部变量:被定义在方法中的变量,必须有初始值,否则通不过编译
类变量:被static修饰的变量——是静态变量,会随着类的加载而加载,所以被称为类变量
常量:被final修饰的变量
字符串s.length——获取的是字符串长度
s.getBytes("")——获取的是字节长度——一个中文字符两个字节
== 和 equals():(1)“==” 用于比较基本数据类型时比较的是值,用于比较引用类型时比较的是引用指向的地址。
(2)Object 中的equals() 与 “==” 的作用相同,但重写了equals()方法,比较的是对象中的内容。
初始化字符串(注意字符串的拼接)
字符串进行拼接是创建的对象在堆中
有两种方式——
一、new对象——new String(“hello”);——这种先在堆方法区中,开辟一个newString的空间,然后检查括号中的值在字符常量池中是否存在,
如果存在,就直接将该值在字符常量池中的地址赋给该字符串
如果不存在,就在常量池中开辟空间,存储值,然后将地址赋给字符串
二、直接赋值——String s=”hello“;——这种初始化方法是直接将hello放进字符串常量池中
public class Example{
String str = new String("good");
char[ ] ch = { 'a' , 'b' , 'c' };
public static void main(String args[]){
Example ex = new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[ ]){
str = "test ok";
ch[0] = 'g';
}
}
注意这题不可以被String的是不可变对象所蒙蔽
这个题中ex.change(ex.str,ex.ch);——这里的参数实际上是传递的一个形参,传递的是一个副本,
ex.str,ex.ch,这里就相当于是复制了一份原有的数据,实际参与change运算的过程中,对字符串str进行了重新赋值,这里test ok 在原本的和str的源字符串不一样,这里又在常量池中开辟了一个新的空间,并将这个值的地址赋给这个形参字符串 ,但是这里改变不了原有的参数str的值
这里的数组却是改变了原本0位置的字符,将原有的地址的值该变为g
异常 集合 继承体系 Collection和Collections的区别:Collection:是顶层接口,有子接口List和Set
Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
map集合的方法collection values:获取所有的值,封装在conllection集合中
V get(object key):根据键获取值
IO流读取——input
输出——output
字节流和字符流的区分stream结尾都是字节流
reader和writer结尾都是字符流
两者的区别就是读写的时候一个是按字节读写,一个是按字符
在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流
只是读写文件,和文件内容无关的,一般选择字节流。
继承体系 多线程 创建多线程的方式继承thread类
重写该类的run()方法通过线程对象的startt()来启动线程
实现runable接口
重写该接口的run()方法,run方法为线程的执行体通过线程对象start()来调用
实现callable接口
run()和start()的区别: run():仅仅是用来封装被线程执行的代码,直接调用时是普通的方法 start() : 先启动线程,然后由jvm去调用run方法,执行run()中的代码
正则表达式^表示匹配输入的开始,$表示匹配输入的结束
?表示匹配某元素0次或1次
//严格匹配两个//
]表示字符集合,它用在正则表达式中表示匹配集合中的任一字符
[a-zA-Zd] 表示匹配一个小写字母 或者 大写字母 或者 数字
w 表示匹配字母数字或下划线
+表示匹配某元素1次或多次
.可以匹配除了换行符n r外的任何字符
D 表示匹配一个非数字字符而非数字字符
d匹配数字,
{m,n}表示最少匹配m次,最多匹配n
/?能匹配末尾的0个或1个/字符
*表示匹配某元素0次或多次
代码题 1、包装类的自动拆装箱Boolean flag = ``false``;
if` `(flag = ``true``)
{
``System.out.println(``"true"``);
}
else
{
``System.out.println(``"false"``);
}
Boolean是包装类型,初始化值为false
在if (flag= “true”)中会调用Boolean.valueOf(boolean b)方法自动拆箱为基本数据类型,因此赋值后flag值为true,输出文本true
输出的 true
2、try—catch返回值public static int method() {
int a=10;
try {
System.out.println(a/0);
}catch (Exception e) {
a=30;
return a;
}finally {
a=40;
}
return 50;
}
Return a在执行到这一步是,a=30;
执行return a,实际上执行的是返回路径 return 30;
但是这时发现后面还有finally语句,
所以就继续执行下面的finally,执行过之后a=40,
然后在返回来执行之前已经形成的返回路径 return 30;
如果仅 try中有return,返回的就是try语句中的return
如果try、finally语句中都有return,忽略try中的return,返回finally中的return
如果catch、finally中都有return,忽略finally中的return,返回catch中的return
try《finally《catch



