1.十进制与二进制间的转换
十进制数据转成二进制数据:使用除以2获取余数的方式
二进制数据转成十进制数据:使用8421编码的方式
2.字节
8个bit(二进制位) 0000-0000表示为1个字节,写成1 byte或者1 B。
8 bit = 1 B
1024 B =1 KB
1024 KB =1 MB
1024 MB =1 GB
1024 GB = 1 TB
3.常用dos命令
盘符切换命令 盘符名:
查看当前文件夹 dir
进入文件夹命令 cd 文件夹名
退出文件夹命令 cd..
退出到磁盘根目录 cd\
清屏 cls
4.JVM ,JRE ,RDK
JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的
运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上
Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机。
JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。
JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具。
5.标识符
标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
命名规则: 硬性要求
标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。
标识符不能以数字开头。
标识符不能是关键字。
命名规范: 软性建议
类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
变量名规范:全部小写。
6.数据的基本类型
7.数据类型的转换
自动转换规则
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
强制转换
数据类型 变量名 = (数据类型)被转数据值;
浮点转成整数,直接取消小数点,可能造成数据损失精度。
int 强制转成 short 砍掉2个字节,可能造成数据丢失。
8.ASCII和Unicode编码表
在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念。
编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格
9.自增自减
独立运算++X和后++X无差别,混合运算,++X先自增再运算,X++先进行运算再自增;
10.逻辑运算符
&&与 、||或、 !非
&&
两边都是true,结果是true
一边是false,结果是false
短路特点:符号左边是false,右边不再运算
||
两边都是false,结果是false
一边是true,结果是true
短路特点: 符号左边是true,右边不再运算
11.成员方法定义
方法必须定义在一类中方法外
方法不能定义在另一个方法的里面
12.+=符号
s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点,
也就是说 s += 1 就是 s = (short)(s + 1)
13.常量优化机制...
byte b1=1;
byte b2=2;
byte b3=1 + 2;
byte b4=b1 + b2;
分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。
反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败
14.三元运算符
c = a > b ? a:b;
15.switch case default:
switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
16.for 和while
for 和 while 的小区别:
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
17.Break 和continue
break
使用场景:终止switch或者循环
continue
使用场景:结束本次循环,继续下一次的循环
18.死循环和嵌套循环
死循环:也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}
所谓嵌套循环,是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数
19.方法的重载和调用overload
不能用输出语句调用 void 类型的方法。因为方法执行后没有结果,也就打印不出任何内容
参数列表:参数个数不同,数据类型不同,数据类型顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法。
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
20.参数传递注意
方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.
21.Java虚拟机内存划分
22.排序求最值
反转排序
for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
求最值
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr > max) {
max = arr;
}}
占位排序/选择排序
public static void paixu1(int[] list) {
int[] list1 = { 9, 12, 6, 8, 14 };
for (int i = 0; i < list.length-1
; i++) {
for (int j = i + 1; j < list.length; j++) {
if (list[j] > list) {
int st = list;
list = list[j];
list[j] = st;
} } }}
冒泡排序
public static void maopao(int[] s) {
for (int i = 0; i <s.length; i++) {
for (int j = 0; j < s.length -i-1; j++) {
if (s[j] < s[j + 1]) {
int st = s[j];
s[j] = s[j + 1];
s[j + 1] = st;
}
}
}}
折半查询 比较中间索引的值改变最大最小的索引为中间索引
public static int halfSearch(int[] arr, int number) {
int min = 0;
int max = arr.length - 1;
int mid = 0;
while (min <= max) {
mid = (min + max) / 2;
if (arr[mid] > number) {
max = mid - 1;
} else if (arr[mid] < number) {
min = mid + 1;
} else {
return mid;
}
}
return number;
}
23.面向对象
面向对象和面向过程区别:
面向过程:强调步骤;面向对象:强调对象。
类是对一类事物的描述,是对象的模板,对象是类的实体。是抽象的。
对象是一类事物的实例,是一类事物的具体体现。对象是类的一个实例必然具备该类事物的属性和行为。
定义类:就是定义类的成员,包括成员变量和成员方法。
成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
成员方法:和以前定义方法几乎是一样的。只不过把static去掉。
创建对象:类名 对象名 = new 类名()
使用对象访问类中的成员:对象名.成员变量;对象名.成员方法。
三大基本特征:封装,继承,多态
24.成员变量默认值以及和局部变量区别
在类中的位置不同 重点
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
作用范围不一样 重点
成员变量:类中
局部变量:方法中
初始化值的不同 重点
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
在内存中的位置不同 了解
成员变量:堆内存
局部变量:栈内存
生命周期不同 了解
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
25.封装
封装的操作——private关键字
封装的优化,this关键字和构造方法
使用 this 修饰方法中的变量,解决成员变量被隐藏的问题
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
26.Scanner和Random
Scanner 一个可以解析基本类型和字符串的简单文本扫描器。 例如,使用户能够从 System.in 中读取一个数。
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
匿名对象 :没有变量名的对象。
Random生成伪随机数
Random r = new Random();
int i = r.nextInt();
27.ArrayList
public boolean add(E e) :将指定的元素添加到此集合的尾部。
public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。
public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界
28.String
判断相等
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
获取功能
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到
endIndex截取字符串。含beginIndex,不含endIndex
转化功能
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。
分割功能
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
29.Static
类变量:
private int age;
private int sid;
public static int numberOfStudent = 0;
public Student(String name, int age){
this.name = name;
this.age = age;
// 通过 numberOfStudent 给学生分配学号
this.sid = ++numberOfStudent;
}
静态方法
静态方法调用的注意事项:
静态方法可以直接访问类变量和静态方法。
静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
静态方法中,不能使用this关键字。
//被static修饰的成员可以并且建议通过类名直接访问。
静态代码块
静态代码块:定义在成员位置,使用static修饰的代码块{ }。
位置:类中方法外。
执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。
30.Arrays类
java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。
public static String toString(int[] a) :返回指定数组内容的字符串表示形式
public static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序,Arrays.sort(chars);
31.Math类
public static double abs(double a) :返回 double 值的绝对值。
public static double ceil(double a) :返回大于等于参数的最小的整数,向上取整
public static double floor(double a) :返回小于等于参数最大的整数,向下取整
public static long round(double a) :返回最接近参数的 long。(相当于四舍五入方法)返回整数。
32.继承
继承好处: 1. 提高代码的复用性。 2. 类与类之间产生了关系,是多态的前提。
继承后的特点:
成员变量:
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰父类成员变量。super.父类成员变量名
成员方法:
方法重写override :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
小贴士:这里重写时,用到super.父类成员方法,表示调用父类的成员方法。
继承后的构造方法
构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构造方法调用时,一定先调用父类的构造方法。
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现
继承的特点
Java只支持单继承,多层继承
33.抽象类
是一种定义类,描述类,类的修饰权限必须是public
1.抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义
2.* 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义
34.接口
类的修饰权限也必须是public
默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。特点,有方法体;
静态方法:使用 static 修饰,供接口直接调用,特点,有方法体;
私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。
接扣的多实现
之前学过,在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现。并且,一个类能继承一个父类,同时实现多个接口。
接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名的,只需要重写一次。
接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
*接口中,没有构造方法,不能创建对象。
接口中,没有静态代码块。
35.多态
前提
1. 继承或者实现【二选一】
2. 方法的重写【意义体现:不重写,无意义】
3. 父类引用指向子类对象【格式体现】
多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。
向上转型:
父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();
向下转型:调用用子类特有方法
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。
36.Final
final: 不可改变。可以用于修饰类、方法和变量。
修饰类:被修饰的类,不能被继承。
修饰方法:被修饰的方法,不能被重写。
修饰变量:被修饰的变量,不能被重新赋值。
37.修饰权限
编写代码时,如果没有特殊的考虑,建议这样使用权限:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。
小贴士:不加权限修饰符,其访问能力与default修饰符相同
38.内部类
成员内部类 :定义在类中方法外的类
访问特点
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类
的对象。
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
匿名内部类:
匿名内部类必须继承一个父类或者实现一个父接口。
39.最后点点不写了
class作为成员变量
interface作为成员变量
interface作为方法参数和返回值类型
List 接口作为参数或者返回值类型时,当然可以将 ArrayList 的对象进行传递或返回。 |
|