Java基础

1. Java常识

1.1 语言的发展史

  • 机器语言
  • 汇编语言
  • 高级语言

1.2 Java语言介绍

发展历史:

创始人: 詹姆斯·高斯林

1991年,高司令带领Sun公司的工程师小组以C++为基础创建的这种语言,起初命名为Oak,橡树的意思,后来发现Oak是一种已有的计算机语言的名字,于是更名为Java

Java体系:

  • JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用

  • JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用

  • JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上

Java语言特点:

  • 跨平台/可移植性
    这是Java的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

  • 安全性
    Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以很容易构建防病毒,防篡改的系统。

  • 面向对象
    面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。

  • 简单性
    Java就是C++语法的简化版,我们也可以将Java称之为“C+±”。跟我念“C加加减”,指的就是将C++的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于C语言,因此学习起来完全不费力。

  • 高性能
    Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使Java程序的执行效率大大提高,某些代码甚至接待C++的效率。
    因此,Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。

  • 分布式
    Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。

  • 多线程
    多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

  • 健壮性
    Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。

1.3 Java开发环境

参考:Java及Jdk 安装配置教程

1.4 常见DOS命令

DOS:Disk Operating System:

是Windows桌面操作系统出来前的操作系统,以纯命令的形式直接操作磁盘。

win + r 输入 cmd 打开DOS窗口

常见命令:

# 切换盘符 以D盘为例
d:
# 显示当前目录详细信息
dir
# 移到指定目录
cd path
# 当前目录
cd .
# 上级目录
cd ..
# 清屏
cls
# 切换历史命令
# 按上下箭头选择
# 补全命令
# tab
# 创建目录
md dirName
# 删除目录
rm dirName
# 复制文件
cd file newFilePath
# 删除文件
del fileName
# 查看本机IP
ipconfig
# 测试主机与目标主机是否连通
ping ip

1.5 class文件执行流程

*整体流程: .java–>*.class–>二进制码

DOS中执行Java程序

首先编译文件

javac *.java

注: 若发生乱码,请加上 -encoding utf8

再将编译后的字节码文件转换为二进制文件

java *

注: 若是执行使用开发工具编写的程序发生 错误: 找不到或无法加载主类报错,一般是程序带了包名,则在转换的时候也需要加上包名,或者加上-d选项,下面给出一个完整的执行Demo

package demo;
/**
 * @author:MMW
 * @time: 2021/8/21 23:57
 */
public class Test {
   
    public static void main(String[] args) {
   
        System.out.println("hello java");
    }
}

DOS:

E:\MyFiles\file>javac Test.java
E:\MyFiles\file>java Test
hello java

2. 数据类型

2.1 标识符和关键字

标识符

包,类,变量,方法…等等,java中只要是起名字的地方,那个名字就是标识符

标识符定义规则:

  • 允许组成: 数字 字母 下划线_ 美元符号$
  • 不允许: 1. 以数字开头 2. 使用Java中的关键字
  • 建议: 遵循驼峰命名法,见名知意
  • 特点: 大小写敏感

关键字

被JAVA语言赋予了特殊含义,用作专门用途的单词

特点: 关键字都是小写的

关键字参考: https://www.cnblogs.com/cosmosray/p/7441381.html

2.2 常量和变量

常量:

常量通常是指一个固定的值,例如: 1 , “a”,true 等

  • 字面常量: 1 , “a” true 等
  • 字符常量: 使用final修饰符修饰的,如 : PI

变量:

变量的本质是: 可操作性的存储空间 ,即变量的位置是固定的,但是里面放什么值是不固定的。

Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小

变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

变量声明:

type var = value

变量使用

如果你只定义一个变量,没有给变量进行赋值的话,那么其实这个变量相当于没有定义

2.3 Java注释

Java中的注释与大部分程序设计语言一样,不会出现中可执行程序中。在Java中,有三种注释方式:

  • 单行注释
  • 多行注释
  • 文档注释
public class AnnotationDemo {
   
    public static void main(String[] args) {
   
        // 这是一个单行注释

        /*
           多行注释
           多行注释
           多行注释
         */

        /**
         * 文档注释,同样可以注释多行
         * 与第二种不同的是,这种注释可以自动生成文档
         */
    }
}

2.4 基本数据类型

2.4.1 前言

在Java中一切皆为对象,八种基本数据类型除外

在这里插入图片描述

可分为两大类

  • 基本数据类型
  • 引用数据类型

2.4.2 整数类型

在这里插入图片描述

public class IntegerDemo {
   
    public static void main(String[] args) {
   
        /*
         * 不同进制: 默认 十进制, 0 八进制, 0x 十六进制, 0b 二进制
         */
        int base_10 = 36;
        int base_8 = 036;
        int base_16 = 0x36;
        int base_2 = 0b11;

        /*
         * 定义 byte int short long
         * 整数默认是 int
         */
        byte num_byte = 126;          // 隐式转换
        short num_short = 129;        // 隐式转换
        int num_int = 129;            // ------
        long num_long = 12345678910L; // 超过范围需显示声明

    }
}

2.4.3 浮点类型

在这里插入图片描述

float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。
也可以在浮点数值后添加后缀D或者d, 以明确其为double类型。

public class FloatDemo {
   
    public static void main(String[] args) {
   
        /*
         * 浮点类型的两种表现形式
         * - 十进制形式
         * - 科学计数法形式
         */
        double num_base10 = 3.1415926;
        double num_science = 31415926E-7;

        /* 
         * 浮点类型的定义
         * 注意: 浮点类型默认是 double 类型的, float需要加 f or F
         */
        float num_float = 3.1415926F;
        double num_double = 3.1415926;
    }
}

2.4.4 字符类型

char为字符类型,在内存中占2个字节

char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。

public class CharDemo {
   
    public static void main(String[] args) {
   
        /*
         * 定义字符变量
         */
        char ch1 = '梦';

        /*
         * char类型字符的本质: 整数
         * char类型我们看到的样子就是它本身的字面常量,但是底层在进行计算的时候,
         * 实际上是按照一个码进行计算的。这个码就是ASCII(Unicode兼容了ASCII码,Unicode的前128位置ASCII)
         */
        char ch2 = '2' + 2;
        System.out.println("ch2 = " + ch2); // 4  输出的是 50+2 即ascll码为52对应的unicode字符
        System.out.println("'2' + 2 = " + ('2' + 2)); // 52
    }
}

2.4.5 布尔类型

true

false

  • 在内存中占一位
  • 不能以 0,1代替
public class BooleanDemo {
   
    public static void main(String[] args) {
   
        /*
         * true 真 false 假 
         */
        boolean b1 = true;
        boolean b2 = false;
    }
}

2.4.6 类型转换

转换形式:

  • 自动类型转换
  • 强制类型转换
public class ConvertDemo {
   
    public static void main(String[] args) {
   
        /*
         * 类型级别:(按数据类型范围从低到高的)
         * byte--->short--->char-->int--->long--->float--->double
         * - 自动类型转换 低级别 --> 高级别
         * - 强制类型转换 高级别 --> 低级别
         */
        int num1 = (int)6.5; // 6  强制类型转换
        System.out.println("num1 = " + num1);
        double num2 = 6;    // 6.0 自动类型转换
        System.out.println("num2 = " + num2);

        /*
         *  当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的那个类型,然后
         *  其余的类型都转换为当前表达式中级别最高的类型进行计算。
         */
        double num3 = 12+1294L+8.5F+3.81+'a'; //12.0+1294.0+8.5+3.81+97.0
        System.out.println("num3 = " + num3);
    }
}

2.5 运算符

算术运算符 关系运算符 赋值运算符 逻辑运算符 条件运算符

参考资料:

Java运算符

运算符优先级

2.5.1 算术运算符

public class ArithmeticOperatorDemo {
   
    public static void main(String[] args) {
   
        /*
         * 基本 + - * / %
         * 注意 : 3/2 和 3/2.0的区别
         */
        System.out.println(2*3);    // 6
        System.out.println(3/2);    // 1
        System.out.println(3/2.0);  // 1.5
        System.out.println(12%5);   // 2
        System.out.println(12%5.0); // 2.0

        /*
         * 加/拼接 运算符 +
         */
        System.out.println(+5);   // 5  表示正数
        System.out.println(3+3);  // 6  相加
        System.out.println(3+'2');// 53 相加

        /*
         * 自增++/自减--
         * 运算规则:(--同理)
         * ++单独使用的时候,无论放在前还是后,都是加1操作
         * 将++参与到运算中:看++在前还是在后,
         * 如果++在后:先运算,后加1   如果++在前,先加1,后运算
         */
        int num1 = 5; num1++;
        System.out.println(num1);   // 6
        System.out.println(num1++); // 6
        System.out.println(++num1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值