2021-11-12(基础不行,重新学啊)

本文介绍了Java的基础知识,包括JDK的结构和作用,如何编写并运行第一个Java程序,详细解析了Java程序的执行步骤。此外,还详细讲解了Java的数据类型,包括基本数据类型及其范围,以及数据类型的使用规则。文章最后提到了变量、存储区域和对象在内存中的分配,如栈、堆和静态存储区的角色。
摘要由CSDN通过智能技术生成
java基础

path环境配置的用处:任何路径下都能使用path路径下的文件或程序。

一、jdk的结构及作用

  1. jdk是java开发工具包.包含编译、打包、运行、生成文档,监控等工具,他们存在Bin目录下,
  2. 与java程序相关的环境,jre主要包含两个部分,一个是JVM,另一个是api的库文件

二、基于jdk的第一个程序

  • ​ 纯手打,不使用开发工具。类的名称:首字母大写,驼峰命名法(单词首字母大写)
public class HelloWorld{
	
	public static void main(String args[]){
	Systen.out.print("Hello world");
	}
	
}
  • 编译文件。jre只能执行字节码文件,把上面的源文件中的源代码用jdk的编译器转换为字节码文件,工具是javac.exe,生成文件名与原文件同名,扩展名为.class.

  • 允许java程序

    把医生生产的字节码文件交给jvm程序执行,执行文件用到的工具是 java.exe

三、java程序的执行步骤

  1. 运行java程序的计算机的层次结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7Tvq8Ar-1636711050540)(C:\Users\Allen\AppData\Roaming\Typora\typora-user-images\image-20211112104954408.png)]

  2. java程序的执行步骤

    1. 编写源代码
    2. 编译源代码,生成字节码文件
    3. 执行字节码,产生结果
  3. java语言的基本特征

    • 面向对象,在于java程序是 以类为基本单元,所有的代码都写在类中,类需要转化为对象才能执行。
    • 跨平台,同意分字节码可以在不同的操作系统下执行,因为不同的操作系统都有自己的jvm,jvm会把字节码转化为不同操作系统所能识别的机器码。这是java区别与其他语言的显著特征。
    • 多线程,一个程序可以在多个CPU上同时执行,大大提高了程序的执行效率。
  4. 书写java类文件的基本规则

    • 类名首字母大写,文件名与类名相同。
    • 在一个文件中至少要有一个类,如果一个文件中有多个类,与文件名相同的类必须是public类,其他的类可以另外命名。
    • 在一个java项目中,至少要有一个main方法public static void main(String args[]){},他是整个应用程序的入口,jvm加载字节码后会调用并执行该方法。
    • java项目的功能实现都是通过main 方法,并在main方法中调用其他方法启动线程来实现
  5. java

    一、创建一个空的工程

    二、创建一个java项目

    三、建包,包可以管理类,也可以划分访问权限,每个包对应一个磁盘上的目录

    四、包下创建类文件(.java)

    五、Java中的数据类型

    1. 数据类型的分类

      1、基本数据类型(简单),共八个

      参数的基本类型数据范围可以通过类型的包装类中的常量来获得

      byte字节类型,八位二进制数-128~127
      short短整型,两个字节,十六位二进制数-32768~32767
      int整型,四个字节,八位二进制数-2147483648~2147483647
      long长整型,八个字节,六十二位二进制数-9223372036854775808~9223372036854775807
      char字符类型,用unicode编码表示一个字符,一个字符两个字节从 ~
      float1.4E-453.4028235E38
      double双精度小数4.9E-324~1.7976931348623157E308
      boolean布尔类型,逻辑值flase和true(默认是flase)

      String 不是基本数据类型,是引用类型*

      语法糖:psvm mian方法 sout 输出

    2. 引用数据类型(复杂)

      分为类,接口,枚举,注解

      注解https://baike.baidu.com/item/%E6%B3%A8%E8%A7%A3/22344968?fr=aladdin

      @Override限定父类重写方法
      @Deprecated标示已过时
      @SuppressWarnings抑制编译器警告
      @SafeVarargs堆污染”警告
      @FunctionalInterface函数式接口
      定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。
      
      
    3. 数组

    4. 其他、BigDecimal 金融数字类型

    六、基本数据类型在程序中的使用

    1. 直接量

      直接写在代码中的特定数据类型的数值

    2. 变量

      它在程序中用来表示一份数据,该数据可以是任何类型

      变量有名称,变量名也是标识符,也需要符合命名规则

      变量可以为空(null)当前不表示任何数据

      变量可以复制(=),可以参与运算,可以表示一个对象等。

      变量在使用前必须声明数据类型,在java中每个变量都有明确的数据类型并且不能改变。

      字符类型(两个字节)与整数可以相互赋值、但是不能与short直接赋值,因为有正负号的区别

    3. 1

  6. 基本数据类型在程序中的使用

    标识符不能是关键字、标识符不能以数字开头、

其他:利用split(分裂)把字符串按照指定的分割符进行分割,然后返回字符串数组

  String E="JAVA!";
  String[] str=E.split("");
for (int i=0;i<E.length();i++){
    System.out.println(str[i]);
}

成员变量:
写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量)
成员变量只能通过对象来访问
注意: 成员变量不能离开类, 离开类之后就不是成员变量 成员变量不能在定义的同时进行初始化
存储: 堆(当前对象对应的堆的存储空间中)
存储在堆中的数据, 不会被自动释放, 只能程序员手动释放

全局变量:
写在函数和大括号外部的变量, 我们称之为全局变量
作用域: 从定义的那一行开始, 一直到文件末尾
全局变量可以先定义在初始化, 也可以定义的同时初始化
存储: 静态区
程序一启动就会分配存储空间, 直到程序结束才会释放

局部变量:
写在函数或者代码块中的变量, 我们称之为局部变量
作用域: 从定义的那一行开始, 一直到遇到大括号或者return
局部变量可以先定义再初始化, 也可以定义的同时初始化
存储 : 栈
存储在栈中的数据有一个特点, 系统会自动给我们释放

堆,栈,静态代码区(常量区)

在Java中,六个地方存储数据:

  1. 寄存器register:
    最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制

    最快的存储区(由编译器根据需求分配,无法从程序中控制)
    位于处理器内部、 数量有限

  2. 栈sack
    存放基本类型的变量数据和对象,数组的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)

    速度仅次于寄存器
    通过它的“栈指针”从处理器获得支持;
    栈指针向下移动,分配新内存;向上,释放内存;
    这一约束限制了程序的灵活性:创建程序时,JAVA编译器必须知道存储在栈内所有数据的确切大小和生命周期,生成相应代码,以便上下移动栈指针;因此某些JAVA数据存储在栈中,而JAVA对象不存储在其中
    位于通用RAM中
    (RAM,random access memory随机存取存储器),与CPU直接交换数据的内部存储器,也叫主存(内存)。随时读写,速度很快,通常作为临时数据存储媒介)

  3. 堆heap
    存放所有new出来的对象

    位于通用RAM中,用来存放所有的JAVA对象
    不同于栈的好处:不需要知道存储数据分配多少区域以及生命周期,有很大的灵活性
    需要创建一个对象时,只需new一行代码,执行这行代码,会自动在堆里进行存储分配
    为这种灵活性付出相应代码,用堆进行存储分配比用栈进行存储需要更多的时间

  4. 静态存储static storage
    存放静态成员(static定义的)

    静态是指“在固定的位置”、 静态存储里存放程序运行时一直存在的数据
    可用关键字static来标识一个对象的特定元素是静态的
    但JAVA对象本身从来不会存放在静态存储空间里

  5. 常量存储constant storage
    存放字符串常量和基本类型常量(public static final)

    常量值通常直接存放在程序代码内部
    有时在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中
    (ROM,Read Only Memory,只读内存。一种只能读出事先所存数据的固态半导体存储器,它相当于PC机上的硬盘,用来存储和保存数据。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM就不会。)

  6. 非RAM存储
    硬盘等永久存储空间

    如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

整体速度比较:
寄存器 < 栈 < 堆 < 其他
栈和常量池中的对象可以共享,对于堆中的对象不可以共享
栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值