数据的复制与扩容
(1)数组变量额度赋值,是并不会复制数组对象,是两个变量引用了同一个数组对象。
(2)数组的复制的本质是创建了新数组,将原来数组的内容复制过来。
(3)扩容:创建新数组,新数组容量大于原数组,将原数组内容复制到新数组,
并且丢弃原数组,简单说,就是更换更大的数组对象。
很多方法都使用了数组的扩容。
排序算法
(1)要会冒号排序:比较相邻的元素,大的向后交换。
(2)Arrays类包含了大量的基础排序算法,在实际使用时可以直接调用。
(1)数组变量额度赋值,是并不会复制数组对象,是两个变量引用了同一个数组对象。
(2)数组的复制的本质是创建了新数组,将原来数组的内容复制过来。
(3)扩容:创建新数组,新数组容量大于原数组,将原数组内容复制到新数组,
并且丢弃原数组,简单说,就是更换更大的数组对象。
很多方法都使用了数组的扩容。
排序算法
(1)要会冒号排序:比较相邻的元素,大的向后交换。
(2)Arrays类包含了大量的基础排序算法,在实际使用时可以直接调用。
递归调用
(1)方法中调用方法本身。
(2)优势:简练,只需考虑一层逻辑即可,但是需要有经验。
(3)递归一定要有结束条件。否则会造成栈溢出。
(4)递归深度不能太深。否则会造成栈溢出。
(1)方法中调用方法本身。
(2)优势:简练,只需考虑一层逻辑即可,但是需要有经验。
(3)递归一定要有结束条件。否则会造成栈溢出。
(4)递归深度不能太深。否则会造成栈溢出。
二进制基础
(1)16进制是2进制的简写,其实就是2进制。
(2)记补码的另一个方式:
所有位全部为1时,表示值为-1
第一位为1,后面都为0时,表示最小值
第一位为0,后面全为1时,表示最大值。
(1)16进制是2进制的简写,其实就是2进制。
(2)记补码的另一个方式:
所有位全部为1时,表示值为-1
第一位为1,后面都为0时,表示最小值
第一位为0,后面全为1时,表示最大值。
移位运算
(1)左移:<< 最低位补0
(2)算数右移:>> 最高位补原数据的最高位(才能保持符号不变)
(3)逻辑右移:>>> 最高位补0
(4)移位运算符的优先级比四则运算低
(1)左移:<< 最低位补0
(2)算数右移:>> 最高位补原数据的最高位(才能保持符号不变)
(3)逻辑右移:>>> 最高位补0
(4)移位运算符的优先级比四则运算低
面向对象
(1)类
1)类是一个概念抽象的定义。简单说类就是分类
2)类定义了该类型对象的数据结构,称之为“成员变量”,同时,也定义了一些
可以被调用的功能,称之为“方法”。
3)类是用于构建对象的模板,对象的实质就是内存中的一块存储区域,存储数据,
其数据结构由定义它的类来决定
(2)对象的创建
1)当一个类的定义存在后,可以使用new运算创建该类的对象,对象穿件的过程
一般成为类的实例化
2)对象是在堆中创建的,创建后,对象的元素初始值为0值,与数组相似。
(3)引用类型
1)除了8种基本类型之外,用类名(接口、数组)生命的变量称为引用类型变量,
就,简称引用。
2)引用类型变量的值中存储的是某个对象在内存中的地址信息。引用的功能在于
访问对象,引用类型按照如下方式进行声明:
类名 引用类型变量名
(4)对象的本质是:复合数据结构封装,如:Point封装了属性(x,y)
(5)对象创建后,其成员变量可以按照默认的方式初始化:
类型 默认初始值
byte/short/int/long/float/double 0
boolean false
char \u0000
引用类型 null
(6)成员变量和实例变量(成员变量)的区别
成员变量是main方法中声明的变量,在栈中分配;
实例变量是在对象中声明的变量,在堆中分配,有默认初始值;
(7)成员方法
一般用来操作本对象的属性。
(8)方法重载
定义一组方法,方法名一样,但是参数不一样。这些方法就相互构成了重载。
实现了类似的功能。
调用方法时,根据 参数列表和方法名 调用不同方法。
this关键字
(1)this是在方法中对当前对象的引用,本质是方法的隐藏参数,大多数情况不用
写明。生存周期是方法运行期间,运行完毕会被回收
(2)在方法运行期间引用了当前对象
(1)类
1)类是一个概念抽象的定义。简单说类就是分类
2)类定义了该类型对象的数据结构,称之为“成员变量”,同时,也定义了一些
可以被调用的功能,称之为“方法”。
3)类是用于构建对象的模板,对象的实质就是内存中的一块存储区域,存储数据,
其数据结构由定义它的类来决定
(2)对象的创建
1)当一个类的定义存在后,可以使用new运算创建该类的对象,对象穿件的过程
一般成为类的实例化
2)对象是在堆中创建的,创建后,对象的元素初始值为0值,与数组相似。
(3)引用类型
1)除了8种基本类型之外,用类名(接口、数组)生命的变量称为引用类型变量,
就,简称引用。
2)引用类型变量的值中存储的是某个对象在内存中的地址信息。引用的功能在于
访问对象,引用类型按照如下方式进行声明:
类名 引用类型变量名
(4)对象的本质是:复合数据结构封装,如:Point封装了属性(x,y)
(5)对象创建后,其成员变量可以按照默认的方式初始化:
类型 默认初始值
byte/short/int/long/float/double 0
boolean false
char \u0000
引用类型 null
(6)成员变量和实例变量(成员变量)的区别
成员变量是main方法中声明的变量,在栈中分配;
实例变量是在对象中声明的变量,在堆中分配,有默认初始值;
(7)成员方法
一般用来操作本对象的属性。
(8)方法重载
定义一组方法,方法名一样,但是参数不一样。这些方法就相互构成了重载。
实现了类似的功能。
调用方法时,根据 参数列表和方法名 调用不同方法。
this关键字
(1)this是在方法中对当前对象的引用,本质是方法的隐藏参数,大多数情况不用
写明。生存周期是方法运行期间,运行完毕会被回收
(2)在方法运行期间引用了当前对象
其他知识点
(1)定义类时,类的成员变量和方法要合理,不能与实际差的太多,这是一个写程序
的好习惯
(2)方法中声明的变量叫做局部变量。
(3)类、局部变量(方法中定义的变量)、对象的关系:
1)类(.class文件)是存储在硬盘中的。当使用时,会被加载到“方法区”中。
电脑执行的一直是方法区中的代码。
2)当main方法中创建一个类的引用变量(局部变量)时,变量在栈中分配。
3)使用new运算实例化对象时,对象在堆中创造,并按照属性分配空间。
eg:
一个类中有int x ; int y ;两个属性。那么它占用内存就是
两个int的大小。
对象的属性有默认值(0值);
4)通过赋值运算p = new Point();将局部变量p与创建的对象联系起来。
注意,创建的对象地址对开发者是透明的,不要想像C那样去找到地址。
5)在调用时,创建的引用变量指向创建的对象。
(4)从(3)中可以看到,代码在执行时,待执行代码放在“方法区”中,局部变量
放在“栈”中,对象放在“堆”中。
注意:不是所有变量都在栈中分配,比如对象的实例变量就在堆中分配。
(5)java只有局部变量,没有全局变量!没有全局变量!没有全局变量!
(6)堆和栈的容量有限,使用太多会超出内存。
(7)在同一个包中不能有同名称的类
(8)System.out.println()就是重载方法,
使用到的方法
(1)Integer.toBinaryString(n)
将n转换为二进制字符串输出。
(2)java中,每个类(class)在编译之后都会成为一个.class文件
(1)Integer.toBinaryString(n)
将n转换为二进制字符串输出。
(2)java中,每个类(class)在编译之后都会成为一个.class文件