[TOC]
计算机基础
计算机概述
- 计算机
- 计算机硬件
- 计算机软件
- 系统软件:windows,linux,mac
- 应用软件:qq,yy
- 软件开发
- 软件:是由数据和指令组成
- 开发:把软件做出来
- 如何实现软件开发?
- 使用开发工具和计算机语言做出东西
- 语言
- 自然语言
- 计算机语言:人与计算机交流沟通的,c,c++,c#,java
- 人机交互:
- 图形界面:操作方便
- Dos命令:需要记忆一些常见的命令
常见的Dos命令
- 盘符的切换
- d: 回车
- 目录的进入
- cd xxx
- cd xx\yyy
- 目录的回退
- cd .. 退回到上一级
- cd\ 退回到根目录
- 清屏
- cls
- 退出
- exit
- 创建目录
- md xx
- 删除目录
- rd xx (只能删空的)
- 创建文件
- 删除文件
- del xxx
- *.txt
- 显示目录下的内容
- dir xx
- 删除带内容的目录
- rd (/q) /s xxx
Java语言平台
- JavaSE
- JavaME---Android
- JavaEE
JDK\JRE\JVM的作用及关系
- 作用:
- JVM(Java Virtual Machine):保证Java语言跨平台
- JRE(Java Runtime Environment):Java语言的运行环境
- JDK(Java Development Kit):Java语言的开发环境
- 关系:
- JDK:JRE + Java开发工具(javac.exe 编译;jar.exe 打包)
- JRE:JVM + 类库
- 总结:使用JDK开发工具,交给JRE运行,由JVM保证跨平台
Java关键字
注意事项:全部小写
Java标识符
概述
给类、接口、方法、变量等起名字时的字符序列。 组成规则:
- 英文大小写
- 数字字符
- $或者_
注意事项:
- 不能以数字开头
- 不能是Java中的关键字
- 区分大小写
包
类比于文件夹,用于把相同的类名进行区分,全部小写。 单级包:xxx 多级包:yy.xx(反写
类或接口
一个单词:首字母大写 多个单词:每个单词首字母大写
方法或变量
一个单词:首字母小写 多个单词:从第二个开始,每个单词首字母大写
常量
一个单词:全部大写 多个单词:全部大写,单词间用_隔开
注释
作用:
- 提高代码阅读性
- 帮助调试
三种类型:
- 单行注释://注释文字
- 多行注释:/* 注释文字 * /
- 文档注释:/** 注释文字 * /
代码开头一般需要注释说明:需求+分析+实现
常量
分类:
- 字面值常量
- 字符串常量,双引号,例如“Hello”
- 整数常量,所有整数,例如 999
- 小数常量,所有小数,例如 3.1415
- 字符常量,单引号,例如 ‘a’,'0',错误示例:‘ab’
- 布尔常量,两个,true,false
- 空常量,一个,null
- 自定义常量
- final关键字定义
进制
System.out.println(100); //默认十进制
System.out.println(0b100); //0b开头,二进制
System.out.println(0100); //0开头,八进制
System.out.println(0x100); //0x开头,十六进制
进制之间的转换:
- 其他进制转换成十进制
- 十进制转换成其他进制:取余
- 快速转换
- 十进制二进制:8421
- 二进制与八进制/十六进制:拆解
- 任意进制之间的转换:以十进制为桥梁
原码反码补码
数据在计算机中以二进制补码形式存储 分为符号位和数值位 正数三者相同 负数:
- 反码 = 符号位不变,数值位取反
- 补码 = 反码 + 1
变量
格式:数据类型 变量名 = 初始化值;(未初始化值的变量不能使用,在使用前赋值即可,建议在定义时赋值 数据类型的分类:
- 基本数据类型(四类八种)
| 数据类型 | 占用字节数 | 数值范围 | |
|---|---|---|---|
| 整数 | byte | 1 | -128~+127 |
| short | 2 | -2^15~+2^15-1 | |
| int | 4 | -2^31~+2^31-1 | |
| long | 8 | -2^63~+2^63-1 | |
| 浮点数 | float | 4 | -3.403E38~3.403E38 |
| double | 8 | -1.798E308~+1.798E308 | |
| 字符 | char | 2 | |
| 布尔 | boolean | 1 | 0 1 |
| 整数默认int类型,小数默认double类型 | |||
| Q:float数据类型:数据在内存中是如何存储的??????????????????? |
long j = 10000000000L; //长整型后缀用L或者l标记,建议使用l(未超出int范围可不加,最好加
float f = 3.14F; //单精度后缀加F或f, 建议F
强制类型转换
目标数据类型 变量名 = (目标数据类型)(被转换的数据);
int a =3;
byte b = 9;
byte c = (byte) (a+b)
float f1 = (float) 12.345;
float f2 = 12.345F; //更好一些,本身就是float类型
/*
一道面试题
byte b1 = 3, b2 = 4, b;
b = b1 + b2;
b = 3 + 4;
Q: 哪一句会编译失败???
A: b = b1 + b2;
因为变量相加,首先会看类型,最终把结果赋值也考虑类型。
常量相加,先做加法,看结果是否在赋值变量的数据类型的范围内,如果不是,才报错。
*/
Q: byte b = (byte) 130; //会输出什么??
A: 分析:1.先得到130的补码。2.截取byte。 3. 已知补码求原码
-126
默认转换:
- byte/short/char --- int --- long --- -float ----double
- byte/short/char之间不互相转化,参与运算前先转换为int
System.out.println("hello" + 'a' + 1); //helloa1
System.out.println( 'a' + 1 + "hello" ); //98hello
System.out.println( "5+5=" +5 + 5 ); //5+5=55
System.out.println( 5 + 5 + "=5+5" ); //10=5+5
运算符的使用
++ / --
- 放在操作数前面,先自增/自减,再参与运算
- 放在操作数后面,先参与运算,再自增/自减
int x = 4;
int y = (x++) + (++x) + (x*10)
//参与运算的值:4,6,60
//x的值: 5,6,6
赋值运算符 =
// 有问题
short s = 1;
s = s + 1;
// 无
short s = 1;
s += 1; //扩展的赋值运算符隐含了一个强制类型转换,等价于 s = (s的数据类型)(s+1);
逻辑运算符
逻辑运算符连接布尔类型表达式:3<x<6(错误) x>3&x<6 异或:情侣关系,两次异或等于原值。 &&具有短路效果 逻辑运算符和位运算符:& | ^ 当两边是布尔值,逻辑运算;数值,位运算。
/*
需求:两个数值交换
*/
// 实现1:两次异或
a = a ^ b;
b = a ^ b;
a = a ^ b ;
// 实现2: 变量相加
a = a + b;
b = a - b;
a = a - b;
// 一句话搞定
b = (a + b) - (a = b );
三目运算符
格式:比较表达式?表达式1:表达式2;
/*
需求:获取三个数中的较大值
*/
// 实现1:分两步
int temp = (a > b)? a : b;
int max = (temp > c)? temp : c;
//实现2:一步到位
int max = (a > b)? ((a > c)? a : c) : ((b > c)? b : c);
三目运算符和if语句的关系:三目运算符是个运算符,必须要有一个结果返回,不能是一个输出语句。 测试数据:正确数据,错误数据,边界数据。
switch语句
switch(表达式):表达式的取值是有限定的,byte/short/int/char JDK5之后可以是枚举,JDK7以后可以是字符串。 格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
/*
跳出循环的条件:
- 遇到break
- 执行到末尾;
*/
int x = 2;
int y = 3;
// 代码段1
switch(x) {
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y = " + y); //在default中++ 然后跳出循环,输出4
//代码段2
switch(x) {
default:
y++;.
case 3:
y++;
case 4:
y++;
}
System.out.println("y = " + y); //都走一遍,输出6
if语句和switch语句的区别:
- if语句 -- 针对结果是boolean类型的判断 -- 针对一个范围的判断 -- 针对几个常量值的判断
- switch语句 -- 针对几个常量值的判断
break跳出单层和多层循环 return 结束方法
方法(函数)
格式: 修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名,……){ 方法体; return 返回值; } 注意事项:
- 方法不调用不执行
- 方法之间是平级关系,不能嵌套定义
- 参数之间用逗号隔开,参数传递时,不传递类型
- 如果有明确的返回值,一定要传值回去
方法重载
在同一个类中,方法名相同,参数列表(参数个数或参数类型)不同,(与返回值类型无关
/*
方法重载实例
*/
public static void main(String[] args){
short s1 = 2;
short s2 = 3;
byte b1 = 5;
byte b2 = 6;
System.out.println(compare(1,2));
System.out.println(compare(s1,s2));
System.out.println(compare(b1,b2));
System.out.println(compare(1999L,1999L));
}
//int类型数据
public static boolean compare(int a,int b){
System.out.println("int");
return a==b;
}
//short类型数据
public static boolean compare(short a,short b){
System.out.println("short");
return a==b;
}
//long类型数据
public static boolean compare(long a,long b){
System.out.println("long");
return a==b;
}
//byte类型数据
public static boolean compare(byte a,byte b){
System.out.println("byte");
return a==b;
}
数组
存储同一种数据类型的多个元素的集合(容器)。 定义格式:
- 数据类型[] 数组名;
- 数据类型 数组名[];
初始化:
- 必须先初始化才能使用。
- 初始化:分配空间并赋值
- 动态初始化:只指定长度,系统自动赋值。 -- 数据类型[] 数组名 = new 数据类型[数组长度]; int[] arra = new int[100];
- 静态初始化:赋值,系统自动计算长度 -- 数据类型[] 变量名 = new 数据类型[]{元素1,元素2,……};int[] arr1 = new int[]{1,2,3,4,5}; -- 简化格式:数据类型[] 变量名 = {1,2,3,4.5};
内存分配:5大部分
| 名称 | 作用 |
|---|---|
| 栈 | 存放局部变量 |
| 堆 | 存放所有new出来的东西 |
| 方法区 | (面向对象部分) |
| 本地方法区 | 和系统相关 |
| 寄存器 | CPU使用 |
栈内存的数据用完就释放掉 堆内存的特点:
- 每个new出来的东西都有地址值
- 每个变量都有默认值 -- byte/short/int/long 0 -- float/double 0.0 -- char '\u0000' -- boolean false -- 引用类型 null
- 使用完毕就变成了垃圾,但不会立即回收,在垃圾回收器空闲时回收
/*
两个栈变量指向同一个内存
*/
int[] arr = {1,2,3};
int [] arr2 = arr;
arr2[0] = 66;
arr2[1] = 88;
二维数组
格式:
/*
格式
*/
/*
- 数据类型[][] 数组名 = new 数据类型[m][n];
数据类型 数组名[][] = new 数据类型[m][n];
数据类型[] 数组名[] = new 数据类型[m][n];
- 数据类型[][] 数组名 = new 数据类型[m][]; arr[0] = new int[4]; arr[0][0] = 12;
//允许二维数组中的一维数组元素个数不同:
- 数据类型[][] 数组名 = new 数据类型[][]{{1,2,3},{3,2,1},……} ;
简化版: 数据类型[][] 数组名 = {{1,2,3},{3,2,1},……};
*/
int[] x,y[]; //int 类型的一维数组x和二维数组y
/*
配合下图一起食用
*/
public static void main(String[] args){
int[][] arr = new int[3][];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[1][0] = 100;
arr[1][2] = 200;
System.out.println(arr[2][0]);
System.out.println(arr[2][1]);
}
p152
基本类型传递数值,引用类型传递地址值。