1、java数据类型:
(1)基本数据类型:整型:byte 1
short 2
int 4
long 8
: 浮点型:float 4
double 8
;字符型:char 2(每个字符占俩个字节 由于java用Unicode字符集编码方式 以一个16位无符号整数表示 取值范围 :\u0000~\uFFFF)
;逻辑型:boolean 1
(2)引用类类型:类 ;接口; 数组
2、java内存模型:
(1)栈内存:存储基本数据类型、对象引用变量(对象名)和数组引用变量;
(2)堆内存:存储数组和对象的数据; //java有专门的垃圾回收线程 Gc garbage collection System.gc();
(3)方法区(类似C里的数据段):整个生命周期都存在的 常量池 常量字符串 类中声明(静态)变量来自于方法区中存储的信息;
/*****java内存模型唯一不会抛出异常区:progma counter register PC寄存器区***/
3、打印堆上的内存信息来查看java 中某一类class的大小:
(1) jps 打印当前java进程pid号
(2) jmap -histo:live pid(进程pid) +路径 打印
4、对于引用类型 比较对象的值 用equals比较
例:if(str1.equals(str 2); //假设str1和str2 都是new出来的,在进行字符串内容的比较就需要用到equals
5、java跳转语句
(1)break
(2)continue
(3)return
其中break,continue有带标签的形式
6、和C区别的运算符:
(1)>>> 向右移 前面添0
(2)instanceof 测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
(3)>>>=
按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op=
7、数组:
(1)一维数组的定义: int[] arry =new int [];
int[] arr =new int []{1,2,3}; //初始化就不能赋数组大小值
int[] arr={1,2,3};
foreach 遍历数组 ; for(int val:array);
(2)二维数组: int [][]arr=new int[][]{{1,2,3}{4,5,6}{7,8,9}};
int [][]arr=new int [3][]; //先创建一个一维数组
arr[0]=new int []{1,2,3,4}; //再逐个把每个一维数组每个元素创建一个4个元素的一维数组
arr[1]=new int ...
arr[2]=new int ..
打印:System.out.println(Arrays.deepTosTring(array));
(3)数组拷贝方式一:克隆方法: array.clone(); //尽量用数组拷贝2、3方法不用克隆 数组名+.clone();
二: Arrays.copyOf(arry,array.length );
三:int [] array4=new int[array.length];
System.arrays.copy(src arry ,src 位置,des arry ,des 位置,length ); 5个参数
8、字符串 (java虚拟机为了减少字符串常量值的重复创建,开辟了字符串常量池)
(1)String类:创建后不能被修改,重新赋值其实是俩个对象,然后把新的值保存进去
(2)StringBuffer在进行字符串处理时,不生成新的对象,在内存上优于String类,不能通过赋值符号对他进行赋值,对象被建立以后,在内存中就会分 配内存空间,并初始保存一个null.除去字符所占空间,会另加16个字符大小的缓冲区,向StringBuffer中赋值的时候可以通过它的append方法.
(3)Character 是进行单个字符操作
9、类和对象
(1)类的加载过程:
1、加载
2、链接 为静态域分配空间 解析这个类创建的其他类的引用
3、静态初始化
(2)new 一个对象 给对象开辟内存 给对象自动调用构造函数进行初始化操作
(3)构造函数的作用:
1、创建对象
2、初始化对象
3、类型转换
(4)构造函数有返回值
(5)默认构造函数 当一个类没有任何构造函数的时候 虚拟机会给这个类自动产生一个默认构造函数 不带参数:public person(); person就是类
public Person(String name,int age,String sex,int []ar){
System.out.println("Person (String,int,String,int [])");
}
Person p1=new Person("hhh",20,"boy",20011010);
(6)this 引用当前调用对象
this()可以直接调用构造函数,放在最前面,访问成员变量可以加this 可以不加 this.name=name 或者this(name);//放在函数最前面
(7)类与类之间的关系:
代理
组合:a part of.. 一个类产生的对象成为另外一个类的(成员变量/数据成员
继承(extends):a kind of... 复用已有的代码 protect 专门用于继承类访问 一种从上到下的结果 派生类对象的构造 首先构造 基类
(8)派生类的构造函数里面调用;super () //表示子类指定调用基类的构造函数版本 放在子类构造函数第一行
super. 例如:super.data 在子类访问基类的数据
super. 例如: super.tostring(); 访问基类成员方法
(9)如果基类和派生类有同名的成员 作用域不同 互不影响
(10)类对象初始化过程:
1、static成员变量初始化
2、static块初始化
3、实例成员变量的默认初始化
4、实例块初始化
5、构造函数
(11)内置类型有空间即可操作
面向对象:对象和空间是分离的 ,有对象一定要占空间 ,有空间不一定有对象 ,不能创建空间 而是申请;
(12)先进行 静态初始化 //只调用一次
实例初始化
构造函数