path环境配置的用处:任何路径下都能使用path路径下的文件或程序。
一、jdk的结构及作用
- jdk是java开发工具包.包含编译、打包、运行、生成文档,监控等工具,他们存在Bin目录下,
- 与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程序的执行步骤
-
运行java程序的计算机的层次结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7Tvq8Ar-1636711050540)(C:UsersAllenAppDataRoamingTyporatypora-user-imagesimage-20211112104954408.png)]
-
java程序的执行步骤
- 编写源代码
- 编译源代码,生成字节码文件
- 执行字节码,产生结果
-
java语言的基本特征
- 面向对象,在于java程序是 以类为基本单元,所有的代码都写在类中,类需要转化为对象才能执行。
- 跨平台,同意分字节码可以在不同的 *** 作系统下执行,因为不同的 *** 作系统都有自己的jvm,jvm会把字节码转化为不同 *** 作系统所能识别的机器码。这是java区别与其他语言的显著特征。
- 多线程,一个程序可以在多个CPU上同时执行,大大提高了程序的执行效率。
-
书写java类文件的基本规则
- 类名首字母大写,文件名与类名相同。
- 在一个文件中至少要有一个类,如果一个文件中有多个类,与文件名相同的类必须是public类,其他的类可以另外命名。
- 在一个java项目中,至少要有一个main方法public static void main(String args[]){},他是整个应用程序的入口,jvm加载字节码后会调用并执行该方法。
- java项目的功能实现都是通过main 方法,并在main方法中调用其他方法启动线程来实现
-
java
一、创建一个空的工程
二、创建一个java项目
三、建包,包可以管理类,也可以划分访问权限,每个包对应一个磁盘上的目录
四、包下创建类文件(.java)
五、Java中的数据类型
-
数据类型的分类
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 输出
-
引用数据类型(复杂)
分为类,接口,枚举,注解
注解https://baike.baidu.com/item/%E6%B3%A8%E8%A7%A3/22344968?fr=aladdin
@Override 限定父类重写方法 @Deprecated标示已过时 @SuppressWarnings抑制编译器警告 @SafeVarargs堆污染”警告 @FunctionalInterface函数式接口 定义枚举类型时我们使用的关键字是enum,与class关键字类似,只不过前者是定义枚举类型,后者是定义类类型。
-
数组
-
其他、BigDecimal 金融数字类型
六、基本数据类型在程序中的使用
-
直接量
直接写在代码中的特定数据类型的数值
-
它在程序中用来表示一份数据,该数据可以是任何类型
变量有名称,变量名也是标识符,也需要符合命名规则
变量可以为空(null)当前不表示任何数据
变量可以复制(=),可以参与运算,可以表示一个对象等。
变量在使用前必须声明数据类型,在java中每个变量都有明确的数据类型并且不能改变。
字符类型(两个字节)与整数可以相互赋值、但是不能与short直接赋值,因为有正负号的区别
-
1
-
-
基本数据类型在程序中的使用
标识符不能是关键字、标识符不能以数字开头、
其他:利用split(分裂)把字符串按照指定的分割符进行分割,然后返回字符串数组
String E="JAVA!"; String[] str=E.split(""); for (int i=0;i成员变量:
写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量)
成员变量只能通过对象来访问
注意: 成员变量不能离开类, 离开类之后就不是成员变量 成员变量不能在定义的同时进行初始化
存储: 堆(当前对象对应的堆的存储空间中)
存储在堆中的数据, 不会被自动释放, 只能程序员手动释放全局变量:
写在函数和大括号外部的变量, 我们称之为全局变量
作用域: 从定义的那一行开始, 一直到文件末尾
全局变量可以先定义在初始化, 也可以定义的同时初始化
存储: 静态区
程序一启动就会分配存储空间, 直到程序结束才会释放局部变量:
写在函数或者代码块中的变量, 我们称之为局部变量
作用域: 从定义的那一行开始, 一直到遇到大括号或者return
局部变量可以先定义再初始化, 也可以定义的同时初始化
存储 : 栈
存储在栈中的数据有一个特点, 系统会自动给我们释放堆,栈,静态代码区(常量区)
在Java中,六个地方存储数据:
寄存器register:
最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制最快的存储区(由编译器根据需求分配,无法从程序中控制)
位于处理器内部、 数量有限栈sack:
存放基本类型的变量数据和对象,数组的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)速度仅次于寄存器
通过它的“栈指针”从处理器获得支持;
栈指针向下移动,分配新内存;向上,释放内存;
这一约束限制了程序的灵活性:创建程序时,JAVA编译器必须知道存储在栈内所有数据的确切大小和生命周期,生成相应代码,以便上下移动栈指针;因此某些JAVA数据存储在栈中,而JAVA对象不存储在其中
位于通用RAM中
(RAM,random access memory随机存取存储器),与CPU直接交换数据的内部存储器,也叫主存(内存)。随时读写,速度很快,通常作为临时数据存储媒介)堆heap
存放所有new出来的对象位于通用RAM中,用来存放所有的JAVA对象
不同于栈的好处:不需要知道存储数据分配多少区域以及生命周期,有很大的灵活性
需要创建一个对象时,只需new一行代码,执行这行代码,会自动在堆里进行存储分配
为这种灵活性付出相应代码,用堆进行存储分配比用栈进行存储需要更多的时间静态存储static storage
存放静态成员(static定义的)静态是指“在固定的位置”、 静态存储里存放程序运行时一直存在的数据
可用关键字static来标识一个对象的特定元素是静态的
但JAVA对象本身从来不会存放在静态存储空间里常量存储constant storage
存放字符串常量和基本类型常量(public static final)常量值通常直接存放在程序代码内部
有时在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中
(ROM,Read only Memory,只读内存。一种只能读出事先所存数据的固态半导体存储器,它相当于PC机上的硬盘,用来存储和保存数据。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM就不会。)非RAM存储
硬盘等永久存储空间如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
整体速度比较:
寄存器 < 栈 < 堆 < 其他
栈和常量池中的对象可以共享,对于堆中的对象不可以共享
栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)