菜鸟笔记
提升您的技术认知

java基础知识-ag真人游戏

计算机语言发展史

java之父:詹姆斯•高斯林(james gosling)

java语言平台版本

javase — standard edition—标准版/基础版

定位于个人计算机上的应用,这个版本是java平台的核心,他提供非常丰富的api来开发一般个人计算机上的应用程序,包括用户界面接口awt及swing,网络功能与国际化,图像处理能力以及输出支持等,在上个世纪90年代末互联网上大放异彩的applet也属于这个版本。applet后来被flash取代,flash即将被html5取代

javaee — enterprise edition— 企业版/商务版

定位在服务端的应用,javaee是javase的扩展,增加用于服务器开发的类库。如:jdbc是让程序员直接在java内使用的sql语法来访问数据库的数据,servlet能够延申服务器的功能,通过请求-响应的模式来处理客户端的请求;jsp是一种可以将java程序代码内嵌在网页上的技术

javame — micro edition — 微型版/移动版

定位在消费性能电子产品的应用上,javame是javase的内申,包含javase的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型的产品能够增加支持的能力

三种java版本之间的关系 

java语言特性简单性、安全性、面向对象、高性能、编译性、解释性、分布式处理、健壮性、开源、跨平台 

三者关系图解

三者关系:jdk>jre>jvm(三者是包含关系) 

jdk、jre、jvm解释: 

  • jdk:java development kit(java开发工具套件)
  • jre:java runtime environment(java运行环境)
  • jvm:java virtual machine(java虚拟机)

jdk、jre、jvm作用 

  • jdk:jdk是java语言软件开发工具包,主要用于移动设备,嵌入式设备上的java应用程序,编写java必须使用jdk,他提供编译和运行java程序的环境,是整个java开发的核心 
  • jre:java运行的环境
  • jvm:将字节码文件翻译成当前平台认识的可执行文件格式

由上面观之java跨平台前提:安装对应的jvm

java是一门解释性的语言:jvm将字节码文件一行一行的解释为当前操作系统可执行文件格式。

注意:编译后产生的可执行文件可以在对应的平台上运行(一般vs2019包含编译器与链接器) 

  • java的字节码文件是和平台无关的,拿着这个字节码文件到不同的平台上去运行
  • c语言不同的平台有不同的编译器,编译器与平台相关的,编译后的可执行文件也和平台相关 

注意:c语言相对java来说效率高,因为他产生的可执行文件可以直接在平台上运行,不用解释和翻译 

  • 源文件:.java文件
  • 字节码文件:.class文件
  • 编译环节所对应的文件:javac.exe
  • 运行环节所对应的文件:java.exe

.java文件运行原理

.java文件(javac.exe)=>.class文件(java.exe)=>jvm运行.class得到结果

注释的作用

  1. 屏蔽代码
  2. 解释说明

注释分类 

注释名称 注释内容
单行注释 //
多行注释 /*……*/
文档注释 /**……*/

注意:

  • 多行注释内容不能用于生成一个开发者文档,而使用文档注释内容可以生成一个开发者文档
  • 一般文档注释可以配合jdk提供的工具javadoc.exe来一起使用,通过javadoc.exe可以对文档注释进行解析,生成一套网页文件形式体现该程序的说明文档
  • 如果一个类需要使用javadoc工具生成一个软件开发者文档,那么该类必须经过public修饰
  • 文档注释注释的内容一般都是位于类或方法上面的

定义

标识符:标识符可以简单的理解成一个名字。

在java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符

标识符原则

  1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符
  2. 不能以数字开头。
  3. 标识符严格区分大小写。
  4. 要做到见名知意。
  5. 标识符不能是java的关键字

注意:除了上述的50个关键字以外,true,false,null也不可以被用作标识符 

关于标识符细节

  1. 类名:首字母大写,其余遵循驼峰命名
  2. 方法名:首字母小写,其余遵循驼峰命名
  3. 包名:全部小写,不遵循驼峰命名 

变量:数据的值是不固定的,总在变的量

语法:变量类型 变量名 = 变量值 ;

定义变量的两种格式:

//声明变量时赋值
int num=18;
//先声明变量,再赋值
string str; str="hello world";

注意:

  1. 变量名必须是一个有效的标识符
  2. 变量名不能重复
  3. 声明变量前要定义类型
  4. 变量的值可以更改

变量的使用原则:就近原则(离自己最近的变量会生效)

变量本质上是在内存中申请一块内存空间(申请内存空间的大小取决于变量的类型),这块内存空间用变量名来表示,而这块内存里存储的是变量的值 

final关键字 

    final double a=34;
    double b=78;
    system.out.println(a "\t" b);
    b=67;//成功
    a=45;//报错

注意:一个变量被final修饰,那么这个变量就变成了常量,必须提前赋值,并且这里的值便不可修改 

变量分类

局部变量

位置:定义在方法里或者方法的声明上
注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5;

作用域:整个方法的内部
生命周期:随着方法的调用而存在,方法运行完毕就释放了

全局变量

位置:定义在类里方法外
注意:不用初始化,也会自动被初始化成默认值

作用域:整个类的内部
生命周期:整个类中,类消失了,成员变量才会释放

成员变量和局部变量的区别

常量:在程序运行过程中,值一直不会改变的量成为常量。

常量分类

类型 默认值
整数型 0
浮点型 0.0
字符型 '\u0000'(空格)
布尔型 false
引用类型 null
  1. 我们只要写一个整数,就默认是int类型
  2. 我们只要写一个小数,就默认是double类型
  3. byte,short,char三种比int小的整数可以用范围内的值直接赋值
  4. 加了字面值后缀就表示此值是特定的类型
  5. 字面值后缀l——long、 d——double、f——float
  6. 浮点数类型不同,不要做值的比较
int a=123456789012;//报错,因为超过int范围。不能放入a内存
long a1=123456789012;//报错,因为123456789012为int类型,而此值超过int类型范围
long a2=123456789012l;//正确,告诉了此值为long类型并且符和long类型范围,并且可以放入long内存
long a3=12;//正确,说明此值为int类型可以放入long类型内存
float nu3=3.14;//报错,因为3,14为double类型
float nu4=3.14f;//正确
  • 0b - 标识这是2进制 ,如:0b11
  • 0 - 标识这是8进制, 8进制是三位,如: 023
  • 0x - 标识这是16进制,如: 0x0001
        //默认10进制
        int a1=12;
        //16进制
        int a2=0x10;
        //二进制
        int a3=0b11;
  • 十进制形式:3.14,314.0
  • 科学计数法形式: 314e2,314e-2(e大写小写都可以)
        //十进制形式
        double num1=3.14;
        //科学计数法象时
        double num2=314e-2;
        system.out.println(num1 "\t" num2);

字符常量: java中使用单引号来表示字符常量

注意:

  • 字符在内存中占两个字节
  • char类型用来表示在unicode编码中的字符,unicode编码被设计用来处理各种语言的文字,他表示两个字节,可允许有65536个字符
  • char类型保存的是该字符的ascii码值,但是显示的是对应的字符

转义字符

        char c='h';
        char c1='\n';
        char c2='i';
        //以字符的形式打印
        system.out.println(c);
        //不用拼接,因为多个char类型运算时会整型提升
        system.out.format("%c%c", c,c2);

定义:除了基本类型以外的所有类型都是引用类型

注意:引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组

注意:箭头开始的地方是小类型(容量小的类型),箭头指向的地方是大类型(这里的"大"和"小",指的是对应类型的取值范围,不是字节数)

转换规则

隐式转换:小类型到大类型直接转

byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; //-->可以执行

显示转换:大转小强制转,浮变整,小数没

        double a=3.2;
        int b=(int)a;
        system.out.println(b);//b=3

注意:不能对boolean类型进行类型转换,并且boolean也不可以参与运算。

1.计算结果的数据类型,与最大数据类型一致

2.byte,short,char三种比int小的整数,运算时会先自动转换成int

        byte a=3;
        byte b=5;
        byte c=(byte)(a b);//a b会自动提升为int
        system.out.println(c);//c=8

3.整数运算溢出

4.浮点数运算不精确——后面有解决办法

5.浮点数的特殊值

infinity 无穷大 3.14/0

nan not a number 0/0.0 或 0.0/0

import java.util.scanner;
public class hello {
    //main主方法——程序的入口
    public static void main(string[] args) {
        //获取当前时间——返回值为时间戳
        long l = system.currenttimemillis();
        //获取扫描器
        scanner sc=new scanner(system.in);
        //让扫描器扫描键盘输入int类型的数据
        int i = sc.nextint();
        //让扫描器扫描键盘输入string类型的数据
        string s = new scanner(system.in).nextline();
        //输出后换行
        system.out.println("时间为" l);
        //输出后以\n换行
        system.out.print("\n");
        //以特定格式输出
        system.out.format("%d--%s", i,s);
    }
}

前言

运算符:用于连接 表达式的操作数,并对操作数执行运算的符号。

运算符类型:

算术运算符、位运算符、比较运算符、逻辑运算符、三目运算符、赋值运算符。

根据操作数来分类

  1. 单目运算符:只有一个操作数的运算符
  2. 双目运算符:有两个操作数的运算符
  3. 三目运算符:有三个操作数的运算符

算数运算符

自增自减运算符

i         i先参与运算        i=i 1

i        i=i 1                  i参与运算 

号的作用

  1. 表示正数
  2. 表示相加操作
  3. 字符串的拼接

注意:左右两侧的任意一侧有字符串,那么就是字符串拼接;结果就为字符串 

        system.out.println( 5);//5
        system.out.println(5 6);//11
        system.out.println(5 '6');//59——整形提升
        system.out.println(5 6 "7");//117
        system.out.println("hello" 888);//hello888

位运算符

逻辑运算符与位运算符(&、|、^)

  • 逻辑运算符:左右连接的是布尔类型的操作数
  • 位运算符:左右连接的是具体的数值

按位运算 

  • &:同1为1
  • |:有1为1
  • ^:相同为0,相异为1
  • ~:对一个二进制数按位取反
  • <<:算数左移:移位过程左边舍弃,右边补零
  • >>:算数右移:移位过程右边丢弃,左边补符号位
  • <<<:逻辑左移:移位过程左边舍弃,右边补零
  • >>>:逻辑右移:移位过程右边丢弃,左边补零

比较运算符

逻辑运算符

逻辑异或(^):相同为假,相异为真

短路与:&&

只要第一个操作数为false那么整个结果就为false,第二个操作数根本不用算(前提第一个为false)

短路或:||

只要第一个操作数为true那么结果就为true,第二个操作数根本不用算(前提第一个为true)

注意:短路与或短路或相对于逻辑与或逻辑或效率更高

 逻辑运算符实验

        //&运算
        system.out.println(true&true);//true
        system.out.println(true&false);//false
        system.out.println(false&false);//false
        //|运算
        system.out.println(true|true);//true
        system.out.println(true|false);//true
        system.out.println(false|false);//false
        //!运算
        system.out.println(!true);//false
        system.out.println(!false);//true
        //异或^运算——同为假,异为真
        system.out.println(true^true);//false
        system.out.println(true^false);//true
        system.out.println(false^false);//false

三目运算符

语法:exp1?exp2:exp3

注意:如果表达式1结果为true那么整个式子的结果就是表达式2的结果,否则是表达式3的结果

        int num=(5<7)?1:0;
        system.out.println(num);//1

赋值运算符 

a =b和a=a b的区别

  • a =b:可读性稍差,编译效率高,底层自动进行类型转换
  • a=a b:可读性好,编译效率低,手动进行类型转换
        byte a=10;
        int b=20;
        a =b;//不报错
        a=(byte)(a b);

优先级控制

当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。

网站地图