黑马程序员_java基础加强

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1.什么是JRE和JDK
JRE是java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)
JDK是java的开发和运行环境,java的开发工具和jre
简单说,如果只需要运行java程序,只需装JRE即可,但如果要开发编写程序,必须装JDK

2.环境变量的配置
目的: path环境变量可以在任意的目录下,我们都可以执行指定的exe程序,如JDK中的编译工具javac.而classpath环境变量,可以在任意的目录下,引用其他目录下的class文件
2.1path环境变量
特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
永久配置方式:JAVA_HOME=%安装路径%\Java\jdk
临时配置方式:set path=%path%;C:\ProgramFiles\Java\jdk\bin
2.2classpath环境变量
永久配置方式:classpath=.;c:\;e:\
临时配置方式:set classpath=.;c:\;e:\
2.3在定义classpath环境变量时,需要注意的情况
如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;如果指定了classpath,那么会在指定的目录下查找要运行的类文件。

3.java语法基础
3.1基本概念
关键字:其实就是某种语言赋予了特殊含义的单词。
标示符:其实就是在程序中自定义的名词
常量:是在程序中的不会变化的数据。
变量:其实就是内存中的一个存储空间,用于存储常量数据。
作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。
特点:变量空间可以重复使用。
变量的作用域和生存期:
变量的作用域:
作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:
变量从定义的位置开始就在内存中活了;
变量到达它所在的作用域的时候就在内存中消失了;

3.2数据类型:
3.2.1基本数据类型:byte、short、int、long、float、double、char、boolean
3.2.2引用数据类型: 数组、类、接口。
3.3运算符号:
3.3.1算术运算符。
+ - * / % %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+:连接符。
++,--
3.3.2赋值运算符。
= += -= *= /= %=
3.3.3比较运算符。
特点:该运算符的特点是:运算完的结果,要么是true,要么是false。
3.3.4逻辑运算符。
& | ^ ! && ||
逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。
&: 只有两边都为true结果是true。否则就是false。
|:只要两边都为false结果是false,否则就是true
^:异或:和或有点不一样。
两边结果一样,就为false。
两边结果不一样,就为true.
& 和 &&区别: & :无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
3.3.5位运算符:用于操作二进制位的运算符。
& | ^
<< >> >>>(无符号右移)

package Demoes;

public class Demo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 面试题:
		byte b = 4;
		// 下面这句编译成功
		// 原因:由于3和7都是int类型常量,相加后的结果为10,而10在byte的范围内,编译器会将10转换为byte类型,然后赋值给b,所以不报错
		// b= 3+7;
		byte b1 = 3;
		byte b2 = 7;
		// 下面这句编译失败
		// 原因:由于b1和b2是变量,它的值是不确定的,相加后可能不在byte的范围内,会丢失精度,所以报错
		// b = b1 + b2;

		int x;
		// 下面这句编译成功
		// 原因:两个byte类型值相加后,一定会在int类型的范围内,所以不会编译错误
		// x = b1 + b2;

		int x1 = Integer.MAX_VALUE;
		int x2 = 1;
		x = x1 + x2;
		System.out.println(x);
	}

	public static void eg2() {
		// int x = 3;
		// short b = 5;
		// System.out.println(x + b);

		// 强制类型转换
		// byte b = 3;
		// b = (byte) (b + 4);

		System.out.println((char) ('a' + 1));
		System.out.println('0' + 0);
	}

	public static void eg1() {
		// 定义变量:
		// 数据类型 变量名 = 初始化值;
		byte b = 3;
	}

}

package Demoes;

public class Demo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 以最有效的方式计算出2乘以8等于几?
		// System.out.println(2 << 3);

		// 对两个整数变量的值进行变换
		int a = 3, b = 5;

		// 方法一
		// int temp = a;
		// a = b;
		// b = temp;

		// 方法二
		// a = b + (b = a) * 0;

		// 方法三:这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会发生变化
		// a = a + b;
		// b = a - b;
		// a = a - b;

		// 方法四
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		
		System.out.println("a=" + a + ",b=" + b);
	}

}

3.4break语句和continue语句

break:作用于switch ,和循环语句,用于跳出,或者称为结束。
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。

当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
continue:只作用于循环结构,继续循环用的。
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。

package forDemos;

public class Demo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// break:跳出
		// break作用范围:要么是switch语句,要么是循环语句
		// 记住:当break语句单独存在时,下面不要定义其他语句,因为执行不到
		// break跳出当前循环

		// for (int i = 0; i < 3; i++) {
		// System.out.println("i=" + i);
		// break;
		// }

		// xiaoqiang: for (int x = 0; x < 3; x++) {
		// wangcai: for (int y = 0; y < 4; y++) {
		// System.out.println("x=" + x);
		// break xiaoqiang;
		// }
		// }

		// continue:继续
		// 作用的范围:循环结构
		// continue:结束本次循环,继续下次循环
		// 记住:当continue语句单独存在时,下面不要定义其他语句,因为执行不到
		for (int x = 0; x < 3; x++) {
			System.out.println("x=" + x);
			continue;
		}
	}

}

3.5函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
java中的函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return 返回值;
}


当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。

函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。

主函数:
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。


函数定义名称是为什么呢?
答:1)、为了对该功能进行标示,方便于调用。
2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

package funcDemoes;

public class Demo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// int a = 3;
		// int b = 4;
		// int c;
		// c = a + b;

		int c = add(3, 4);
		System.out.println("c=" + c);

		// 定义函数的格式:
		// 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...){
		// 执行语句;
		// return 返回值;
		// }

		// 特殊情况:功能没有具体的返回值
		// 这时return的后面直接用分号结束
		// 返回值类型怎么体现呢?因为没有具体指,所以不可以写具体的数据类型
		// 在java中只能用一个关键字来表示这种情况,关键字是void
	}

	public static int add(int a, int b) {
		return a + b;
	}

	public static void myPrint() {
		System.out.println("hello world");
	}
}

package funcDemoes;

public class Demo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		print99();
	}

	// 需求1:定义一个功能,完成两个整数的和的获取
	// 思路:既然定义功能,就是可以用函数来体现.
	// 如何定义一个函数呢?
	// 通过两个明确来完成
	// 明确一:这个功能的结果是什么?是和.是功能的结果,所以该功能的返回值类型是int.其实就是在明确函数的返回值类型
	// 明确二:这个功实现过程中是否需要未知内容参与运算?有,加数和被加数.这就是函数的参数列表(参数的个数,参数的类型).其实就是明确参数列表
	// 注意:返回值类型和参数类型没有直接的关系
	public static int add(int a, int b) {
		return a + b;
	}

	// 需求2:定义一个功能,画一个矩形
	// 明确一:这个功能的结果是什么?没有结果,因为直接打印到了控制台上,并没有返回给调用者,用void表示
	// 明确二:这个功实现过程中是否需要未知内容参与运算?有,行和列不确定.两个,整数int
	public static void draw(int row, int col) {
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
		// return; // 可以省略不写
	}

	// 需求3:定义一个功能,比较两个数是否相等
	// 明确一:这个功能的结果是什么?有,boolean
	// 明确二:这个功实现过程中是否需要未知内容参与运算?有,两个整数
	public static boolean equals(int a, int b) {
		return a == b;
	}

	// 需求4:定义一个功能,获取两个整数中较大的那个数
	// 明确一:这个功能的结果是什么?有,其中一个数.int
	// 明确二:这个功实现过程中是否需要未知内容参与运算?有,参与比较的两个整数int
	public static int getMax(int a, int b) {
		return a > b ? a : b;
	}

	// 定义功能,打印9*9乘法表
	public static void print99() {
		for (int x = 1; x <= 9; x++) {
			for (int y = 1; y <= x; y++) {
				System.out.print(y + "*" + x + "=" + (y * x) + "\t");
			}
			System.out.println();
		}
	}

	// 根据考试成绩获取学生分数对应的等级
	public static char getScore(int score) {
		switch (score / 10) {
		case 10:
		case 9:
			return 'A';
		case 8:
			return 'B';
		case 7:
			return 'C';
		case 6:
			return 'D';
		default:
			return 'E';
		}
	}
}
重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

package funcDemoes;

/**
 * 需求:函数的重载
 * 
 * @author Administrator
 * 
 */
public class Demo3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		printCFB(5);
	}

	// 函数的重载
	// 1.同一个类
	// 2.同名
	// 3.参数的个数不同或者参数的类型不同
	// 4.函数重载和返回值无关
	// 5.java是严谨性语言,如果函数出现的调用不确定性,则函数调用失败,程序出错

	// 加法运算.两个整数的和
	public static int add(int a, int b) {
		return a + b;
	}

	// 加法运算,两个小数的和
	public static double add(double a, double b) {
		return a + b;
	}

	// 加法运算,三个整数的和
	public static int add(int a, int b, int c) {
		return a + b + c;
	}

	// 打印乘法表
	public static void printCFB(int num) {
		for (int i = 1; i <= num; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(j + "*" + i + "=" + (i * j) + "\t");
			}
			System.out.println();
		}
	}
}

3.8数 组:用于存储同一类型数据的一个容器。好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。
如何在java中表现一个数组呢?两种表现形式。
1)、元素类型[] 变量名 = new 元素类型[元素的个数];
2)、元素类型[] 变量名 = {元素1,元素2...};

元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};

java分了5片内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。

1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制。

package arrayDemoes;

public class Demo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 数组
		// 元素类型[] 数组名 = new 元素类型[元素的个数或数组的长度];

		int[] arr = new int[3];
		arr[0] = 89;
		System.out.println(arr[0]);

		for (int x = 0; x < 4; x++) {
			System.out.println("x=" + x);
		}

		{
			// 局部代码块.限定局部变量的生命周期
			int age = 3;
		}
	}

	// 内存的划分:
	// 1.寄存器
	// 2.本地方法区
	// 3.方法区
	// 4.栈内存
	// 存储的都是局部变量
	// 5.堆内存
	// 存储是数组和对象(其实数组就是对象)方式new建立在堆中
	// 特点:
	// 1.每一个实体都有首地址值
	// 2.堆内存中的每一个变量都有默认的初始化值,根据类型的不同而不同,整数是0,小数是0.0或者0.0f,boolean是false,char是'\u0000',其中u是Unicode码
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值