• 初识Java


    简介

    什么是Java?

    Java是Sun Microsystems1995年首次发布的一种编程语言计算平台。开发者:詹姆斯*戈士林

    2010 年Oracle公司收购Sun Microsystems,之后由 Oracle 公司负责 Java 的维护和版本升级。

    Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序只编译一次,就可以在各种系统中运行。

    从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java无处不在!

    Java是一门面向对象的编程语言

    Java 语言的风格很像 C 语言和 C++语言,是一种纯粹的面向对象语言,它继承了 C++ 语言面向对象的技术核心,但是拋弃了 C++ 的一些缺点,比如说容易引起错误的指针以及多继承等,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼。

    什么是计算平台?

    计算平台是在电脑中运行应用程序(软件)的环境,包括硬件环境软件环境。一般系统平台包括一台电脑的硬件体系结构,操作系统,运行时库。

    Java语言的特点

    1. 简单易学
    2. 面向对象(封装,继承,多态)
    3. 分布性
    4. 编译和解释性
    5. 稳健性
    6. 稳健性
    7. 可移植性
    8. 高性能
    9. 支持多线程
    10. 动态性

    Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等。

    Java的三大版本

    Java SE(Java Platform Standard Edition,Java 平台标准版)

    • 它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。

    • Java SE 包含了支持 Java Web 服务开发的类,并为 Java EE 提供基础,如 Java 语言基础、JDBC 操作、I/O 操作、网络通信以及多线程等技术。

    • Java SE的体系结构图,如下

    Java EE(Java Platform Enterprise Edition,Java 平台企业版)

    • 企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。
    • Java EE是在Java SE基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(Service Oriented Architecture,SOA)和 Web 2.0 应用程序。

    Java ME(Java Platform Micro Edition,Java 平台微型版)

    • Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。

    Java开发环境

    1. JVM

      Java 虚拟机(JVM)是运⾏ Java 字节码的虚拟机,JVM 有针对不同系统的特定实现 (Windows,Linux,macOS),⽬的是使⽤相同的字节码,它们都会给出相同的结果。

    2. JRE

      Java 运⾏时环境,它是运⾏已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机 (JVM),Java 类库,java 命令和其他的⼀些基础构件。

    3. JDK

      JAVA编译器,它拥有 JRE 所拥有的⼀切,还有编 译器(javac)和⼯具(如 javadoc 和 jdb),可以创建和编译程序,JDK是整个Java的核心。

    Java跨平台

    跨平台:java程序编译为字节码文件.class文件之后,拷到哪个平台的机器上面都能够无差别的运行,这依赖于 java虚拟机

    java程序不是直接运行在CPU上,而是运行在java虚机(简称JVM)上的。

    Java虚拟机

    程序运行时,首先会启动 JDK 编译成 字节码文件(.class), 在由 java虚拟机(JVM) 进行解释,执行 字节码文件

    java虚拟机(JVM) 是用各个平台的语言编写的,它能把java字节码文件翻译为相应平台的语言。

    利用 java虚拟机(JVM) 可以把Java字节码程序和具体的硬件平台,操作系统环境分割开来。(一次编译,到处运行

    只要安装针对特定平台的 java虚拟机(JVM) ,Java程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境。



     

    基础

    数据类型

    在 Java 中,数据类型只有 四类八种

    1. 整数型:byte,short,int,long
      • byte 占用1字节,也就是8位,默认值是0
      • short 占用2字节,也就是16位,默认值是0
      • int 占用4字节,也就是32位,默认值是0
      • long 占用8字节,也就是64位,默认值是0L
    2. 浮点型:float,double
      • float 是单精度,占用4位,默认值0.0f
      • double 是双精度,占用8位,默认值1是0.0d
    3. 字符型:char
      • char:单一的,占用16位Unicode字符,最小值是 \u0000(也就是0),最大值是 \uffff(即为65535),该;类型可以存储任何字符。
    4. 布尔型:boolean
      • 只有两种值,true或者是false,占用1位,默认值是false

    语法

    • 大小写敏感:例如 Hello 与 hello 是不同的,这其实就是 Java 的字符串表示方式
    • 类名:对于所有的类来说,首字母应该大写,例如 MyFirstClass
    • 包名:应该尽量保证小写,后面每个单词字母都需要大写,例如 my.first.package
    • 方法名:方法名首字母需要小写,后面每个单词都需要大写,例如 myFirstMethod()

    运算符

    运算符是什么?是一些特殊的符号,主要用于数学函数,一些类型的赋值语句和逻辑比较方面。

    赋值运算符

    ​ 使用操作符 = 来表示,它的意思是把 = 号右边的值复制给左边,右边的值可以是任何数,变量或者表达式,但左边的值必须是明确的,已经定义的变量。例如 int a = 5

    ​ 但是对于对象来说,复制的不是对象的值,而是对象的引用,所以如果说将一个对象复制给另一个对象,实际上是将 一个对象的引用赋值给另一个对象 。

    算术运算符

    和数学中的数值计算差不多,主要有

    算数运算符需要注意的就是优先级问题,当一个表达式中存在多个操作符时,操作符的优先级顺序就决定了计算顺序,最简单的规则就是 先乘除后加减 ,()的优先级最高,没必要记住所有的优先级顺序,不确定的直接使用()即可。

    自增,自减运算符

    在对一个变量做加 1 或减 1 处理时,可以使用自增运算符 ++ 或自减运算 --

    1. int a = 5;
    2. b = ++a;
    3. c = a++

    注意

    1. 自增/自减只能作用于变量。

    2. ++/--在前和后的区别:在前先加后用,在后先用后加。

    3. 无论是前缀形式还是后缀形式,自增自减运算符的优先级要高于赋值运算符。

    4. 当一条语句中仅有++或--操作时,前缀形式与后缀形式的运算符没有任何区别。

      1. int a=1;
      2. int b =1;
      3. a++;
      4. ++b;
      5. System.out.println("a="+a+",b="+b); //输出a=2,b=2

    比较运算符

    比较运算符用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。

    结果是boolean型。比较运算符共有6个,通常作为判断的依据用于条件语句中。

    逻辑运算符

    逻辑运算符主要有三种:与,或,非

    按位运算符

    1. &(与):参与运算的两个数据,按二进制位进行 “与” 运算。两位同时为1,结果才为1,否则结果为0。

      0&0=0  0&1=0  1&0=0  1&1=1
      
    2. |(或):参加运算的两个对象,按二进制位进行"或"运算。两个对象只要有一个为1,其值为1。

      0|0=0  0|1=1  1|0=1  1|1=1
      

      注意:&,| 的负数按补码形式参加按位与运算。

    3. ^(异或):参加运算的两个数据,按二进制位进行"异或"运算。如果两个相应位相同为0,相异为1。

      0^0=0  0^1=1  1^0=1  1^1=0
      
    4. ~(取反):参加运算的一个数据,按二进制进行"取反"运算。对一个二进制数按位取反,即将0变1,1变0。

      1. ~1=0
      2. ~0=1

    位移运算符

    移位运算符在程序设计中,是位操作运算符的一种。

    移位运算符可以在二进制的基础上对数字进行平移。

    按照平移的方向和填充数字的规则分为三种: <<(左移) 、 >>(带符号右移) 和 >>>(无符号右移)

    <<左移

    1. //左位移后的值计算方法 : a * 2 的 b 次方
    2. int a = 5; //a的二进制: 101
    3. int b= 3; //位移位数
    4. int c= a<//c的二进制: 101000,发现二进制的右边多了三个0

    >>带符号右移

    1. //右位移后的值计算方法 : a / 2 的 b 次方,没有小数
    2. int a = 50; //a的二进制:110010
    3. int b= 2; //位移位数
    4. int c= a>>b; //c的二进制:110,发现二进制的右边少了三个0

    >>>无符号右移

    它和 >>带符号右移 的功能是将参与运算的对象对应的二进制数右移指定的位数。它们的功能是将参与运算的对象对应的二进制数右移指定的位数。

    注意

    1. 由于double,float在二进制中的表现比较特殊,因此不能来进行移位操作,报错,编译不过。
    2. int类型移位大于等于32位时,long类型大于等于64位时,会先做求余处理再位移处理,byte,short移位前会先转换为int类型(32位)再进行移位。
       

    三元运算符

    类似 if...else... 这种操作符,语法为: 条件表达式?表达式1:表达式2 。

    问好前面的位置是判断的条件,判断结果为布尔型,为true时调用表达式1,为false时调用表达式2。


     

    执行控制流程

    Java中的控制流程其实和C一样,在Java中,流程控制会涉及到包括 if-else,while,do-while,for,return,break 以及选择语句 switch

    条件语句

    可以根据不同的条件执行不同的语句,包括 if 条件语句与 switch 多分支语句。

    1. //if:可以单独判断表达式的结果,表示表达的执行结果
    2. int a = 10;
    3. if(a > 10){
    4. return true;
    5. }
    6. return false
    7. //if...else:通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”
    8. int a = 10;
    9. int b = 11;
    10. if(a >= b){
    11. System.out.println("a >= b");
    12. }else{
    13. System.out.println("a < b");
    14. }
    15. //if...else if 多分支语句
    16. int x = 40;
    17. if(x > 60) {
    18. System.out.println("x > 60");
    19. } else if (x > 30) {
    20. System.out.println("x > 30");
    21. } else if (x > 0) {
    22. System.out.println("x > 0");
    23. } else {
    24. System.out.println("x <= 0");
    25. }

    注意:if 后的 () 内的表达式必须是 boolean 型的。如果为true,则执行if后的复合语句;如果为false,则执行else后的复合语句。

    1. //switch 多分支语句:一种比 `if...else if`语句更优雅的使用方式
    2. switch (week) {
    3. case 1:
    4. System.out.println("1");
    5. break;
    6. case 2:
    7. System.out.println("2");
    8. break;
    9. case 3:
    10. System.out.println("3");
    11. break;
    12. default:
    13. System.out.println("No Else");
    14. break;
    15. }

    循环语句

    在满足一定条件下反复执行某一表达式的操作,直到满足循环语句的要求。主要有 for,do...while,while 。都是利用一个条件来控制是否要继续反复执行这个语句。

    while与do...while

    1. //当布尔值为true的时候,执行下面的表达式,布尔值为false的时候,结束循环,布尔值其实也是一个表达式
    2. int a = 5;
    3. //while
    4. while(a > 3){
    5. a--;
    6. }
    7. //do...while
    8. do {
    9. System.out.println("b == " + a);
    10. a--;
    11. } while(a == 1);

    两者唯一区别

    1. do...while语句至少执行一次,即使第一次的表达式为false。
    2. 而在while循环中,如果第一次条件为false,那么根本不会执行其中的语句。

    for循环语句

    是开发中常用的循环方式。它的形式如下

    1. //每次迭代前都会测试布尔表达式。
    2. //如果表达式结果是false,就会执行for语句后面的代码块。
    3. //每次循环结束,会按照步进的值执行下一次循环。
    4. for(初始化;布尔表达式;步进){
    5. 代码块;
    6. }

    逗号操作符

    Java里唯一用到逗号操作符的就是 for 循环控制语句。

    在表达式的初始化部分,可以使用一系列的逗号分隔的语句;通过逗号操作符,可以在 for 语句内定多个变量,但它们必须具有相同的类型。

    1. for(int i=1,j=i*2;i<5;i++,j=i*3,j=i*4){
    2. System.out.println("i="+i+" "+"j="+j);
    3. }
    4. //i=1 j=2
    5. //i=2 j=8
    6. //i=3 j=12

    for语句中的int定义涵盖了i和j,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。

    在控制表达式中,定义多个变量的能力只限于for循环适用,其他任何选择或迭代语句中都不能使用这种方式。

    for-each语句

    在 Java JDK 1.5 中还引入了一种更加简洁的,方便对数组和集合进行遍历的方法,即 for-each 语句。

    1. int array[] = {1,2,3};
    2. for (int arr : array){
    3. System.out.println("i="+i+" "+"j="+j);
    4. }

    跳转语句

    Java语言中,有三种跳转语句:breakcontinue 和 return

    break

    switch中已经见到了,它是用于终止循环的操作,实际上break语句在 for,do...while,while 循环语句中,用于强行退出当前循环,例如

    1. for(int i = 0;i < 10;i++){
    2. if(i == 5){
    3. break;
    4. }
    5. }

    continue

    该语句也可以放在循环语句中,它与 break 语句具有相反的效果,它的作用是用于执行下次循环,而不是退出当前循环。

    1. //求1100的奇数和
    2. int sum=0;
    3. for(int i=0;i<=100;i++){
    4. if(i%2==0){
    5. continue;
    6. }
    7. sum+=i;
    8. }

    return

    return语句作为一个无条件的分支,他不需要判断条件即可发生。

    主要用途

    1. 用来表示一个方法的返回值(前提是返回值类型不是void)。
    2. 是由return导致方法退出并返回值。
  • 相关阅读:
    MediaCodec_Analyze-1-create
    继承、抽象类、代码块
    【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型
    node.js - 包、express
    猿创征文|Hadoop大数据技术综合实验
    HJ23 删除字符串中出现次数最少的字符
    最新CLion + STM32 + CubeMX 开发环境搭建
    【信创】到底是什么呢?--九五小庞
    【车联网/自动驾驶仿真学习】VEINS_CARLA安装指南
    【Linux】linux | 生产事故 | openssl升级导致ssh无法连接
  • 原文地址:https://blog.csdn.net/guanshengg/article/details/126315420