黑马程序员—Java基础—java基础语法:数据结构,运算符,选择结构,循环结构

                                                                 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

 一,关键字

         关键字概述

       Java语言赋予特定含义的单词

         关键字特点

       组成关键字的字母全部小写

         关键字注意事项

       gotoconst作为保留字存在,目前并不使用

       类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观

   常见关键字例举:

       

 

class

interface

byte

short

int

long

float

double

char

boolean

void

 

 

 

 

用于定义数据类型值的关键字

true

false

null

 

 

用于定义流程控制的关键字

if

else

switch

case

default

while

do

for

break

continue

return

 

 

 

 

 

 

 

 

 

 

 

用于定义访问权限修饰符的关键字

private

protected

public

 

 

用于定义类,函数,变量修饰符的关键字

abstract

final

static

synchronized

用于定义类与类之间关系的关键字

extends

implements

 

 

 

用于定义建立实例及引用实例,判断实例的关键字

new

this

super

instanceof

 

 

 

 

 

 

 

 

二,常量和变量

 

       ():常量的定义和分类:在程序执行的过程中,其值不发生改变的量

       (2)分类:

              A:字面值常量

              B:自定义常量

       (3)字面值常量

              A:字符串常量 "hello"

              B:整数常量    12,23

              C:小数常量    12.345

              D:字符常量    'a','A','0'

              E:布尔常量    true,false

              F:空常量 null(后面讲)

       (4)Java中针对整数常量提供了四种表现形式

              A:二进制      01组成。以0b开头。

              B:八进制      01...7组成。以0开头。

              C:十进制      01...9组成。整数默认是十进制。

              D:十六进制   01...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。

 

       (二),进制转换简介

 

       (1)其他进制到十进制

              系数:就是每一个位上的数值

              基数:x进制的基数就是x

              权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。

             

              结果:系数*基数^权次幂之和。

       (2)十进制到其他进制

              除基取余,直到商为0,余数反转。

       (3)进制转换的快速转换法

              A:十进制和二进制间的转换

                     8421码。

              B:二进制到八进制,十六进制的转换

 

       (三),变量的概念和表示方式

(1)在程序的执行过程中,其值在某个范围内可以发生改变的量

              (2)变量的定义格式:

              A:数据类型变量名 =初始化值;

              B:数据类型变量名;

                变量名 = 初始化值;

 

              在后来更多的知识运用中,我发现,用B类型的定义的方式比较多,因为涉及到变量的作用域的问题。先定义,在方法内赋值,增加了变量运用的灵活性!

 

三,数据类型

 

A,基本数据类型:4类,8种。

B,引用数据类型,类,接口,数组

 

(1)基本数据类型

              A:整数                 占用字节数

                     byte               1

                     short              2

                     int                  4

                     long               8

              B:浮点数

                     float               4

                     double            8

              C:字符

                     char               2

              D:布尔

                     boolean          1

                    

              注意:

                    整数默认是int类型,浮点数默认是double

                    

                    长整数要加L或者l

                    单精度的浮点数要加F或者f

(经过这些天的学习,下面的数据类型转换问题是非常常用的知识点):

         (2)默认转换

           A:从小到大

           B:byte,short,char --int -- long -- float -- double

           C:byte,short,char之间不相互转换,直接转成int类型参与运算。

    (3)强制转换

           A:从大到小

           B:可能会有精度的损失,一般不建议这样使用。

           C:格式:

                  目标数据类型变量名 = (目标数据类型) (被转换的数据);

 

有一道面试题特别的出名:

                  byte b1 = 3;

                  byte b2 = 4;

                  1byte b3 = b1 + b2;

                  2byte b4 = 3 + 4;

           分析:式子2会出编译错误,正确的写法是byte b4 =(byte)3+4;

 

2个基本知识点:字符参与运算,是字符+ascii对应的值的运算

                字符串参与运算,是字符串拼接!

 

四,运算符

 

基本算数运算符:+(加),-(减),*(乘),/(除),%(取余),++(自增),--(自减);

赋值运算符:=(最常见的赋值运算符,不是等于,等于是==,+=,-=,*=,/=,%=

后面的运算符大同小异,举例一个:a+=b a = a + b;(隐含了自动强制转换)

比较运算符:==,!=,>,>=,<,<=

 

逻辑运算符需要清晰的列举一下:

逻辑运算符

           &,|,^,!,&&,||

           逻辑运算符用于连接boolean类型的式子

           结论

                  &:falsefalse

                  |:truetrue

                  ^:相同则false,不同则true

                        情侣关系。

                  !:truefalse,非falsetrue

                 

                  &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。

                  ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。

位运算符:

          请用最有效率的方式计算出2乘以8的结果

                         2<<3(等价于2*23次方);

           三目运算符:比较表达式?表达式1:表达式2;

           自我感悟:经过后面的编程学习,我发现,采用三目运算符会简化很多代码,很巧妙。

 

 

 五,流程控制语句:

                        有了上面的基本知识做支撑,接下来才正式进入到Java基础语法的学习。java代码的执行结构有三种:顺序结构,从上往下,依次执行,选择结构,按照不同的选择,执行不同的代码,循环结构,重复执行某一部分的代码。

下面整理一下选择结构的两种方式:

/**
 * if语句格式1
 *
 *		语法:if (判断条件) {
 *			为真时执行大括号中内容
 *		}
 *
 * 注意:
 *		大括号可以省略,但不建议
 *		if语句,不会影响后续代码执行
 *		省略大括号,if语句只会向下执行1行代码
 * 		if语句的大括号,可以包含多行代码
 */
class IfDemo1 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		int money = 100;
		
		/*if (money < 1000) {
			System.out.println("转身离开");
		}*/
		
		/*if (money < 1000) {
			System.out.println("再次转身离开");
		}
		
		System.out.println("我是后续代码");*/
		
		if (money > 1000) {
			System.out.println("再次转身离开");
			System.out.println("我是后续代码");
		}
	}
}

if语句,常见的还有双分支结构:

/**
 * 学习if语句双分支
 *
 *		if (判断条件) {
 *			为真时执行这里的第一个大括号
 *		} else {
 *			为假时执行这里的第二个大括号
 *	}
 */
class IfDemo2 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		double money = 6.5;
		
		if (money < 6.5) {
			System.out.println("买立白洗洁精");
		}else {
			System.out.println("买其他品牌的洗洁精");
		}
	}
}

if语句的多分支结构:

import java.util.Scanner;

/**
 * 学习if语句3(多分支)
 *
 *		1、导包:import java.util.Scanner;
 *		2、创建对象:Scanner jianpan = new Scanner(System.in);
 *		3、使用键盘
 *
 *
 *		步骤:先判断第一个if语句,如果条件成立,执行代码,程序结束,后续代码不做
 *			 否则执行else下面的第二个if语句,如果条件成立,执行代码,程序结束,后续代码不做
 *		     否则执行else下面的第三个if语句,如果条件成立,执行代码,程序结束,后续代码不做
 *			 .....可以有n个
 *			 else {
 *				 最后一个
 *			 }
 */
class IfDemo3 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		Scanner jianpan = new Scanner(System.in);
		
		System.out.println("请输入您的考试成绩:");
		int score = jianpan.nextInt();
		
		if (score < 0 || score > 100) {
			System.out.println("成绩不合法!");
		} else if (score >= 85 && score <= 100) {
			System.out.println("您的成绩是优秀!");
		} else if (score >= 75 && score < 85) {
			System.out.println("您的成绩是良好!");
		} else if (score >= 60 && score < 75)  {
			System.out.println("您的成绩是合格!");
		} else {
			System.out.println("您的成绩不合格!");
		} 
	}
}

if语句最常用的一个用法则是if语句的嵌套,这个是最最常用的:

import java.util.Scanner;

/**
 * 学习嵌套的if语句
 */
class IfDemo4{
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int time = 10;
		
		System.out.println("请告诉裁判您的时间:");
		if (time < 10) {
			System.out.println("恭喜你参加决赛");
			int number = sc.nextInt();
			if (number < 8) {
				System.out.println("您没有坚持下来!out");
			} else {
				System.out.println("8000米完成!");
			}
		}else {
			System.out.println("out");
		}
	}
}

if语句可以针对常量判断,也可以针对布尔类型的值判断执行内容,也可以匹配常量,但是如果要匹配常量,更多的是使用Switch语句:(一些解释:main方法前面的java程序入口,jvm自动加载main方法以后一直会有,第一个老师告诉我们这样写注释是一个好习惯)


import java.util.Scanner;

/**
 * 学习switch选择结构
 *		
 *		switch 语句的格式:
 *			switch(表达式) {
 *				case 常量1 :  --
 *					语句体1;    | ----> 这是case语句1
 *					break;    --
 *					
 *				case 常量2 :  --
 *					语句体2;    | ----> 这是case语句2
 *					break;    --
 *				....
 *				case 常量n :  --
 *					语句体n;    | ----> 这是case语句n
 *					break;    --
 *				
 *				default :        --
 *					语句体n + 1;    | ----> 这是default语句
 *					break;       --
 *			}
 *		
 *		格式的解释:
 *			1、以单词switch开始,后面圆括号中紧跟表达式
 *			2、用大括号包围switch各种语句体
 *			3、用case来进行常量匹配,表达式和常量匹配的类型(包含int及比其类型更小的数据类型:byte、short、int、char)jdk5之前
 *			   注意:jdk5之后可以用枚举类型、jdk7之后又多了字符串类型
 *			4、语句体就是程序代码:System.out.println();可以是多行
 *			5、break;从当前的switch语句中结束
 *			
 *		面试题:
 *			byte、long、String都可以做表达式的类型吗?
 *			
 *		举例:
 *			用星期(星期一。。。星期日)
 *			
 *		键盘录入数据:1、导包 import java.util.Scanner; 写在class之前
 *                  2、创建对象 Scanner input = new Scanner(System.in);
 *					3、录入数据
 */
class SwitchDemo1 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		// 要使用一个键盘
		Scanner input = new Scanner(System.in);
		
		// 人机交互开始
		System.out.println("今天星期几?");
		int today = input.nextInt();
		
		switch (today) {// 5
			case 1 :
				System.out.println("今天是星期一");
				break;
			case 2 :
				System.out.println("今天是星期二");
				break;
			case 3 :
				System.out.println("今天是星期三");
				break;
			case 4 :
				System.out.println("今天是星期四");
				break;
			case 5 :
				System.out.println("今天是星期五");
				break;
			case 6 :
				System.out.println("今天是星期六");
				break;
			case 7 :
				System.out.println("今天是星期日");
				System.out.println("您的假期不足,请充值!");
				break;
			default :
				System.out.println("您输入的星期不合法!");
				break;
		}
	}
}

用switch语句的注意事项,不能匹配变量:

import java.util.Scanner;

/**
 * switch语句注意事项
 *
 *	 	代码22行:case后的比较不能用变量来做
 *		代码27行:case后不能出现重复的值
 *		default语句可以省略(代码55行)且位置可以不用放在最后(代码28行):
 *			请注意:在此例中case 1、case 2、case 3、case 4、case 5、case 6、case 6、default是并列关系
 *
 *		不论default在哪里,要先把所有的case配置一遍:没有配置上,做default(与位置无关),如果配置上,不做default
 *		switch看见break;就结束,不一定执行到代码的最后
 */
class SwitchDemo2 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		// 要使用一个键盘
		Scanner input = new Scanner(System.in);
		
		// 人机交互开始
		System.out.println("今天星期几?");
		int today = input.nextInt();
		
		// 不能用变量
		// int tuesday = 2;
		
		switch (today) {
			default :
				System.out.println("您输入的星期不合法!");
			break;
			case 1 :
			//case 2 :
				System.out.println("今天是星期一");
				break;
			//case tuesday :
			case 2 :
				System.out.println("今天是星期二");
				break;
			case 3 :
				System.out.println("今天是星期三");
				break;
			case 4 :
				System.out.println("今天是星期四");
				break;
			case 5 :
				System.out.println("今天是星期五");
				break;
			case 6 :
				System.out.println("今天是星期六");
				break;
			case 7 :
				System.out.println("今天是星期日");
				System.out.println("您的假期不足,请充值!");
				break;			
			/*default :
				System.out.println("您输入的星期不合法!");
				break;*/
		}
	}
}

由于代码量的增多,选择结构并不能满足我们的编程需要,这个时候,循环结构体系则发挥了总要的结构,循环结构主要有for循环,while循环,do while循环,对于while循环和Do while循环来讲,唯一的区别只是 do While 循环先执行一次再判断。能确定循环次数的用for循环,否则用while循环的居多:下面分别整理一下for 循环和while循环的两个一般代码:

for循环:

/**
 * 计算1-100之间的数字之和
 */
class ForDemo1 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		/*
		a = 1 + 2
				a + 3
					a + 4
						a + 5
			a = a + ?
			System.out.println(1+2+3+4+5);
		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			 // i = i + i;
			 sum += i;
			
		}
		System.out.println(sum);*/
		
		int sum = 0;
		for (int i = 1; i <= 100; i++) {		
			if (i % 2 == 0) {
				// sum = sum + i;
				sum += i;
			}
		}
		System.out.println(sum);
		
	}
}

for循环经典案例之水仙花术:

 

/**
 * 水仙花数
 *
 *		abc == a*a*a + b*b*b + c*c*c
 *
 *		个位:100 % 10 = 0
 *      十位:100/10 = 10 % 10 = 0
 *		百位:100/10/10 = 1;
 */
class ForDemo2 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {
		int count = 0;
		
		for (int i = 100; i<= 999; i++) {
			int ge = i % 10;
			int shi = i / 10 % 10;
			int bai = i / 100;
			
			int he = (ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai);
			if (i == he) {
				count++;
				System.out.println(i);
			}
		}
		
		System.out.println(count);
		
	}
}

while循环演示:水仙花数改进版,配合对比for循环理解掌握:

/**
 * 用两种不同的循环(for、while)进行水仙花数的演示
 *
 * 
 * 
 */
class WhileDemo1 {
	/**
	 * java程序运行入口
	 * jvm自动加载main方法
	 */
	public static void main(String[] args) {	
		// abc = a^3 + b^3 + c^3
		// for循环
		int ge = 0, shi = 0, bai = 0;
		for (int a = 100; a <= 999; a++) {
			ge = a % 10;
			shi = a / 10 % 10;
			bai = a / 100;
			
			if (a == (ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai)) {
				System.out.println(a);
			}
		}
			
		// while循环
		int b = 100;
		int g = 0, s = 0, ba = 0;
		while (b <= 999) {
			g = b % 10;
			s = b / 10 % 10;
			ba = b / 100;
			if (b == (g * g * g) + (s * s * s) + (ba * ba * ba)) {
				System.out.println(b);
			}
			b++;
		}
	}

最后,今天的日志以三个跳转语句的关键字结尾:break:跳出循环 ,continue:跳出本次循环,继续执行其他循环,return:跳出方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值