zoukankan      html  css  js  c++  java
  • Day0 认识Java与变量类型

    字节码与虚拟机

    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);
            }
    

    数组排序

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

    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    Accept Xcode/iOS License to run git
    Public Key Retrieval is not allowed
    No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer
    HttpURLConnection调用Restful接口
    关于线程同步(7种同步方式)
    面试(初级)
    面试题(高级)
    RedisTemplate和StringRedisTemplate的区别 RedisTemplate几种序列化方式比较
    Redis 3.2.1集群 —— Redis-trib.rb工具详解(含原理)
    Redis 3.2.1集群 —— CLUSTER MEET ip port
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12343804.html
Copyright © 2011-2022 走看看