1Java语言概述和基本语法

Java语言概述和基本语法

1 java语言特点:面向对象,健壮性,跨平台性

2 java两种核心机制:java虚拟机,垃圾收集机制

​ java虚拟机:JVM是一个虚拟的计算机,具有指令集并使用不同 的存储区域,负责 执行指令,管理数据,内存,寄存器。

​ 对于不同平台有不同的虚拟机

​ 虚拟机屏蔽了底层运行平台的差别,实现了一次编译,到处运行

​ 垃圾回收:提供了一种系统级线程跟踪存储空间的分配情况,在JVM空闲时,检 查并释放那些可被释放的存储空间。

3 JRE (java runtime environment java运行环境 )包含java虚拟机和java程序所需的核心类库

​ JD K(java development kit java 开发工具包)包含了java的开发工具(编译工具javac.exe和打包工具jar.exe),也包括了JRE

4 开发体验:将java代码编写到扩展名为.java的文件中;通过javac命令对该Java文件进行编译;通过java命令对生成的class文件进行运行

5 java三种注释:单行注释,多行注释,文档注释

​ 单行注释://

​ 多行注释:/* */ 以上两个注释了的内容不参与编译,即.class结尾的字节码文件中不包括注释内容

​ 文档注释(java特有):注释内容可以被JDK提供的工具javadoc解析,生成一套以网页文件形式体现的该程序的说明文档

/**
	@author 指定java程序的作者
	@version 指定源文件的版本
*/

6 标识符,命名规则,命名规范

​ 标识符:凡是自己可以起名字的地方

​ 命名规则:

  • 26个英文字母 0-9 _ $
  • 数字不能开头
  • 不可以使用关键字和保留字 但是可以包含关键字和保留字
  • 严格区分大小写 长度无限
  • 不能包括空格

​ 命名规范:

  • 包名:多单词组成字母都小写
  • 类名,接口名:首字母大写XxxYyy
  • 变量名,方法名:第一个单词首字母小写,其他单词首字母大写
  • 常量名:所有字母大写且中间用下划线连接

7 变量的使用

​ 说明:

  • 变量必须先声明赋值 后使用
  • 变量出了作用域就失效了
  • 同一个作用域内 不能有两个同名的变量

​ java数据类型:

​ 基本数据类型:

  • 整数(byte,short,int,long)
  • 浮点类型(float double)
  • 字符型(char)
  • 布尔型(boolean)

​ 引用数据类型:

  • 类(class)

  • 接口(interface)

  • 数组(array)

     		int myAge=12;
            System.out.println(myAge);
    
    //        声明long变量必须以小写l或大写L结尾
            long l1=2312321312L;
            System.out.println(l1);
    //        通常定义整型变量用int型
    //		  byte1字节 short2字节 int4字节 long8字节
    
    //        float4字节 double8字节 float 表示数值范围比long还大
    //        定义float后面必须以f或F结尾
    
    //        一个字符2个字节 char c1='d' char c2='范'都行
    //        也可以声明转义字符 char c5='\n'
    //        直接使用unicode char c6='\n0043'
    
    //        boolean只能取两个之一:true false
    

8 8种基本数据运算规则

​ 前提:不包含boolean 只有前面7种
​ 8.1自动类型提升
​ byte、char、short-> int-> long-> float-> double
​ 当容量小的数据类型变量和大的数据类型变量做运算时,结果自动提升为容量大的类型
​ 容量小和大表示这个类型表示数的大和小 不是占字节的大小 所以float比long大
​ 特别:当byte chat short三种类型做运算时 结果为int类型 其中也包括同等类型 byte+byte还是用int来接收

​ 8.2强制类型转换
​ 自动类型提升逆运算,需要使用强转符
​ 可能导致精度损失

        byte b1=2;
        int i1=12;
        int i2=b1+i1;
//        也可以用long来接收 不能用byte接收,也可以用float接收
        
        double d1=12.3;
        int i3=(int)d1;
        System.out.println(i3);
        
        long l=123123;
//        不会报错 自动转换为int
//        long l1=1231232132323123213213213;
//        会报错 一定要加L
//        float=12.3;
//        一定会报错 一定要加f


//          整型常量默认是int 浮点型常量默认是double
//        所以float f1=b+12.3会编译错误

9 string基本使用

string属于引用类型
String s=""可以 但char c=""不可以
String可以和8种基本数据类型做运算 且运算只能是连接运算

10 进制

        int num1=0b110;//二进制
        int num2=110;
        int num3=0127;//八进制
        int num4=0x110A;//十六进制

        System.out.println(num1);//6
        System.out.println(num2);//110
        System.out.println(num3);//87
        System.out.println(num4);//4362

11 运算符

/*
算符运算符: + - * /  % 前++ 后++ +

比较运算符
+ - * / 只能适用在数值类型的数据之间
== !=不仅可以在数值类型数据之间,还可以使用在其他引用类型变量之间
 */

  		int num1=12;
        int num2=5;
        int result =num1/num2;//结果为2

        double result2=num1*1.0/num2;
        System.out.println(result2); //2.4

        //%结果符号和被模数的符号相同

        //前++先自增1 然后运算 后++先运算再自增1
        //自增1不会改变本身变量的数据类型
  
		//赋值
        int ii3=10,jj3=10;//也可以
        short s1=10;
        //s1=s1+2编译失败
        //但是s1+=2可以通过,不会改变s1的类型
		//区分& &&
        //& 和&&运算结果相同 当符号左边为true 二者都会执行右边的运算
        //当符号左边是false。&会继续执行符号右边的运算
        boolean b1=false;
        int num1=10;
        if(b1 & (num1++>0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num1: "+num1);
		//我现在在南京 num1:11

        boolean b2=false;
        int num2=10;
        if(b2 && (num2++>0)){
            System.out.println("我现在在北京");
        }else{
            System.out.println("我现在在南京");
        }
        System.out.println("num2: "+num2);
	    //我现在在南京 num1:10

        // | ||
        // 和上面类似 当符号左边是true时 |还会执行右边的运算
        //开发中一般选&& ||
/*
位运算符
操作的都是整形的数据
<<在一定范围内,每向左移1位 相当于*2
>>在一定范围内,每向右移1位 相当于/2
正数负数都是这样
面试题:最高效的2*8 2<<3
 */
/*
三元运算符
(条件表达式)? 表达式1:表达式2
条件表达式结果为boolean类型 根据真假决定是表达1还是2
表达式1和表达式2要求是一致的 能够统一成一个类型
表达式中可以嵌套

凡是可以用三元运算符的地方 都可以改成if else
但反之不成立
如果两者都可以用 优先使用三元 因为效率更高

 */

12 scanner 类用法

​ 导包import java.util.Scanner;
​ Scanner的实例化 Scanner scan=new Scanner(System.in);
​ 调用Scanner类的相关方法,来获取指定类型的变量

   		Scanner scan=new Scanner(System.in);


        System.out.println("请输入你的姓名");
        String name=scan.next();
        System.out.println(name);

        System.out.println("请输入你的年龄");
        int age=scan.nextInt();
        System.out.println(age);

        System.out.println("请输入你的体重");
        double weight=scan.nextDouble();
        System.out.println(weight);

        System.out.println("你是否相中我了呢?(true/false)");
        boolean isLove=scan.nextBoolean();
        System.out.println(isLove);

        //对于char型 Scanner没有相关方法 只能获取一个字符串

        System.out.println("请输入你的性别:(男/女)");
        String gender=scan.next();
        char genderChar=gender.charAt(0);
        System.out.println(genderChar);

        //输入数据和要求数据不匹配时 会报一个异常 程序终止

13 随机数

/*
Math.random()返回一个double [0.0,1.0)
 */
public class Fao14SuiJiShu {
    public static void main(String[] args){
        int value=(int)Math.random()*90+10; //[10,99]
        //公式 [a,b] (int)(Math.random()*(b-a+1)+a)
    }
}

14 分支结构

/*
else结构是可选的
针对于条件表达式:
    如果多个条件表达式之间是互斥关系,哪个判断写在上面或写在下面都无所谓
    如果多个条件表达式有交集,应该根据实际情况考虑应该将哪个结构声明在上面
    如果多个条件表达式之间有包含关系 通常情况下需要将范围小的声明在防范围大的上面

if-else结构是可以相互嵌套的
如果执行语句中只有一行时 可以省略{}但不建议
 */
/*
switch-case
switch(表达式){
case 常量1:
    balabala;
    //break;
case 常量2:
    。。。
default:
    balabala;

根据switch表达式中的值 依次匹配各个case中的常量 一旦匹配成功 就进入相应case中语句
当调用完执行语句后 则任然继续向下执行其他case中语句 直到遇到break 或者遇到末尾结束

break 关键字表示一旦执行到此 就跳出switch case结构

switch中的表达式只能是如下六中数据类型之一:byte short char int 枚举 String

case之后只能声明常量 不能声明范围

default 关键字是可选的 而且位置是灵活的 但一般都是写在最后的

break关键字是可选的

如果case 中语句相同可以进行合并

说明:
凡是可以使用switch结构都可以使用if else但反之不成立
若两者都可以用 且case相对简单 优先使用case 执行效率稍高

 */

15循环

/*
循环4要素
1初始化条件
2循环条件  boolean类型
3循环体
4迭代条件

for(1;2;4){
    3
}
/*
循环4要素
1初始化条件
2循环条件  boolean类型
3循环体
4迭代条件

1
while(2){
    3
    4
}

千万小心不要丢了迭代条件
写程序避免出现死循环
for和while相互转换
不在循环条件限制次数:while(true) 或者for(;;)
结束循环几种方式:
    循环条件部分返回false
    循环体中执行break
 */
/*
循环4要素
1初始化条件
2循环条件  boolean类型
3循环体
4迭代条件

1
do{
    3
    4
}while(2)

do while至少执行一次循环体
开发中用for和while多一点

嵌套循环:将一个循环结构放在另一个循环结构中
假设外层循环m次 内存循环n次 则内存循环体一共执行m*n次
技巧 外层循环控制行数 内层控制列数
 */
//获取100以内的所有素数
		long start=System.currentTimeMillis();//获取一开始毫秒数
        boolean isFlag=true;
        for(int i=2;i<=100;i++){
            for(int j=2;j<=Math.sqrt(i);j++){//优化二
                if(i%j ==0){
                    isFlag=false;
                    break;//优化一
                }
            }
            if(isFlag==true){
                System.out.println(i);
            }
            isFlag=true;
        }
        long end=System.currentTimeMillis();//结束
        System.out.println("花费时间为:"+(end-start));
/*
		break和continue关键字使用
        使用范围            	   循环中使用区别
        break: switch-case/循环   结束当前循环
        continue: 循环            结束当次循环
*/
public class Fao19BreakContinue {
    public static void main(String[] args){
        lable:for(int i=1;i<=4;i++){
            for(int j=1;j<=10;j++){
                if(j%4==0){
                    //break;默认跳出包裹关键字最近的一层循环
                    //continue; 也是如此
                    break lable;//结束指定标识的一层循环结构
                }
                System.out.print(j);

            }
            System.out.println();
        }
    }
}
posted @ 2021-10-14 21:13  fao99  阅读(65)  评论(0)    收藏  举报