首页 java学习资料(比较牛)

java学习资料(比较牛)

举报
开通vip

java学习资料(比较牛) JAVAJAVAJAVAJAVA学习资料 JAVA学习资料.................................................................................................................................1 第一章第一章第一章第一章 UnixUnixUnixUnix.......................................................................

java学习资料(比较牛)
JAVAJAVAJAVAJAVA学习资料 JAVA学习资料.................................................................................................................................1 第一章第一章第一章第一章 UnixUnixUnixUnix....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................2222 Day01:UNIX介绍和基本指令......................................................................................2 Day02:UNIX指令(二)和 VI的使用.............................................................................3 第二章第二章第二章第二章 CoreJavaCoreJavaCoreJavaCoreJava....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................7777 Day01:java的配置和编译.............................................................................................7 Day02:进制转换和补码运算.........................................................................................9 Day03:java的移位和逻辑运算...................................................................................13 Day04:java的基本语句...............................................................................................16 Day05:java的循环语句和方法数组介绍................................................................... 17 Day06:java的递归和二维数组介绍........................................................................... 21 Day07:java的排序算法介绍.......................................................................................23 Day08:java的面向对象基础.......................................................................................25 Day09:java面向对象(二)............................................................................................ 27 Day10:javaBean介绍和父类子类转换.......................................................................29 Day11:java的抽象类和接口....................................................................................... 32 Day12:String类和字符编码介绍................................................................................34 Day13:正则 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式和包装类.......................................................................................37 Day14:java的内部类...................................................................................................38 Day15:java的集合类...................................................................................................39 Day16:java的异常处理...............................................................................................41 Day17:Swing介绍....................................................................................................... 43 第一章第一章第一章第一章UnixUnixUnixUnix Day01Day01Day01Day01:UNIXUNIXUNIXUNIX介绍和基本指令 OS: 包括:内核 和 外壳 以及实用工具 内核很小:一般只有 1M左右,是操作硬件的系统调用集合,如:读写文件系统等 外壳:是连接系统内核与用户的界面工具 常见的用两类:命令行与图像界面 如:BASH(终端) WIN: CMD 和 资源管理器 命令的语法: command [-选项] [参数] cd /etc pwd 打印工作目录 ls 列目录命令,默认列出当前工作目录内容 cd 更改当前工作目录 cd 默认返回个人主目录 cd == cd ~ cp 复制文件命令 如:cp passwd ~/passwd cat 显示文本文件内容 more 分屏显示信息 | 是管道符号,把第一个命令的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输出结果作为第二个命令的输入 grep 是按照一定的规则过滤结果。 Linux 文件系统 1 只有一个根目录 "/", 2 磁盘卷被影射到指定目录 3 个人主目录(home dir) 4 当前工作目录 5 Linux 默认是普通用户登录, 可以修改个人主目录中的东西,其他目录只能读取 Linux的管理员是 root 用户 /etc 6 以“.” 为开头的是隐藏文件 7 ~ 表示个人主目录 8 关于/etc文件夹,是 Linux的配置管理目录。里面包含很多的文本文件,Linux的几乎全 部配置信息都在这里。类似于:Win XP的注册表 passwd 就是系统的密码文件,是一个文 本文件里面包含全部的系统登录用户信息 9 凡是以/开始的路径都是绝对路径 如:cd /etc, cd /home, cd /home/soft01 相对路径,相对于当前目录而言:cd soft01 cp /etc/passwd abc1 cp /etc/passwd ~/abc2 cp /etc/passwd /home/soft01/abc3 cp /etc/passwd ./abc4 cp /etc/passwd . man cp help cd md5sum Day02Day02Day02Day02:UNIXUNIXUNIXUNIX指令((((二))))和 VIVIVIVI的使用 mkdir 创建目录 rm 删除文件或目录 rm -rf abc chmod 修改授权命令 如:chmod -x abc 000 0 --- 001 1 --x 010 2 -w- 011 3 -wx 100 4 r-- 101 5 r-x 110 6 rw- 111 7 rwx 421 111(2) = 1×2^2 + 1×2^1 +1×2^0 = 1×4 + 1×2 + 1×1 = 7(10) 250 = 2×100 + 5×10 + 0×1 = 2×10^2+ 5×10^1 + 0×10^0 mv 移动或者改名 echo 回显信息到标准输出(控制台,终端) ">" 输出重定向,重新定向标准输出 vi [filename]全屏幕文本编辑工具 默认是命令状态 :q 退出命令 :q! 强制退出(不保存!) :w [filename] 写命令(保存) :w! [filename] 强制写命令(保存) :wq :wq! i,o,a 命令,可以进入编辑状态 (insert, open, append) dd 删除一行,并且放到剪切板中 p 粘贴 P 粘贴 :help / 和 ?查找 n 查找下一个 [esc] 键 总是返回”命令状态“,会”响铃“ 编辑状态(插入状态) 环境变量: PATH OS的可执行命令的搜索路径 环境变量实验: ifconfig echo $PATH export PATH=$PATH:/sbin echo $PATH ifconfig profile 初始化脚本文件,会在系统启动时候 自动运行 1 系统初始化脚本 系统级:在/etc 用户级: ~/.bash_profile ~/.profile 修改以后,使用 source执行脚本,验证是否正确。 source .bash_profile 2 控制台脚本文件(.sh) 1 创建文本文件:vi backup.sh 内容如下: cd rm -rf backup mkdir backup cd backup cp /etc/passwd . cp /etc/profile . md5sum passwd profile >backup.md5 cd .. echo Backup Success! 2 修改授权 chmod 700 backup.sh 3 复制 cp backup.sh ~/bin 4 执行 backup.sh tar linux 的打包命令 tar -cvf filename.tar file file ... -c 打包,习惯扩展名: .tar -v 查看打包过程 -f 指定包文件名 -z 使用 gzip压缩打包结果,习惯使用扩展名 .tar.gz -x 释放文件到当前目录 打包文件示例 tar -cf backup.tar backup file tar -zcf backup.tar.gz backup file ls 释放文件示例 mkdir demo cd demo tar -zxf ../backup.tar.gz tar -xf ../backup.tar ls cp 复制文件夹 cp -r /sbin ~/syscmd ftp 远程文件传输 ftp [host] ftp 192.168.0.23 user: openlab pwd:open123 ftp 命令 ls 显示主机文件列表 cd mkdir 在主机上创建目录 ?ftp 命令帮助 put 上载:把当前目录的指定文件上载到主机 的当前目录 bye 离开 ftp命令,可以简写:by bin 切换传输模式为 bin get 下载 sd1010 ftp 参考命令示例: cd cp /etc/passwd . ftp 192.168.0.23 (输入用户名和密码) (以下是 ftp命令) ls mkdir testbyrobin (在服务器创建文件夹) cd testbyrobin put passwd ls bye mkdir test (在本地创建) cd test ftp 192.168.0.23 (输入用户名和密码) (以下是 ftp命令) cd testbyrobin get passwd by ls 作业: 1 实现备份脚本,将目录:/sbin /etc/init.d /etc/profile.d 备份到:~/sysbak.tar.gz 要求:需要先把备份文件复制到~/sysbak 文件夹 备份以后删除~/sysbak文件夹。 2 上载 (作业 1) 的备份文件 3 下载(作业 1)文件到不同的文件夹中, 并且解包 第二章第二章第二章第二章 CoreJavaCoreJavaCoreJavaCoreJava Day01Day01Day01Day01:javajavajavajava的配置和编译 ln 创建链接命令 ln -s 创建符号链接(软连接) 如:ln -s 文件夹 链接名 JDK java开发工具包 |-- 开发工具: java, javac, jar... |-- JRE java 运行环境 |-- Java系统类库(API) |-- JVM Java虚拟机 java 网站:java.sun.com 下载 JDK:jdk-1_5_0_09-linux-i586.bin 安装 JDK: chmod +x jdk-1_5_0_09-linux-i586.bin ./jdk-1_5_0_09-linux-i586.bin 默认释放到 jdk1.5.0_09 配置 JDK, 可以使用软连接实现灵活配置 ln -s $HOME/jdk1.5.0_09 java 1 把 Java提供的命令配置到 PATH上 2 Java主目录:JAVA_HOME,指向 JDK的安装目录 (可以指向软连接,软连接是一个虚拟目录, 方便灵活修改 JDK的版本,只要修改链接文件就行) 3 配置 Java类的搜索路径:CLASSPATH,可以简单 设置为:".",表示 Java默认在当前目录搜索类。 如: export JAVA_HOME=$HOME/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=. WINDOWS JDK 的配置 如: set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_01 set PATH=%JAVA_HOME%\bin;%PATH% set CLASSPATH=. 创建源文件:vi HelloWorld.java package day01; public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } 编译:javac -d . HelloWorld.java -d 表示指定编译的输出目录,并且自动创建包 检查编译结果: ls ls day01 运行:java day01.HelloWorld java [全限定名=包名.类名] 注意:全限定名!=文件名 Java 根据 CLASSPATH的值,搜索“全限定名”指定的 类文件,并且执行,如果没有找到会报错误: NoClassDefFoundError 以下代码实验了 CLASSPATH cd / java day01.HelloWorld (报错,找不到类) export CLASSPATH=.:$HOME/sd1010/day01 java day01.HelloWorld (正常运行) hi 脚本内容 # java -classpath $HOME/sd1010/day01 day01.HelloWorld export CLASSPATH=$HOME/sd1010/day01 java day01.HelloWorld jar 是 java 打包发布命令 jar -cf hello.jar day01 package2 解包: jar -xf hello.jar 执行打包的类: java -cp hello.jar day01.HelloWorld 作业: 编写一个 Java应用,输出个人信息 打包 使用系统脚本运行:me Day02Day02Day02Day02:进制转换和补码运算 关于二进制 1 计算机只认识 2进制。 2 一般只处理补码数据(自动处理+-号问题) 3 16进制是给人看的,是二进制的简写形式 计算机处理数据都是以 Byte为最小单位处理的。 八位二进制的权: 128 64 32 16 8 4 2 1 16进制的权:256 16 1 01001001(2)= 64 + 8 + 1 = 73(10) 49(16) = 4×16 + 9×1 = 73(10) 16进制的数 0~9,a,b,c,d,e,f 0100 1001 4 9 1101 1111 d f 10进制转换为二进制 123(10) = 0111 1011(2)=7b(16) 128 64 32 16 8 4 2 1 0 1 1 1 1 0 1 1 补码 1 计算机只处理补码数据 2 正数的补码就是本身 3 负数补码,取反加一,负号转换成符号位 符号位(最高位):0表示正数,1表示负数 4 补码的符号位可以参与运算,会按照数学 运算规则自动处理符号转换问题。 5 补码转换原码,刨掉符号位,取反加一 -123(10) = - 111 1011(2) = 1 000 0101(补) -1(10) = - 000 0001(2) = 1 111 1111(补) -123(10) 10000101(补) × -1(10) 11111111(补) --------------------------------------- 10000101 10000101 10000101 10000101 10000101 10000101 10000101 10000101 211111 --------------------------------------- 123(10) 01111011(高于 8位舍弃) -123(10) 10000101(补) + -1(10) 11111111(补) 11111111 --------------------------------------- 10000100(补) -124(10) - 1111100(2) 16位补码: -1(10)= - 000 0000 0000 0001 = 1 111 1111 1111 1111 = ffff 8位补码 MAX: 0111 1111(补) = 127(10) = 7f(16) MIN: 1000 0000(补) = -128(10) = 80(16) ff = -1 16位 MAX: 7fff(16) MIN: 8000(16) -1: ffff 00ff = 255 32位 MAX: 7fffffff(16) MIN: 80000000(16) -1: ffffffff(16) 0: 00000000(16); 注释 1 被 javac 忽略的内容 // 单行注释 /* 多行注释 */ /** 文档注释 */ 变量 1 变量的声明(定义) 如:int age; 2 变量必须声明并且初始化以后使用(读取) 初始化:就是第一次赋值 如:int age; age = 13; 经常声明直接初始化:int age=13; 3 变量一定有类型 Java变量分为:基本类型,引用类型 4 变量有作用域。是从声明的地方开始,到代码 块结束。 5 变量不能重复定义 Java 的标识符命名: 变量名,类名,方法名, 包名, 常量名。 1 必须以“字符” "_" "$" 为开头,不能是数字 “字符” 可以是任意 Unicode 如:int 年龄 = 13; 习惯上只允许使用“英文”! 2 第二个字母可以是任意单词字符和数字 但是不能是特殊符号:+ - * / . 等 3 大小写敏感 4 不能使用关键字,if,new 5 可以使用长命名,推荐使用有实际意义的 命名 int a = 13; int age = 13; 关于关键字 1 goto const 保留字, 保留关键字 2 true, false, null 是字面量,不是关键字 参考题:选择 Java关键字(多选) A.if B.goto C.null D.sizeOf 基本数据类型 8 种 整数:byte, short, int, long short 16位 有符号整数 MAX: 7fff 32767 MIN: 8000 -32768 很少使用的数据类型 int 32位有符号整数 max: 7fffffff 2G-1 min: 80000000 -2G -1: ffffffff 非常常用,但是要注意取值范围。 关于整数字面量: 1 java 默认的整数字面量(直接给出的常数)是 int类型。 2 使用 L l 为后缀,是 long字面量 3 如果使用 int字面量给小于它范围的数据类型 赋值, 如果不超过范围会自动完成。 如:byte b = 120; byte c = 0xffffffff;//-1 4 0x 开头是 16进行,0开头是 8进制 如:int i = 010;//8 long l = 0xffffffffL; int i = 0xffff; //65535 short s = (short)0xffff;//-1 字符类型 1 字符是整数!是 16位无符号整数 范围:0x0000 ~ 0xffff(65535) 2 字符数值是字符的 Unicode(UTF-16BE)编码 16位定长编码,英文也是 16位 3 与 GBK不兼容,java支持自动的国际化编码。 4 英文部分编码与 ASCII数值兼容 'A' -> 65 ASCII 'A'-> "41" UTF-16BE 'A'-> "0041" 如: char c = 20013;//‘中’ c = '中';//4e2d 浮点数,相当于科学计数法 float double 1 大多使用 double表示数据,精确 float 很少使用 2 默认的字面量是 double类型 字面量使用 D后缀 double 字面量使用 f后缀 float 3 浮点数运算不够精确,不能精确比较 如: double d = 2.6; double g = d-2; 选择如下代码运行结果: float f = 1.0; System.out.println(f); A.编译错误 B.1.0 C.1 D.1f boolean 布尔类型 1 表示 真(true)假(false)的 推荐的方式: boolean isMan = false; boolean isRunning = true; boolean started = true; boolean found = true; 不推荐: boolean b = true; 作业 把课堂代码写一遍 1 竖式计算 -63 * -4, -63 + -4 2 输出 4种整数类型的最大值,最小值和-1 3 写出 -49 的补码(byte类型)和 16进制形式 写出 -2 的补码(byte类型)和 16进制形式 完成 -2 × -49 的竖式运算 和 16进制结果 5 输出‘中’ 前后 10个字符。 Day03Day03Day03Day03:javajavajavajava的移位和逻辑运算 -63(10)= - 011 1111 = 11000001(补)=c1 -4(10)=- 000 0100 = 11111100(补)=fc byte b = (byte)0xfc; -63 11000001 * -4 11111100 ----------------------------------------- 00000000 00000000 11000001 11000001 11000001 11000001 11000001 11000001 ----------------------------------------- 11111100 -4 127 +1 = 01111111 + 1 = 10000000 = -128 数学运算 1 同种类型参与运算,得到同种类型结果 2 小于 32位数据按照 32位 int运算 3 Java不检查向上向下溢出问题! 4 整数除法是整除 取余(取模) % 3%2 -> 1 0%5 -> 0 3%5 -> 3 -1%5 -> -1 赋值运算 1 赋值运算是表达式 2 赋值表达式是有结果的,是那个赋值的结果 3 不建议使用晦涩难懂的表达式。 int a = 4; a*=4 <=> a = a * 4; int b = 2*(a*=4); 关于 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf Java编程思想 Think in Java Java核心技术 CoreJava ++ -- 1 i++ 后++:先取 i的值作为整个表达式的值,然后+1; 2 ++i 先++:先 i+1, 然后取 i的值作为整个表达式的值 int a = 2; int b = a++; b = ++a; a=a++; 条件表达式: int rows = 28; int size = 10; int pages = rows%size==0 ? rows/size : rows/size+1; 位运算: & 按位与 1&1 = 1, 0&1 = 0, 1&0=0 0&0=0 | 按位或 1|1 = 1, 0|1 = 1, 1|0=1 0|0=0 ~ 取反 int i = ~-1; << 左移位 00000010 << 3 00010000 int i = 2; int n = i<<3; // n=i*2*2*2; 数学右移(保持符号位不变) >> 00000010 >> 1 00000001 11111101 >> 1 11111110 无符号移位,高位永远填 0 >>> 11111101 >>> 1 01111110 int i = -1; i = i >> 1;//-1 i = i>>>1; // 最大值 从控制台读取字符: Scanner console = new Scanner(System.in); String str = console.nextLine(); char c1 = str.charAt(0); char c2 = str.charAt(1); 掩码运算是一种特殊的取余运算 i & 0xf -> i%16 i & 7 -> i%8 i & 3 -> i%4 i & 1 -> i%2 //&& || 运算是短路运算, 常用的 int a = 1; //短路运算,第一个表达式是 false,第二个不再运行 boolean b = a!=1 && a++ == 2; b = a==1 || a++==2; System.out.println(a); // & | 是非短路运算 //非短路运算,即使第一个表达式是 false, // 第二个也运行 b = a!=1 & a++ == 2; b = a==1 | a++ == 2; System.out.println(a); 作业: 1 复习课堂代码,添加输出语句输出变量的值。 2 实现拆分颜色功能: 如: 0xffffff -> 255 255 255 0xB29D5A -> 178 157 90 3 实现从控制台输入 两个中文,拼接成一个整数 然后再拆分输出 4 实现从控制台输入 4个英文,拼接成一个整数 然后再拆分输出 5 实现华氏度<->摄氏度转换 c = 5(f-32)/9 f = 9c/5+32 如:27C -> 81F, 96F->36C 要求:从控制台输入华氏或者摄氏温度,输出转换结果 转换结果要求四舍五入 Day04Day04Day04Day04:javajavajavajava的基本语句 if 语句 1 尽量使用肯定的表达式表述逻辑 2 减少多层嵌套。一般不超过 2层 3 减少写 else 练习:判断是否有航班 条件:byte date = 0x69;// 01101001 4 01101001 00010000 int day = 4; int mask = 1< int (101010001) 012345678 i = 0~1234 3 把一个 16进制字符串转换成 int 如:"4e2d"=>20013 4 把一个整数转换成 2进制字符串 i = 0x2f -> "101111" i 101111 mask 000001 String str = ""; while(true){ str = (i & mask) + str i>>>=1; if(i==0) break; } 5 把一个整数转换成 16进制字符串 6 把一个整数转换成 8进制字符串 Day05Day05Day05Day05:javajavajavajava的循环语句和方法数组介绍 if ... else if(条件表达式){ }else{ } if正确的应用: boolean isBoy = false; if(isBoy){ System.out.println("小伙子你好!"); }else{ System.out.println("超级小美女!"); } 一个典型的错误案例: boolean isBoy = false; if(isBoy=true){//语法对,但是不能是赋值语句 System.out.println("小伙子你好!"); }else{ System.out.println("超级小美女!"); } for 循环 1 死循环 for(;;){ } 2 break 结束当前循环 continue 继续当前循环 案例: 统计一个字符串中的英文字母数量, 并且将多个字母替换为下一个划线 "北京 2008, Beijing 2008"->"北京 2008, _ 2008" 调试一个代码: 1 软件状态=数据=变量的值 2 利用输出语句输出代码的工作状态,与预期的理想值 比较,发现并查找错误 while ,do while 1 不计次的循环,处理到某个条件不满足为止 案例: 把一个 16进制字符串转换成 int 如:"4e2d"=>20013 "4e2d" '4'-'0'=52-48=4 '4'-> 00000000 00000000 00000000 00000100 sum=0=00000000 00000000 00000000 00000000 sum<<=4; sum=00000000 00000000 00000000 00000000 + 00000000 00000000 00000000 00000100 ------------------------------------------ sum=00000000 00000000 00000000 00000100 sum<<=4; sum=00000000 00000000 00000000 01000000 'e'->00000000 00000000 00000000 00001110 + -------------------------------------- sum=00000000 00000000 00000000 01001110 sum<<=4; sum=00000000 00000000 0000 0100 11100000 方法: 1 功能==动作==方法==动词 User reg(String name, String pwd, String email) User login(String name, String pwd) 2 语法 修饰词 返回值类型 方法名(参数列表){} 修饰词 public private protected staic final 返回值类型: void,基本类型、类,相当于数学上的值域 void 表示无返回值。 方法名:功能的名词,一般是动词 参数列表:功能依赖的前提条件列表 return 语句: 1 如果方法有返回值声明,方法中一定包含一个 return语句,并且在 return后面返回的类型一定 与返回类型兼容 2 如果返回值是 void 就可以不写 return。 3 如果软件包含多个 return,将在第一个执行到的 return 语句结束方法。 4 在无返回值的方法中使用 return可以提前结束方法 {}: 方法体,是方法的逻辑过程描述 如:y=f(x)=x+1; static long f(int x){ return x+1; } static int abs(int x){ if(x>0){ return x; }else{ return -x; } } 变量是在 Java栈中分配的。 变量的作用域: 方法的参数变量的作用域是在方法内部有效 离开方法就回收掉。 数组: 1 一组同种类型变量的集合。如:所有课程的分数。 int[] scores = new int[10]; int[] 是数组的数据类型 int[] scores; 可以声明一个数组变量 scores scores = new int[10];是数组的初始化。 2 可以使用动态初始化(使用 new),和静态初始化一个数组 int[] ary = new int[10];//动态初始化 int[] ary = new int[]{2,3};//动态初始化 int[] ary = {2,3}; //静态初始化,只能在声明 // 语句中直接使用 //ary = {5,6};//编译错误, ary = new ary[]{5,6};//对,使用动态初始化。 在使用 new int[10] 动态初始化数组时: 1 必须给出数组大小! 2 数组成员默认自动初始化。初始化为“零”值 “零”值: 0, 0.0, '\u0000', false, null 3 数组下标: 1 使用下标可以访问数组成员:ary[0] 2 下标范围:0~length-1 3 数组的长度是固定的! 4 使用 length属性可以访问数组长度 5 如果超越下标范围会抛出异常, 可能在面试中出现 java.lang.ArrayIndexOutOfBoundsException 4 不建议使用 int ary[] 声明数组,这个只是一种与 cpp 类似的语法结构。Java本质上没有 int ary[]。 在 Java 中数组是类型是(int[])。 * int ary[] = new int[5];//不推荐的声明方式。 作业: 1 完善 IntegerUtil,适当的完善,不用全部实现。 String toHexString(int n) String toOctString(int n) int parseHexString(Stirng hex) int parseBinString(String bin) int parseDecString(String dec) 提示: char[] ch = {'0','1','2','3', '4','5','6','7', '8','9','a','b', 'c','d','e','f'}; 0~15->'0'~'f' int n = 14; //使用数组实现 0~15->'0'~'f' char c = ch[n]; //使用数学表达式实现:0~15->'0'~'f' char c = (char)(n<10?n+'0':n-10+'a'); 2 EAN-13码的检查码的算法 ,例如假设一 EAN-13码各码代号如下: N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 C 检查码之计算步骤如下: C1 = N1+ N3+N5+N7+N9+N11 C2 = (N2+N4+N6+N8+N10+N12)× 3 CC = (C1+C2) 取个位数 C (检查码) = 10 - CC (若值为 10,则取 0) 给定:12位条码:"690208388140" 计算出验证码:5 包装成为一个方法, 给定一个 13位字符串:ean13 根据前 12位计算验证码 c与第 13位比较,一样返回 true 表示验证码是合法的验证码。方法示例如下: static boolean verify(String ean13){ } Day06Day06Day06Day06:javajavajavajava的递归和二维数组介绍 方法的递归调用: 示例: sum(n) 代表等差数列的前 n项的和 sum(n) = n + sum(n-1) and n>=1; 1 2 3 4 5 static int sum(int n){ if(n==1) return n; return n + sum(n-1); } 递归调用的特点: 1 思考逻辑简单 2 性能差(需要在栈中保存全部的临时变量) 3 必须有结束条件 4 大多数的递归都可以改成循环代码实现。 一般情况下:循环解决问题的性能高于递归解决。 练习: 1: 斐比纳切数列的第 n项 1 1 2 3 5 8 13 ... f(n) = f(n-1)+f(n-2) and n>=3, f(1)=f(2)=1 二维数组 1 Java的数组是对象,是在内存堆中分配的 int[] ary = new int[]{2,3,4}; ary = null; new运算返回的是堆对象的首地址 引用变量 ary的值是地址值,引用变量通过地址引用 操作堆对象。 引用变量可以赋值为 null,表示不引用任何对象。 不被任何引用所引用的对象,是内存垃圾,将被垃圾 收集器回收。 2 二维数组 1 Java其实没有真正的二维数组 2 Java使用数组的数组实现了二维数组, 一维数组套一维数组实现 int[][] ary = new int[2][3]; ary[1][1]=5; int[] a = ary[1]; 3 声明:int[][] ary; 4 初始化: 1 动态初始化 int[][] ary = new int[2][3]; 指定第一维长度,创建第一维数组, 第一维每个元素是 null int[][] ary = new int[2][]; System.out.println(ary[0]);//null System.out.println(ary[0][0]);//异常 例题 以上代码的结果 A null null B null 0 C null 和异常 D 编译错误 给定成员动态初始化 int[][] ary = new int[][]{{2,3},{3,4}}; 静态初始化,不能用来赋值: int[][] ary = {{2,3},{3,4}}; 数组的迭代: 1 迭代就是遍历,就是对多个元素逐一进行处理。 2 一维数组的遍历也叫一维数组迭代 3 二维数组的迭代,就是嵌套的一维数组的迭代 作业 1 全部实现课堂代码 2 实现一个二维整数数组 16×16 int[][] ary = new int[16][16]; 使用二维数组的迭代把每一个数组元素填充为-1。 3 使用循环实现计算斐比纳切数列的第 n项 使用循环计算 等差数列的和 1+2+3+4... 4 使用递归实现计算 n的阶乘 n! = 1*2*3*...*n 或者 n! = f(n) = f(n)*f(n-1) 并且 f(1)=1 5 使用循环实现 n! Day07Day07Day07Day07:javajavajavajava的排序算法介绍 排序: 1 选择排序:采用多轮扫描数组,每轮选择最小的与前面 的元素交换。每轮可以找到一个最小的,最后一个元素不 需要处理。 3 | 4 1 5 8 2 9 一 1 | 4 3 5 8 2 9 二 1 2 | 4 5 8 3 9 三 1 2 3 | 5 8 4 9 ...... 2 冒泡排序:比较相邻的元素,把大的交换到后面, 每一轮会有一个最大的沉淀到最后。 3 4 2 1 6 7 5 3 2 1 4 6 5 7 2 1 3 4 5 6 7 3 插入式排序:将数组分为两段,前半段是排序过的, 将后半段的每个元素插入到前半段的合理位置。 temp 3 | 2 4 1 6 5 7 2 2 | 3 4 1 6 5 7 2 3 | 4 1 6 5 7 1 1 2 3 | 4 6 5 7 1 2 3 4 | 6 5 7 5 1 2 3 4 6 | 5 7 Java 系统提供了一个排序算法:Arrays.sort(); Arrays 是数组的工具类。 for each 迭代,可以迭代一个数组成员,是 java 5 以后提供的新语法,是传统 for迭代的替换形式。 for (int j : ary) { System.out.print(j+" "); } Java 方法参数传递规则:是值得传递,就是参数值复制。 就是从实际参数到参数变量的赋值。 编程建议: 1 尽量不要利用引用参数将运算结果带回 2 使用返回值传回结果。 作业 1 比较所有实现的排序算法性能。 2 比较递归与循环运算的性能。 a 等差数列和 b 斐比纳切数列(使用 long类型) 3 身份证验证: 身份证第 18位计算法 身份证第 18位(校验码)的计算方法 1、将前面的身份证号码 17位数分别乘以不同的系数。 从第一位到第十七位的系数分别为: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 2、将这 17位数字和系数相乘的结果相加。 3、用加出来和除以 11,看余数是多少? 4、余数只可能有 0-1-2-3-4-5-6-7-8-9-10这 11个数字。 其分别对应的最后一位身份证的号码为 1-0-X-9-8-7-6-5-4-3-2。 5、通过上面得知如果余数是 2,就会在身份证的第 18位数字上出现罗马数字的Ⅹ。如 果余数是 10,身份证的最后一位号码就是 2。 例如:某男性的身份证号码是 34052419800101001X。我们要看看这个身份证是不是合 法的身份证。 首先我们得出前 17位的乘积和是 189,然后用 189除以 11得出的结果是 17+2/11,也 就是说其余数是 2。最后通过对应规则就可以知道余数 2对应的数字是 x。所以,可以判定 这是一个合格的身份证号码。 Day08Day08Day08Day08:javajavajavajava的面向对象基础 数组的复制与扩展 1 数组引用的赋值 int[] ary = {1,2,3,4}; int[] ary1 = ary; System.out.println(ary==ary1);//true 2 数组内容的复制 int[] ary = {1,2,3,4}; int[] ary1 = new int[ary.length]; for(int i=0; i
本文档为【java学习资料(比较牛)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_270920
暂无简介~
格式:pdf
大小:336KB
软件:PDF阅读器
页数:42
分类:互联网
上传时间:2011-12-22
浏览量:1221