例:10110(2)–>22(10)
转换法则:8421法则
例:22(10)–>10110(2)
转换法则:除2取余,倒叙排列
bit(比特位):代表一个0或者1
byte(字节):代表8个0或者1,1byte=8bit
kb(字节):1kb=1024byte
dir: 列出当前文件夹下的所有文件和文件夹
cd 文件夹名: 进入该文件夹
cd\ :退到根目录
盘符: 切换盘符
cls: 清屏
网上搜索
jre:java运行时环境,包括 jvm+java的核心类库
jdk:java开发工具包,包括 jre+开发工具
java已经定义好的,具有特殊含义的单词
程序员定义的单词
一个整数没有特殊说明,默认就是int,如果要定义成long类型就必须加上L
一个小数没有特殊说明,默认就是double,如果要定义float类型就必须加上F
数据类型 变量名 = 值;
变量的使用:直接使用变量名就是使用变量中的值
变量可以多次赋值,变量中的值以最后一次赋值为准
变量可以定义的同时赋值,也可以先定义后赋值
为什么要数据转换,Java是一种强类型语言,如果两个数据的类型不一致,那么是不能参与运算的,需要转换为同一种类型才能运算。
数据范围小的转换成数据范围大的类型
(byte、short、char)—>int—>long—>float—>double
注意:byte、short、char这三种数据类型参与运算时,会无条件先住转成int再参与运算
示例代码
short s = 10;
double d = 3.14;
//short + double = int + double == double + double
double d1 = s + d;
数据范围大的转换为数据范围小的类型
格式:
数据范围小的类型 变量名 = (数据范围小的类型)数据范围大的值
‘A’---- 65、‘a’---- 97、‘0’---- 48
求和、连接字符串
++1/–1:表示先加/减1再使用
1++/1–:表示先试用再加/减1
&&:全真为真
||:全假为假
boolean值?值1:值2
如果boolean值为true,那么是值1
如果boolean值为false,那么是值2
权限修饰符 返回值类型 方法名(参数列表){
//方法体:完成某个功能的代码块
//返回值
}
if(判断条件){
//代码块;
}else{
}
//.....其他代码
switch(表达式){
case 值1:
代码块1;
break;
case 值2:
代码块2;
break;
case 值3:
代码块3;
break;
...
default:
代码块n;
break;
}
case的穿透:
在case后面的break;的作用:结束整个switch
从语法上来讲,break是可以省略的
但是如果没有break,会出现穿透现象
所谓的穿透是指,直接执行下一个case中的代码,而不进行匹配
for(a.计数器;b.循环条件;d.步进语句){
c.循环体
}
a.计数器;
while(b.循环条件){
c.循环体;
d.步进语句;
}
a.计数器
do{
c.循环体
d.步进语句
}while(b.循环条件);
for和while的区别:
a.如果已知循环次数,建议用for 如果未知循环次数建议用while
b.for循环计数器,在for循环结束之后不能使用
while循环的计数器,在while循环结束之后还可以使用
breake:
a.用于switch,结束整个switch
b.用于循环,立刻结束整个循环
continue:
a.用于循环,立刻结束本次循环.继续下一次循环
break对if是不起作用的,编译是会报错的
Java中最最最简单的死循环:
while(true);
for( ; ; ) ;
定义方法的完整格式:
权限修饰符 返回值类型 方法名(参数列表){
方法体
return 返回值
}
权限修饰符:public static(此时先这样记)
返回值类型:方法计算后结果的数据类型,如果没有就写void
方法名:见名知意+小驼峰
参数列表:该方法需要的未知量
方法体:完成方法的代码
return 返回值:表示返回方法 计算后的结果,返回到方法的调用处。还有表示方法的结束,这就意味着在这个语句后面的代码不起任何作用。
两个明确:明确返回值类型、参数列表
定义位置:类中其他方法外
赋值调用、输出调用。这两种调用又返回值时才有意义,没有返回值时这两种调用是报错的
单独调用:直接调用,实用于没有返回值时
重载概念:java允许在同一个类中,定义相同名字的方法,但是这些相同名字的方法必须有不同的参数列表
参数列表不同:参数个数、参数类型、参数顺序
JVM如何判断是调用哪个方法:通过调用时传递实际参数的类型
注:方法是不是重载看方法名、看参数列表
概念:好比一个容器,可以保存多个变量/数据
特点:数组容器中所有数据的数据类型都时一致的、数组在程序运行时长度时固定的
元素:数组中的数据叫做元素
1.数据类型[ ] 数组名 = new 数据类型[长度]
指定数组的长度,每一个元素的值由系统赋默认值
长度表示该数组中元素的个数
例:定义一个数组,保存我们班所有人的年龄
int[ ] ages = new int[58];
注:
整数类型: 默认值就是0
浮点数类型: 默认值就是0.0
字符类型: 默认值是空格
布尔类型: 默认值是false
String类型: 默认值 null
2.数据类型[ ] 数组名 = new 数据类型[ ]{值1,值2…}
指定数组的每个值,系统自动计算到底有多少个元素
例:定义数组,保存1-10这些数字
int[] nums = new int[]{1,2,3,4,5,6,7,8,9,10};
3.数据类型[ ] 数组名 = {值1,值2…}
语法糖格式
例:定义数组,保存1-10这些数字
int[] nums = {1,2,3,4,5,6,7,8,9,10};
索引:数组中元素的编号,但是从0开始的,也叫做下标
访问元素:数组名[索引]
数组的长度属性:数组名.length
了解Java虚拟机内存划分
栈区(stack):运行方法、保存变量
堆区(heap):保存对象(保存new出来的东西)
方法区(method area):保存.class文件
一个数组内存图
两个数组内存图
两个数组变量名指向同一个数组
ArrayIndexOutOfBoundsException:数组越界
产生原因:程序员访问了不存在的索引
解决:修改索引,不要超过 数组.length-1
NullPointerException:空指针异常
产生原因:清空数组名的地址,再访问数组的元素
解决:不清空或者清空了不访问
1.遍历
//数组遍历输出
public static void test1() {
int[] nums = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
2.获取最大值或者最小值
//获取数组的最大值或者最小值
public static void test2(){
int[] sz = {0,15,10000,4000,3456,1234,19899};
int max = sz[0];
for(int i = 1;i<sz.length;i++){
if(sz[i]>max){
max = sz[i];
}
}
System.out.println("max:"+max);
}
3.数组反转
//数组反转
public static void test3(){
int[] sz = {0,15,10000,4000,3456,1234,19899};
for(int min = 0,max = sz.length-1;min<max;min++,max--){
int temp = sz[min];
sz[min] = sz[max];
sz[max] = temp;
}
for (int i = 0; i < sz.length; i++) {
System.out.println(sz[i]);
}
}
1.数组作为方法的参数
psvm{
int[] nums = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
test4(nums);
}
//数组作为参数
public static void test4(int[] nums){
for(int i = 0;i<nums.length;i++){
System.out.println(nums[i]);
}
}
2.数组作为返回值
psvm{
int[] num = getHccj(5, 6);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}
//数组作为返回值
public static int[] getHccj(int num1, int num2) {
int he = num1 + num2;
int cha = num1 - num2;
int cheng = num1 * num2;
int ji = num1 / num2;
int nums[] = {he, cheng, cha, ji};
return nums;
}
参数是基本类型:
当方法的参数是基本类型时,形参的改变不会影响到实参
参数是引用类型:
当方法的参数是引用类型时,形参的改变会影响到实参