黑马程序员 -- Java基础学习(1)

------- 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 48		CPU缓存:节约内存
		float 48		double 88		char 0~6553528	定义:数据类型 变量名 = 初始化值;
		float f = 2.3f; float变量需要标示
		char ch = ‘4’; 字符4
	类型转换	
		自动类型提升(隐式):向上提升
			
		强制类型转换(显式)
			b = (byte)(b+2);
		int  float 运算:转换为float
		‘a’ + 1ASCII码加1
		(char) (‘a’ + 1)

运算符

	算术运算符
		取模
			1%-5 = 1
			-1%5 = -1
		字符串连接符 “” + “”
		字符串数据和任何数据使用+都是连接符,最后都会转成字符串
		转义字符 \
			通过反斜线来转变后面字母或符号的含义
			\n 换行
			\b 退格(backspace			\r 回车
			\t 制表符(tab			Linux中换行是\n,在windows中是\r\nDOS能直接识别\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
		casedefault
		结束条件
		可以多个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}};
			
		遍历:二重循环嵌套




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值