------- android培训、java培训、期待与您交流! ----------
基本常识
▸ 软件
一系列按照特定顺序组织的计算机数据和指令的集合
▸ 人机交互
• 图形化界面 ▸ 命令行方式:控制台 dir md:创建目录 rd: 删除目录,必须保证目录为空 cd cd.. del:删除文件(包括文件夹内的文件) del *.txt 删除所有txt文件 exit
▸ Java语言概述
▸ 与平台无关 Java虚拟机JVM Java Virtual Machine 虚拟机依赖于系统 ▸ 三种技术架构 J2EE/JavaEE (Servlet JSP) J2SE/JavaSE J2ME/JavaME
▸ 语言环境
JRE Java Runtime Environment JDK Java Development Kit▸ Java平台图蓝色:开发工具
▸ 环境设置技巧
把变化的部分提取出来:haha=D:\jdk1.6.0_24
用%%动态获取某个已存在的环境变量:%haha%
临时配置环境变量:set
set path =
只在当前命令行窗口有效
添加新值:set path = 新值;%path%
通过start开启新的窗口,会沿用原来的配置
▸ 步骤
1. 编写.java文件 2. javac 编译 3. java 运行
▸ 设置classpath
set classpath = ***; 清空是等号后不加字符 虚拟机启动时先找classpath中的类再找当前目录的 如果不加分号只在classpath中找 最好不要加分号 如果要访问当前目录 set classpath = .;*** 点代表当前目录 path相反,会现在当前路径寻找,找不到再到环境变量
▸ Hello world程序
命名:驼峰标示 类名首字母大写,每个单词大写 程序的起始点:main函数 保证该类的独立运行
▸ 注释
文档注释 /* * 作者版本功能 */ 调试程序 多行注释中不能有多行注释 写代码先写: 需求 思路 步骤
语言基础
▸ 标示符
由26个英文字母大小写,数字0-9,符号_$组成 合法: 不可以数字开头 不可使用关键字 严格区分大小写
▸ 常量
整数 八进制:0开头 十六进制:0x开头 进制转换 十进制转二进制:除以2取余数 Integer.toBinaryString(); 二进制转十进制:乘以2的幂数 十进制八进制互转 十进制十六进制互转 十进制先换成二进制 四个二进制位就是一个十六进制位 三个二进制位就是一个八进制位 负数的二进制 对应的正数二进制取反加1 所以负数的二进制最高位是1 小数 布尔型 字符 单引号’ ‘ 字符串 双引号 “” null
▸ 变量
内存中的空间,存储不确定的数据
名称:变量名,类型:数据类型,数据
强类型语言:对具体的数据都进行了不同的定义,对类型的划分非常细致 数据类型正数默认int,小数默认double
byte 一个8位:-128~127 short 16位:-32768~32767 int 4个8位 CPU缓存:节约内存 float 4个8位 double 8个8位 char 0~65535:2个8位 定义:数据类型 变量名 = 初始化值; float f = 2.3f; float变量需要标示 char ch = ‘4’; 字符4 类型转换 自动类型提升(隐式):向上提升强制类型转换(显式) b = (byte)(b+2); int 和 float 运算:转换为float ‘a’ + 1:ASCII码加1 (char) (‘a’ + 1)
▸ 运算符
算术运算符 取模 1%-5 = 1 -1%5 = -1 字符串连接符 “” + “” 字符串数据和任何数据使用+都是连接符,最后都会转成字符串 转义字符 \ 通过反斜线来转变后面字母或符号的含义 \n 换行 \b 退格(backspace) \r 回车 \t 制表符(tab) 在Linux中换行是\n,在windows中是\r\n(DOS能直接识别\n) char c = ‘你’; char两个字节,中文汉字也是两个字节 赋值运算符:=,+=,-=,*=,/=,%= short s = 4; s+=5; 是正确的,会自动转换 s = s + 5; 则会编译出错 比较运算符 == 结果为true或false(boolean型) 逻辑运算符:连接布尔类型的表达式 ^ 异或 && || 短路 位运算符 << 左移:左移一位乘以2 >> 右移:右移一位除以2取整 >>> 无符号右移 带符号左右移会保留原数字的符号(最高位) & | ^ 按位运算 异或同一个数两次结果不变(简单加密原理) ~ 取反 负数:正数的反码+1 练习 1.最有效率的方式计算2乘以8:位运算 2<<3 2.对两个整数变量的值进行互换,不通过第三个变量 OperateDemo2.java n = n + m; m = n - m; n = n - m; 若n m 非常大,容易溢出 n = n ^ m; m = n ^ m; n = n ^ m; 3.获取16进制表示 OperateDemo3.java 求十六进制的最低四位:&15 第n个低四位:先右移(无符号)再&15 12转为16进制 (char)(12-10+’a’) 12 - 10 = 2 2 + ‘A’ = 67 (char)67 三元运算符 (条件表达式)?表达式1:表达式2 会自动提升
▸ 程序流程控制
判断结构 if if else 与三元运算符:三元运算符必须有运算结果 选择结构 switch switch (表达式) { case 取值1: 执行语句 ; break; case 取值2: 执行语句; break; … default: 执行语句; break; //可省略 } 选择类型只有 byte short int char 先case后default 结束条件 可以多个case一起 case 3: case 4: 相对高效,但是区间判断不简便,判断的具体数值不多时使用 循环结构 while do while 先执行一次后再判断条件 for for (初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句 } 变量的作用域问题 for的循环增量作用域只在{}中 如果要在循环结束后使用变量的值则要用while 练习1 ForTest.java 条件表达式要有真假 其他合法表达式就可以 初始化表达式和循环后的操作表达式可以有多个,用逗号隔开 初始化表达式和循环后的操作表达式可以不写 无限循环的最简单表现形式 for (;;) {} while(true) {} 练习2 ForTest2.java ForTest3.java for循环嵌套 九九乘法表 for (int x=1; x<=9; x++) { for (int y=1; y<=x; y++) { System.out.println(y+”*”+x+”=”+y*x+”\t”); } System.out.println(); } 其他语句 break:选择结构或循环结构 continue:只用于循环结构 应用范围:当前所在循环/结构 单独存在时下面不可以有语句 循环标示 a: for()… break a 跳出a循环 continue a 继续该循环(可用于嵌套)
▸ 函数
对功能的定义,提高复用性 修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2, …) { 执行语句; return 返回值; } 返回值类型为void时可以省略return语句 不能被输出 不能在函数中调用函数 定义 FunctionDemo2.java 明确返回值类型 明确参数列表:类型,个数 明确功能,不要添加多余(比如打印) 重载 overload 在同一个类中允许存在一个以上的同名函数,只要参数个数或类型不同即可 和返回值类型没关系
▸ 数组
同一种类型数据的集合:容器 定义 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 元素类型[] 数组名 = new 元素类型[] {元素, 元素, …}; 内存结构 栈 stack:数据使用完毕会自动释放 堆 heap 实体:数组和对象 实体中的变量都有默认初始化值 boolean: false 垃圾回收机制:回收不用的实体不同引用可指向同一实体 常见异常 ArrayIndexOutOfBoundsException 数组脚标越界异常 访问到了数组中不存在的脚标 NullPointerException 空指针异常 引用没有指向任何实体却操作实体中元素时 操作 获取元素:遍历 获取数组元素个数:数组名.length 数组的引用及地址 [I@de6ced @左边: [ 数组, I int @右边:哈希值 练习:获取最值 ArrayTest.java 临时变量=元素 临时变量=脚标 重载:double类型数组,int类型数组,… 排序 选择排序 ArrayTest2.java 内循环一次,最值出现在头脚标位置 冒泡排序 相邻两个元素比较 注意避免脚标溢界 最快:希尔排序 提高效率 不直接换元素,把要互换的脚标记录在栈中 Array.sort(); 位置置换代码封装成函数 查找 最简单:遍历 折半查找 有序数组,提高效率 ArrayTest4.java while(arr[mid]!=key) while(mid<=max) 练习:在有序数组中插入元素 用折半查找的原理 插入的元素总在两个数中间 练习:进制转换 ArrayTest5.java ArrayTest6.java 查表法 十进制—>二进制 while(num>0) %2 num/2 查表法 定义二进制的表 char[] chs = {‘0’, ‘1’}; 定义一个临时容器 char[] arr = new char[32]; 定义指针 int pos = arr.length; 循环 while(num!=0) { int temp = num&1; arr[- - pos] = chs[temp]; num = num>>>1; } 十进制 --> 十六进制 循环八次 &15 if(>9) 输出字母(char)-10+‘A’ >>>4 循环 查表法 用数组临时存储所有元素,建立对应关系 char chs[temp] 解决结果是反的问题 用StringBuffer存储模2的结果 append() 反向输出:reverse() 用数组 char[] arr = new char[8]; for(int i = arr.length-1; i >= 0; i++) 倒着打印 也可以倒着存入数组,正着打印 pos = arr.length; arr[—pos] = chs[temp]; 去掉多余的0 用while循环:while(num!=0) int pos =0; arr[pos++] = chs[temp]; 字符数组元素默认值’\u0000’ 空位 不打印空位:for(int i = pos-1;… 优化:提取转换方法 ArrayTest7.java public static void trans(int num, int base, int offset) {} int temp = num&base; arr[- -pos] = chs[temp]; num = num>>>offset; if (num == 0) 输出0 return; 二维数组 定义 int[][] y; int y[][]; int[] y[]; int[][] arr = new int[3][]; arr[0] 为null,默认初始化 arr[0] 是一个地址 二维数组的长度:包含的一位数组的个数 初始化 int [][] = new int[3][]; arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]; int[][] arr = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
遍历:二重循环嵌套