字节码与虚拟机

Java介于编译型语言和解释型语言之间。编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。

Java bin文件夹下的可执行文件

java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;

javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾)

jar:用于把一组.class文件打包成一个.jar文件,便于发布;

javadoc:用于从Java源码中自动提取注释并生成文档;

jdb:Java调试器,用于开发阶段的运行调试。

第一个程序

public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}

Hello为类名,大小写敏感,main为方法名,Java规定,某个类定义的public static void main(String[] args)是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。

当我们把代码保存为文件时,文件名必须是Hello.java,而且文件名也要注意大小写,因为要和我们定义的类名Hello完全保持一致。一个Java源码只能定义一个public类型的class

Java程序如何运行

我们编写完 Hello.java文件后,javac把源码文件转换为字节码文件Hello.class,然后在虚拟机上跑。

final

final 常量不能改变 方法不能重写 类不能继承

变量类型

java有两种变量类型为:基本类型和引用类型

引用类型有四种:强,软,弱,虚,依次减弱(看链接里的文章):https://www.cnblogs.com/liyutian/p/9690974.html

利用引用类型的区分,达到回收内存和利用内存,

1.强引用不会被回收,

2.在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常

3.而无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。

4.虚引用随时会被回收,必须和引用队列一起使用,程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动

以下为基本类型

计算机内存的最小存储单元是字节(byte)

下图是占用字节数

char占2字节

short占2字节

int占4字节

long占8字节

float占4字节

double占8字节

byte:-128 ~ 127

short: -32768 ~ 32767

int: -2147483648 ~ 2147483647

long: -9223372036854775808 ~ 9223372036854775807

Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符,所以能输出中文。

char zh = '中';

常量

final double PI = 3.14; // PI是一个常量

var

var sb = new StringBuilder();等于StringBuilder sb = new StringBuilder();

编译器在编译时会自动修改

引用的作用

把引用理解成C++中的指针,是指向一块内存区的,比如string S就是引用

public class Main {
public static void main(String[] args) {
String s = "hello";
String t = s;
s = "world";
System.out.println(t); // t是"hello"还是"world"?
}
}

输出 的是原先S“hello”。S指向“hello"对应的内存,然后t也指向其,然后s被指向了新值”world“,并不影响t

判断引用类型相等 == 与 equals()

==表示“引用是否相等”,或者说,是否指向同一个对象。即使两个应用变量各自指向的地址存储的是相同的内容,但是地址不一样,并不等于。

要判断引用类型的变量内容是否相等,必须使用equals()方法

string s1="hello";
string s2 ="HELLO".toLowCase();//如果直接赋予"hello",则s1==s2为真
s1.equals(s2);//为真

如果与NULL相比较,则会报错NullPointerException,为避免该错误需要进行!=null判断

占位符与格式化输出

%d 格式化输出整数

%x 格式化输出十六进制整数

%f 格式化输出浮点数

%e 格式化输出科学计数法表示的浮点数

%s 格式化字符串

数组遍历

既可以使用i++ 也可以如下的for each

        int[] ns = { 1, 4, 9, 16, 25 };
for (int n : ns) {
System.out.println(n);
}

数组排序

对数组排序实际上修改了数组本身。

但是如果对字符串数组排序吗,并灭有修改数组本身,而是数组的每个元素指向变化了

Day0 认识Java与变量类型的更多相关文章

  1. Java 4- Java 变量类型

    Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ...

  2. java入门---变量类型&类变量&局部变量&实例变量&静态变量

        在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下:     type identifier [ = value][, identifier [= value] ...] ; ...

  3. Java的变量类型

    以下内容引用自http://wiki.jikexueyuan.com/project/java/variable-types.html: 一个变量提供了程序可以操作的命名存储.Java中的每个变量都有 ...

  4. Java学习——变量类型

    Java有3类变量 局部变量 成员变量(实例变量) 类变量(静态变量) 局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变 ...

  5. 一、JAVA变量类型:①类变量与实例变量的异同点

    在JAVA中,变量使用前必须声明,格式如下: int a; //单个变量声明 int b, c, d; //多个变量一起声明 int e = 1, f = 2, g = 3; //声明时同时赋值(初始 ...

  6. java基础(四) -变量类型

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identifier [= value] ...] ; 格式说明:ty ...

  7. A02-java学习-classpath配置-标识符-java变量类型

    学习 1, classpath的配置和使用 2, java的标识符命名规则和命名规范 3, 字符编码 4, java的变量类型 5, 程序的入口main方法解释

  8. Java-Runoob:Java 变量类型

    ylbtech-Java-Runoob:Java 变量类型 1.返回顶部 1. Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifie ...

  9. Java入门 - 语言基础 - 06.变量类型

    原文地址:http://www.work100.net/training/java-variable-type.html 更多教程:光束云 - 免费课程 变量类型 序号 文内章节 视频 1 概述 2 ...

随机推荐

  1. [CF235A] LCM Challenge - 贪心

    找到3个不超过n的正整数(可以相同),使得它们的lcm(最小公倍数)最大. Solution 可以做得很优雅吧,但我喜欢(只会)暴力一点 根据质数密度分布性质,最后所取的这三个数一定不会比 \(n\) ...

  2. [POI2010] GRA-The Minima Game - 贪心,dp,博弈论

    给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的 ...

  3. gogs迁移至gitlab

    一.先来聊一聊迁移的思路,不管是gogs迁移至gitlab,还是gitlab迁移至gogs,亦或gitlab迁移至gitlab,手动迁移的步骤都是如下图所示(在gitlab上新建一个空项目就会有这样的 ...

  4. 题解 P5733 【【深基6.例1】自动修正】

    题目传送门 分析: 1.这道题可以说是一个字符串的练习好题.我们先来了解一下字符串.在这道题中,建议使用\(string\) \(string\)是\(C++\).\(java\).\(VB\)等编程 ...

  5. AntDesign(React)学习-1 创建环境

    目录: AntDesign(React)学习-15 组件定义.connect.interface AntDesign(React)学习-14 使用UMI提供的antd模板 AntDesign(Reac ...

  6. centos7下编译安装redis5.05

    准备环境: 1.一台centos7机器,配置没有什么要求(能联网) 2.下载好redis压缩包 下载redis包: 1.登录redis官网: https://redis.io/download 2.选 ...

  7. 高通量计算框架HTCondor(六)——拾遗

    目录 1. 正文 1.1. 一些问题 1.2. 使用建议 2. 相关 1. 正文 1.1. 一些问题 如果真正要将HTCondor高通量计算产品化还需要很多工作要做,HTCondor并没有GUI界面, ...

  8. php中普通类 接口类 抽象类 浅谈

    一.普通类 1.关键词:class  类名,继承关键字extends 2.继承:只能实现单继承, 3.多态:子类继承可以实现多种功能 4.封装:类有权限机制,私有的只能自己用,受保护的可以被继承,子类 ...

  9. 在多租户(容器)数据库中如何创建PDB:方法6 DBCA本地克隆PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:DBCA静默本地克隆PDB.根据 CDB1 中的 PDB1 克隆出 CDB1 中的 PDB_CLONE 对应路径:Creating ...

  10. django 搭建一个投票类网站(三)

    之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...