零基础学java第二天

Day02 java的基本语法

1.关键字和保留字
2.标识符
3.变量

  • 基本数据类型
  • 基本数据类型与String 间转换
  • 进制间转换

4.运算符
5.流程控制

1.关键字与保留字
  • 特点:关键字中的所有字母都是小写
    用于定义数据类型的关键字
classintefaceenumbyteshort
intlongfloatdoublechar
booleanvoid

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

ifelseswitchcasedefault
whiledoforbreakcontinue
return

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

publicprotectedprivate

保留字

gotoconst
2.标识符

java对各种变量,方法类等元素命名的时候使用的字符序列就称为标识符
技巧:凡是你自己去命名的地方就叫标识符

  • 定义合法的标识符规则
    • 由26个字母大小写,0~9,_或&组成
    • 数字不能作为开头
    • 不能使用关键字或保留字,但是能包含关键字和保留字
    • java中严格区分大小写,长度无限制
    • 标识符中间不能有空格
  • java中的名称命名规范(日常用到)
    • 包名(package):多单词组成的时候,所有字母都小写:xxxyyyzzz
    • 类名(class)和接口名(interface):多单词组成的时候 ,所有单词的首字母大写:XxxYyyZzz
3.变量
  • 变量的概念
    • 内存中一个存储区域
    • 该区域中的数据可以在同一类型范围内不断变化
    • 变量是程序中最基本的存储单位,包括变量的类型,变量名字和变量的值
  • 变量的作用
    • 用于在内存中保存数据
  • 变量的注意事项
    • java中每个变量必须先声明,再使用
    • 使用变量名来访问该区域的数据
    • 作用域:其定义的一对{}里面
    • 变量只有在其作用域中才有效
    • 同一作用域,不能定义同名的变量
  • 变量的声明:
    • 语法:<数据类型><变量名称>
    • int abc;
  • 变量的赋值
    • 语法:<变量名称><值>
  • 声明和赋值变量
    • 语法:<数据类型><变量名><值>
    • int abc = 10;

变量的分类–按数据类型
在这里插入图片描述
变量的分类–按声明的位置

  • 在方法体外,类体内声明的变量是成员变量
  • 在方法体内声明的变量是局部变量

在这里插入图片描述

  • 注意:二者在初始化值方面的异同:
    • 同:都有生命周期
    • 异:局部变量除了形参外,所有变量都要有初始值
  • 在java中,除了形式参数外,所有的变量都要有初始值

整数的类型:byte short int long

  • java中整型常量默认是int,如果声明long必须在常量后面加‘|’或者是‘L’
  • java的整型变量通常声明为int,除非不足以表示较大的数,才使用long
类型占用存储空间表数范围
byte1字节=8bit位-128~127(2的7次方)
short2字节-32768~32767(2的15次方)
int4字节-2147483648~2147483647(2的31次方)
long8字节2的63次方
浮点类型
类型长度
float单精度,7位有效数字
double双精度,是float的两倍
  • Java的浮点型常量默认是double 声明float常量须在常量后加 f F
    • double不能作为money的类型 使用BigDecimal()

字符型:char

  • 2字节

(了解)
Unicode编码:将世界上所有符号都纳入其中,每个符号都有一个独一无二的编码,所以没有乱码问题,存储空间存在浪费问题
ASCLL码:8个二进制位 = 1个字节 128个字符的编码
UTF-8:是Unicode的实现方式之一,支持中文

3种表达方式

  • ‘ ’单引号括起来的单个字符 char a = ‘你’;
  • \ char a = ‘\n’ 这里的a是换行的意思
  • ‘\uXXXX’ XXXX代表的是十六进制整数 \u4f60表示 你

char是可以参与运算,因为它有对应的Unicode码
布尔类型Boolean

Boolean类型用于判断逻辑条件,用在程序的流程控制

  • if条件控制语句
  • while循环控制语句
  • do-while循环控制语句
  • for循环控制语句

Boolean类型只有true和false无null无0,1

  • 不能使用0或者非0整数来替代true和false,这点跟C语言不同
  • JVM没有专门给Boolean值用的字节码指令,java中所代表出来的Boolean值,是在编译之后使用JVM的int数据类型来替代:true用1来表示,false用0来表示

基本数据类型转换

  • 自动类型转换(小转大):容量小的类型自动转换成容量大的数据类型

在这里插入图片描述

  • byte,short,char 之间不会互相转换,他们3个在计算的时候首先都会转换成int类型
  • Boolean不能与其他数据类型运算(布尔表达式)
  • 但任意的和数据类型与字符串(string)进行连接运算(+),基础数据类型都会自动转化成字符串(string)类型

字符串类型(引用类型):String

  • String不是基本数据类型,属于引用数据类型

  • 使用方式与基本数据类型一致,String str = “abc”;

         str  =  str +"XYZ" 
         int n = 100; str = str + n;
    
//练习1
 String str1 = 4;                                 no
 String str2 = 3.5f +"";                          yes
 System.out.println(str2);                        3.5
 System.out.println(3+4+"Hello");               7Hello
 System.out.println("Hello"+3+4);              Hello34
 System.out.println('a'+1+"Hello");            98Hello
 System.out.println("Hello"+'a'+1);            Helloa1

强制类型转换

  • 属于自动类型转换的逆过程,将容量大的数据类型转成容量小的数据类型,使用时记得加上强制额酷炫转换符号:(),但可能会有精度降低或溢出
  • 通常,字符串不能直接转换成基础数据类型,但可以通过基本类型的包装类将字符串转换成基本数据类型
    • String a = “43”;int i = Integer.parsenInt(a);
  • boolean类型不可以转换成其他的数据类型
//练习2
1.
short s = 5; s = s -2

2.
byte b = 3;b = b + 4; b = (byte)(b + 4);

3.
char c = 'a';
int i = 5;
float d = .314f;
double result = c+i+d;
 
4.
byte b = 5;
short s = 3;
short t = s + b;
4.运算符

算术运算符

赋值运算符

比较运算符(关系运算符)

逻辑运算符

位运算符

三元运算符

算术运算符

运算符运算例子结果
+正号+33
-负号b=3;-b-3
+1+12
-减号1-10
*3*412
/5/51
%取余(取模)7%52
++自增(前):先运算再取值
自增(后):先取值再运算
a=2;b=++a;
a=2;b=a++;
a=3;b=3;
a=3;b=2;
自减(前):先运算再取值
自减(后):先取值再运算
a=2;b=–a;
a=2;b=a–;
a=1;b=1;
a=1;b=2;
+字符串连接“He”+“llo”“Hello”

算术运算符应注意以下问题

  • 如果对负数取余,可以把负数的负号忽略不计,如:5 % - 2 = 1,但被取余的数是负数则不可以被忽略,- 5 % 2 = -1 此外,取余运算的结果不一定总是整数
  • 对于除号/,它的整数除和小数除是有区别的:整数做除法,只保留整数部分,舍弃小数
int x = 3510;
x = x / 1000 * 1000;
//x的结果是3000
  • “+”
System.out.println("5+5="+5+5); 
//打印结果是? 5+5=55
//练习1
public class SignTest {
    public static void main(String[] args) {
        int i1 = 10;
        int i2 = 20;
        int i =i1;
        i1= i1+1;
        System.out.println("i="+i); 10
        System.out.println("i1="+i1);11
        i1 = i1+1;
            i = i1;
        System.out.println("i="+i);12
        System.out.println("i1="+i1);12
        i = i2;
        i2 = i2 - 1;
 
        
        System.out.println("i="+i);20
        System.out.println("i2="+i2);19
        i2 = i2 -1;
            i = i2;
        System.out.println("i="+i);18
        System.out.println("i2="+i2);18
    }
}
    练习2:
    随意给出一个整数,打印显示它的个位数,十位数,百位数的值
    格式如下:
    数字XXX的情况如下:
    个位数:  十位数:   百位数:

    例如:
    数字153的情况如下:
    个位数:3 十位数:5 百位数:1
    
    153 除以 10  = 15.....3   第一次操作
    15 除以10 = 1....5		第二次操作
    1 除以10 = 0 ....1       第三次操作
    

赋值运算符
  • 符号 =
    • 当=两侧的数据类型不一致,可以使用自动类型转换或使用强制类型转换原则进行处理
    • 支持连续赋值
  • 拓展: += -= *= /= %=
//思考1:
  	short s = 3;
  	s = s + 2;
  	s += 2;
  
//思考2:
	int i = 1;
	i *=0.1;
	System.out.println(i);
	i++;
	System.out.println(i);
	
//思考3:
	int m = 2;
	int n = 3;
	n *= m++;   -> n=n*m; m=m+1;
	System.out.println("m=" + m);
	System.out.println("n=" + n);

//思考4(自行理解):
	int n = 10;
	n += (n++) + (++n);  //n = n + (n++) + (++n) ;  加前 n1  加后 n2
						 //n = n1 + (n++) + (++n) ; 
	System.out.println("n=" + n);
	
    
比较运算符
运算符运算例子结果
==相等于4 == 3false
!=不等于4 != 3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
instanceof检查是否是类的对象“Hello” instanceof Stringtrue
  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false

  • 比较运算符 == 不要误写成 =

思考1:
boolean b1 = false;
if (b1 = true)
    //区分好 == 和 = 的区别
	System.out.println("结果为真");
else
	System.out.println("结果为假");
逻辑运算符

&逻辑与 |逻辑或 !逻辑非

&&短路与 ||短路或 ^逻辑异或

aba&ba&&ba|ba||b!aa^b
TTTTTTFF
TFFFTTFT
FTFFTTTT
FFFFFFTF
  • 逻辑运算符用于连接布尔表达式,在Java中不能写成3<x<6,应该写成 x>3 & x<6

  • “&” 和 "&&"的区别

    • 单&时,左边无论真假,右边都要运算
    • 双&时,如果左边为真,右边参与运算,如果左边为假,右边不参与运算
  • “|” 和"||"同理, ||表示:当左边为真,右边不参与运算

  • 异或(^)和或(|)的区别:当左右都是true时,结果为false

	int x = 1 , y = 1;
	if (x++==2 & ++y==2){
		x=7;
	}
	System.out.println("x="+x+"y="+y);
	int x=1,y=1;
	if(x++==2 && ++y==2){
		x=7;
	}
	System.out.println("x="+x+"y="+y);
	int x=1,y=1;
	if(x++==1 | ++y==1){
		x=7;
	}
	System.out.println("x="+x+"y="+y);
	int x=1,y=1;
	if(x++==1 || ++y==1){
		x=7;
	}
	System.out.println("x="+x+"y="+y);

面试题(程序输出):

class Test{
	public static void main(String args[]){
		boolean x = true;
		boolean y = false;
		short z = 42;
		if ((z++==42)&&(y=true)) z++;//44
		if ((x=false)||(++z==45))z++;
		System.out.println("z="+z);//46
	}
}
运算符:位运算符(现阶段了解就行)
运算符运算例子
<<左移3<<2=12 --> 3 * 2 * 2=12
>>右移3>>1=1 --> 3/2=1
>>>无符号右移3>>>1 = 1 3/2 = 1
&与运算6 & 3 =2
|或运算6 | 3 =7
^异或运算6 ^ 3 = 5
~取反运算~6 = -7
  • 位运算是直接对整数的二进制进行运算

0110 & 0011 0010

0110 | 0011 0111

0110 ^ 0011 0101

~0110 (取反)–>1001(补码变原码)–> 1111 (二进制转十进制) --> -7

1111 (原码变补码)1000+1

 1111 1111 1111 1111 1111 1111 1111 1001
>> 1111 1111 1111 1111 1111 1111 1111 1100
>>>0111 1111 1111 1111 1111 1111 1111 1100
三元运算符
格式:(条件表达式)?表达式1:表达式2;
  • 条件表达式为true运算结果为1;

  • 条件表达式为false运算结果为2;

  int a = (false)?1:2;  a=2
  if else与三元运算符的区别
  1.三元运算符可以简化if else
  2三元运算符要求必须返回一个结果
  3.if后的代码块可有多个结果
练习
假设有两个整数a,b(请自行给值)
用整数max来获取两个之间的较大值
public class Max{
  public static void main(String[] args){
  	int a =11,b=13;
  	int max=(a>b)?a:b;
  	System.out.println("较大值为:"+max);
  }
}
5.流程控制

在这之前,先讲一个键盘输入

//声明我们需要用到键盘输入
Scanner scanner = new Scanner(System.in);
// 1.告诉控制台,我们需要int类型的数据 2.将用户输入的值给到a
int a = scanner.nextInt();
程序流程控制流程

顺序结构

分支结构

循环结构

顺序结构

  • 程序从上到下逐行执行,之间没有任何的条状或判断

java中定义成员变量时采用和发的前向引用

//正确的形式
public class Test{
	int num1 = 12;
	int num2 = num1 + 10;
}

//错误的形式
public class Test{
    int num2 = num1 + 10;
    int num1 = 12;
}
分支结构:
  • 根据条件,选择性的执行代码
  • if…else和switch-case两种分支语句
IF语句

if语句的三种格式

//形式1:
if (条件表达式) {
	执行代码块;
}

//形式2:
if (条件表达式){
    执行代码块1;
}else{
    执行代码块2;
}

//形式3:
if (条件表达式1){
    执行代码块1;
}else if (条件表达式2){
    执行代码块2;
}....
 else{
     执行代码块n;
 }
  • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)或布尔变量

    boolean a = true;
    if (a){
    	执行代码块1;
    }
    
  • 语句块只有一条执行语句时,{}可以省略,但是建议保留

  • if-else语句结构可以根据需要进行嵌套使用(参考形式3)

  • 当if-else语句结构是形式3时,最后的else是可选项,根据需要可以省略

  • 当多个条件是"互斥"关系时,条件判断语句的顺序无所谓

  • 当多个条件是"包含"关系时,条件判断语句顺序是"小上大下/子上父下"

    练习1:
    需求如下:
    	小明去参加Java考试,他跟父亲大明达成承诺:
    	成绩为100分,奖励一张3080
    	成绩为(80,99]时,奖励一张3070
    	当成绩为(60,80]时,奖励一本<大话设计模式>
    	其它时,什么奖励都没有
    	请从键盘输入小明的期末成绩,并加以判断
    
switch-case结构
switch (表达式){
	case 常量1:
		语句1;
		//break;
	case 常量2:
		语句2;
		//break;
	.....
	case 常量n:
		语句n;
		//break;
	default:
		语句;
		//break;
}
  • switch中表达式的值必须是下列的类型之一:byte,short,int,enum(jdk 5.0),String(7.0)

  • case子句的值必须是常量,不能是变量名或不确定的表达式值;

  • 同一个switch语句所有的case子句的常量值互不相同

  • break是用来执行完一个case分支后使程序跳出switch语句块,如果没有break,程序会执行到switch结尾

  • default是可选的,同时位置也是灵活的,当没有匹配到case时,执行default

两种分支结构的对比
  • 如果判断的具体数值不多,而且符合 byte short char int String Enum等类型 虽然两种语句都可以,但是建议是用switch 效率稍高

  • 其他情况:如果对于区间的判断,对结果都是boolean的类型进行判断,使用if,if的使用范围更广

  • 其实使用switch-case都是转变成if-else,反之不成立

循环结构:
  • 根据循环的条件,重复性的执行某段代码
  • 有while do…while for 三种循环语句
  • JDK1.5后提供了foreach循环,方便遍历集合与数组元素

在某些特定的条件下,反复执行某段代码

for

while

do-while

循环语句有4个组成部分

  • 初始化部分 init_statement
  • 循环条件部分 test_exp
  • 循环体部分 body_statement
  • 迭代部分 alter_statement
for循环
for (1初始化部分;2循环条件部分;4迭代部分){
	3循环体部分
}

执行过程:1-2-3-4-2-3-4-2-3-4-…-2

说明:

  • 2循环条件部分为boolean类型表达式,当值为false时,退出循环
  • 1初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
  • 4迭代部分可以有多个变量更新,用逗号分隔
//1+2+3+.....+100 = 5050
int result = 0;
for (int i = 1;i<=100;i++){
	result += i;
}
System.out.println("result="+result)
输入两个正整数m和n,用循环来求最大公约数和最小公倍数
比如 2 3    最大公约数=1  最小公倍数=6
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int max = (m>n)?m:n;
int GCD = 0;
int LCM = 0;
//最大公约数
for (int i = 1;i<=max;i++){
	if (m%i==0 && n%i==0){
        GCD = i;
    } 
}
//最小公倍数
for (int i = m*n;i>=max;i--){
	if (i%m==0 && i%n==0){
        LCM = i;
    } 
}
System.out.println(GCD+""+LCM);
While
1初始化部分
while(2循环条件部分){
	3循环体部分;
	4迭代部分;
}

执行过程:1-2-3-4-2-3-4-2-3-4-…-2

  • 注意不要忘记声明4迭代部分,不然会陷入无限循环
  • for和while可以相互转换
do-while循环
1初始化部分
do{
	3循环体部分;
	4迭代部分;
}while(2循环条件部分);

执行过程:1-3-4-2-3-4-2-3-4-…-2

  • do-while循环至少执行一次循环体
while(true) 
for(;;)
嵌套循环
for (int i=0;i<10;i++){
	for (int j=0;j<10;j++){
		if (true){
			break;//此处的break将影响循环j
		}
	}
	break;//此处的break将影响循环i
}
  • 假设外层循环次数是n次,内层是m次,那么内层实际执行了n*m次
break continue的使用
breakcontinue
中止某个语句块的执行跳过当前这一次循环,进入下一次循环
  • return:用来结束一个方法

  • return与break和continue不同的是,return会结束整个方法,不管这个return处于多少层循环中

  • break只能用于switch和循环

  • continue只能用于循环

  • break终止本层循环,continue跳过本次循环执行下一次循环

  • Java中没有goto

练习1:
100000000以内的所有质数
//最外层是需要找的质数
for (int i = 2;i <= 100;i++){
    for (int j = 2;j <=Math.sqrt(i); j++){
        if (i%j == 0) {
            break;
        }
    }
    if (j == i) sout(i);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值