Java-基础语法

1 篇文章 0 订阅

一、语言概述

Java整体概述
在这里插入图片描述

1、Java语言概述

1.1 Java版本

  • Java SE 标准版(J2SE) : 占领桌面应用;

  • Java ME 移动版 (J2ME) : 占领手机;

  • Java EE 企业版(J2EE):占领服务器;

1.2 Java特性和优势

【简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性】

主要是:

  • 面向对象:
    • 两个要素:类、对象;
    • 三个特征:封装、继承、多态;
  • 健壮性:① 去除了C语言中的指针 ②自动的垃圾回收机制 → 仍然会出现内存溢出、内存泄漏;
  • 跨平台型:write once,run anywhere:一次编译,到处运行;功劳归功于:JVM;

在这里插入图片描述

1.3 JDK、JRE、JVM的关系

  • JDK 中有 JRE;JDK = JRE + 开发工具集(如javac编译工具等);

  • JRE 中有 JVM;JRE = JVM + JavaSE标准类库;

2、注释与API文档

2.1 注释:Comment

单行注释://; 多行注释:/* / ;文档注释:/* */;

【注意】

  • 单行注释和多行注释,注释了的内容不参与编译。 换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息;

  • 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档;

  • 多行注释不可以嵌套使用;

2.2 Java API 文档

  • API: application programming interface。实际习惯上:将语言提供的类库,都称为API;
  • API文档:针对于提供的类库如何使用,给的一个说明书。类似于《新华字典》;

2.3 生成API文档

  • javadoc命令是用来生成自己的文档的

    并且 要添加 -encoding UTF-8 -charset UTF-8 ,以便显示中文

  • 参数信息

    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
/**
 * @author Honson Chan
 * @date 2020/5/7 - 2:52
 */
public class Demo06 {
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		System.out.println(a + b + "");
		System.out.println("" + a + b);
	}
}

二、基本语法

1、关键字与标识符

1.1 Java关键字的使用

定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所字母都为小写 具体关键字:

在这里插入图片描述在这里插入图片描述

1.2 保留字:

现Java版本尚未使用,但以后版本可能会作为关键字使用;

保留字:goto 、const ;

【注意:自己命名标识符时要避免使用这些保留字】

1.3 标识符的使用

定义:凡是自己可以起名字的地方都叫标识符。

规则(必须要遵守。否则,编译不通过):

  • 由26个英文字母大小写,0-9, _或$组成;
  • 数字不可以开头;
  • 不可以使用关键字和保留字,但能包含关键字和保留字;
  • Java中严格区分大小写,长度无限制;
  • 标识符不能包含空格;

2、数据类型

  • Java是强类型语言

Java的数据类型分为两大类

在这里插入图片描述

  • 基本类型

    整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)

    • byte=10
    • short=10
    • int=10
    • long = 12L 【注意:要加一个L或l,但是小写的 ‘L’ 像数字1,用L】

    浮点数:

    • float=1.1F 【注意:要加一个F或f】
    • double=1.111111

    字符:

    • char = ‘a’
    • boolean = true
  • 整数扩展:

    进制

    • 二进制 0b

    • 十进制

    • 八进制 0

    • 十六进制 0x 【十六进制中用 A-F 来表示10-15】

       int i = 0b10;
       int i2 = 010;
       int i3 = 10;
       int i4 = 0x10;
       
       //控制台输出结果
           i=2,i2=8,i3=10,i4=16
      
  • 浮点数扩展:

    • 0.1f 不等于 0.1
    • 一个很大的浮点数加1,两个数会判定为相等的数
 float f = 0.1f;
 System.out.println(f);
 double d = 0.1;
 System.out.println(d);
 System.out.println(f == d);
 
 //float 是有限 离散 舍入误差 大约 接近但不等于
 //最好完全避免使用浮点数       可以使用 BigDecimal 数学工具类
 float f1 = 23333333333333333f;
 float f2 = f1 + 1;
 System.out.println(f1 == f2);
 
 //控制台输出结果
 0.1
 0.1
 false              (f == d);
 true              (f1 == f2)
  • 字符扩展
    • 字符实际上也是数字,从 U0000 - UFFFF
 char c1 = 'a';
 char c2 = '中';
 System.out.println((int) c1);
 System.out.println((int) c2);
 
 char c3 = '\u0061';   // ’a‘实际上就是'\u0061'
 System.out.println(c3); 
 
 //输出结果
 97
 20013
 a
  • 布尔类型
 //两种if表示的都是一个意思
 boolean flag = true;
         if (flag) {
             
         }
         if (flag == true) {
             
         }
  • 转义字符
    • \t 要用 ” \t“来表示 ,‘\t’只是一个 字符 不会转义。‘ x’表示一个char类型
    • \n
  • 溢出相关
 //操作比较大的数的时候,注意溢出问题
         //JDK7 新特性,数字之间可以用下划线分割
         int money = 10_0000_0000;
         int years = 20;
         int total = money*years; //-1474836480 计算的时候已经溢出了
         long total2 = money*years; //默认是int,转换之前已经存在问题了
         long total3 = money*(long)years; //先把一个数转换为long
         long total4 =  (long) money*years;
         System.out.println(total);
         System.out.println(total);
         System.out.println(total3);
         System.out.println(total4);
 
 //输出
 -1474836480
 -1474836480
 20000000000
 20000000000
 
  • 类型转换

    byte < short < int < long < float < double

    float 大于 long 是因为浮点数优先

     注意点:
     1、不能对布尔值进行转换
     2、不能把对象类型转换为不相干的类型
     3、在把高容量转换到低容量的时候,需要强制转换
     4、转换的时候可能存在内存溢出,或者精度问题!
    
 int i1 = 128;
 byte i2 = (byte) i1;//内存溢出  ,这是强制转换
 double i3 = i1;  //自动转换
 char c = 'a';
 int d1 = c+1;  //自动转换为整型
 int y = 10;
 System.out.println(i1);
 System.out.println(i2);
 System.out.println(i3);
 System.out.println((int) 23.7);   //舍去小数
 System.out.println((int) -45.89f);
 System.out.println((char) d1);
 System.out.println(d1);
 System.out.println((long) y); 
 
 //输出
 128
 -128
 128.0
 23
 -45
 b
 98
 10

3、常量与变量

  • 变量有三种

    按照声明位置分类

在这里插入图片描述

  1. 局部变量
    1. 必须初始化
  2. 类变量
    1. 静态变量,不需要实例就可以调用,默认值与实例变量相同。
  3. 实例变量
    1. 从属于对象,如果不自行初始化,默认值为 整型:0 ,浮点型:0.0,字符型:U000
    2. 布尔类型:默认值为false
    3. 除了基本类型,其余的默认值都是null
public class demo03 {
	
	static double salary = 2500;
	
	String name;   //实例变量
	int age;       //实例变量
	
	public void add(){
		int i = 10;   //方法内的局部变量
		System.out.println(i);
	}
	
	public static void main(String[] args) {
        
        //变量类型 变量名字 
		demo03 demo03 = new demo03();
		System.out.println(demo03.age);
		System.out.println(demo03.name);
        
        //类变量 static
        System.out.println(salary);
	}
}

//输出
0
null
2500.0
  • 常量
    • final修饰的变量
//修饰符,不存在先后顺序
	public static final double PI = 3.14;
  • 命名规则

    • 驼峰原则:lastname → 应该写成→ lastName

    • 所有名字要 见名知意

    • 类成员变量:首字母小写和驼峰原则:lastName

    • 常量:大写字母,不同单词用下划线区分:,MAX_VALUE

    • 类名:首字母大写和驼峰原则:Main,GoodMan

    • 方法名:首字母小写和驼峰原则:run() ,runMan()

4、运算符

  • 算术运算符:+,-,*,/,%,++,–

    • % 求余 模运算
    • ++,-- 这两个是一元运算符
    • i++,先赋值,再自增;++i,先自增,再赋值
    int i = 1;
    int k = ++i;  //此时先执行i=i+1,然后i的值(2)赋给k
    int j = i++;  //此时先执行 j=i,就是等于2,然后i再自增1,i=3
    System.out.println(k);
    System.out.println(j);
    System.out.println(i);
    
    //结果
    2
    2
    3
    
    int i = 1;
    int k = i++;  //此时先执行 k=i,就是等于1,然后i再自增1,i=2
    int j = ++i;  //此时先执行i=i+1,然后i的值(3)赋给k
    System.out.println(k);
    System.out.println(j);
    System.out.println(i);
    
    //结果
    1
    3
    3
    
    • i–;--i 同理,只是自增改为自减
  • 赋值运算符:= ,+=,-=,*=,/=

  • 关系运算符:>,<,>=,<=,==,!= instanceof

    • 关系运算符返回的结果:true/false, 一个boolean值
    • 短路运算
    int i = 3;
    boolean b = (i<2)&&(i++<4); //i<2判断为false了,后面的条件就不会执行,因为没必要执行,所有i不会自增
    System.out.println(b);
    System.out.println(i);
    
    //结果
    false
    3
    
  • 逻辑运算符:&&,||,!

  • 位运算符:&,|,^ , ~ , >> , << , >>>

    A = 0011 1100
    B = 0000 1101
    A&B = 0000 1100   同 1 为 1,其余为0
    A|B = 0011 1101   有 1 为 1
    A^B = 1100 0010   相同为1,不同为0,异或运算
    ~B = 1111 0010    取反
    2<<3 = 16         左移3位,(就是乘2,进行3次;2*2*2)
    >>  右移,移一位就除2
    >>> 右移,高位部0
    
  • 三元运算符

    • x?y:z x为true 执行 y ,x为false执行 z;
  • 连接字符串 +

    int a = 10;
    int b = 20;
    System.out.println(a + b + "");     +是计算,再连接字符串
    System.out.println("" + a + b);		+是连接字符串
    
    //输出
    30
    1020
    
  • 表达式输出结果类型

int a = 10;
double b = 10;
short c = 10;
byte d = 10;
long f = 10;
char e = 'c';
char h = 'c';
float g = 10f;
//表达式输出的结果默认是int类型,除非操作数里的有比 int 高容量的数据类型,long,float,double;
System.out.println(a+b+c+d+f);
System.out.println(a+e);
System.out.println(a + c + d + g);
System.out.println(e+h);
System.out.println(e);
System.out.println(c + d);
//结果
50.0    //double
109     //int
40.0   //float
198   //两个字符相加输出是int
c	  //输出单个字符		
20    //short + byte 

5、流程控制

5.1 Scanner类(补充)

//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//接收int,不是int就会报错,可以用下面的判断
int i = scanner.nextInt();  
//接收double
double k = scanner.nextDouble(); 
//接收String,会接收enter
String s = scanner.nextLine();  
//if(scanner.hasNextLine()){}       //判断输入的是不是字符串
//if(scanner.hasNextInt()){}       //判断输入的是不是整型
//if (scanner.hasNextDouble()){}   //判断输入的是不是double类型
System.out.println(i);
System.out.println(k);
System.out.println(s);
//凡是属于IO流的类如果不关闭会一直占用资源
scanner.close();

5.2 顺序结构

  • 按顺序执行,最基本的算法结构

5.3 选择结构

5.3.1 单选择
boolean flag = false;
if (flag){
System.out.println(true);
}else{
System.out.println(false);
}
5.3.2 多选择

再 if-else之间加入 else if (可以有多个)

只要有一个条件为true,其余的条件都不执行。

5.3.3 嵌套if结构
5.3.4 switch多选举结构
  • expression变量类型可以是 byte,short,int,char,String,但case中value的值只能是字面量或者常量。
  • 只要有一个case中value等于expression的变量值,就会执行该case的语句;
  • 如果都没有就执行default;
  • case会穿透,如果case中没有break,就会有该后面的case中的语句继续输出;
  • 所有case中最后都加上case;
switch(expression){
	case value:
	//语句
	break;  
    case value:
	//语句
	break;
    default:
        //语句
}

5.4 循环结构

5.4.1 while循环
  • 只要条件为true,就会执行循环体中的代码
  • 一直为true,就会死循环
  • 先判断再执行
while(expression){
    //语言
}
5.4.2 do while循环
  • 会先执行一次do,再循环
  • 先执行后判断,能保证至少执行一次
do{

}while(布尔表达式);
5.4.3 for循环
  • 最有效的循环结构
for(初始化;布尔表达式;更新){
}

for(int i=0;i<=100;i++){
}

//死循环
for(;;){}
  • 九九乘法表
for (int i = 1; i <= 9; i++) {
    //去掉重复项 k<=i
    for (int k =1;k<=i;k++){
        System.out.print(i+"*"+k+"="+(i*k)+"\t");
    }
    System.out.println();
}
  • 增强for循环

    • 主要用于数组和集合的遍历

      int[] array = {1, 2, 3, 4, 5};
      for (int i:array){
         System.out.print(i+"\t");
      }
      
      //结果
      1	2	3	4	5	
      
5.4.4 break 和 continue
  • break

    • 会跳出循环,终止循环,整个循环

    • 对与嵌套循环,只能跳出break的所在的一层循环。

    • 如果想要跳出任意层的循环,需要再循环体上加上标签;

      out:
      while (true){
          while (true){
              int i =0;
              if (i==0){
                  System.out.println("跳出");
                  break out;
              }
          }
      }
      
  • continue

    • 跳出当前的这次循环,不执行本次循环后面的代码,但会继续执行下一次代码。
    • 碰到它,就会回到循环的最开始。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值