Day02 从0开始第一个java程序

从0开始第一个java程序

java的特性与优势

  • 简单性-没有指针,内存管理
  • 面向对象-模拟人的思维
  • 可移植性-虚拟机的存在
  • 高性能-即时编译
  • 分布式
  • 动态性-反射
  • 多线程
  • 安全性-异常捕获,内存检查

JDK,JRE,JVM

  • JDK:java development kit

  • JRE:java runtime envirment

  • jvm:java virtual machine

    jdk包含jre和jvm;

    使用jdk即可进行java开发

    使用jre即可运行java程序;

    jvm用于实现跨平台

三者示意图

安装开发环境

卸载原环境

  • 删除jdk目录
  • 删除环境变量(java_home和path中的java相关变量)
  • 打开cmd,输入java -version检验

安装新环境

  • 下载jdk1.8,记住路径D:\Envirment\JAVA\jdk1.8

  • 配置环境变量

    • 系统变量--->JAVA_HOME = D:\Envirment\JAVA\jdk1.8
    • PATH变量--->增加值:%JAVA_HOME%\bin
    • PATH变量--->增加值:%JAVA_HOME%\jre
  • 打开cmd,输入java -version检验

第一个hello world

  • 新建一个文件夹存放代码

  • 新建Hello.java文件

  • 在文件中创建一个Hello类,打印helloworld

  • 在该路径下输入cmd,进入命令提示符

  • 输入javac Hello.java,发现生成了class文件

  • 接着输入java Hello,成功打印

    示例图

编译型和解释型

  • 编译型=将看不懂的书一次性全部翻译能看懂的语言

  • 解释型=请翻译官逐句进行即时翻译

    优劣

    编译型:由于是一次性编译无限次执行的,这样做效率很高,速度快,但是如过原程序有更新,则需要重新编译;其次,不同的操作系统编译器不同,导致跨平台性不强

    解释型:不需要编译,边运行边使用解释器解释为机器码,这就导致速度偏慢,不同平台的解释器都能将源代码解释为相同的机器码,这就使得他的跨平台性很强

java的编译和解释

​ Java即有编译型的部分,也有解释型的部分。

java运行机制

首先,编译器将编写好的java文件一次性编译为类(class)文件,然后经由虚拟机的类装载器加载进jvm,再通过代码校验,最后解释器进行解释执行

JAVA基础

数据类型

//八大基本数据类型
/*byte占1个字节*/
byte num1 =  127;
/*short占2个字节*/
short num2 = 1270;
/*int占4个字节*/
int num3 = 12700;
/*long占8个字节*/
long num4 = 1270000;

/*float占4个字节*/
float num5 = 127f;
/*double占8个字节*/
double num6 = 127d;

/*char占2个字节*/
char char1 = 'a';

/*boolean占1个位*/
boolean bool1 =  true;

1位=1bit
1个字节=1byte
1Byte=8bit
1KB=1024Byte
1MB=1024KB

基本类型拓展

//基本数据类型扩展
//1.整数 十进制 八进制 十六进制
int a = 10;
int b = 010;
int c = 0x10;
System.out.println(a);
System.out.println(b);//8
System.out.println(c);//16

System.out.println("=============");

//2.浮点数在运算与比较时的情况
//可以看到在浮点数进行大型数据计算时会出现错误,浮点数是离散的
//BigDecimal 进行计算
//应避免浮点数运算与比较!!!!
//应避免浮点数运算与比较!!!!
//应避免浮点数运算与比较!!!!
float f1 = 1232323232323f;
float f2 = f1 + 1;
System.out.println(f2==f1);//ture

double d1 = 0.1;
double d2 = 1/10;
System.out.println(d1);
System.out.println(d2);
System.out.println(d1==d2);//false

double d3 = 0.1d;
float f3 = 1f/10f;
System.out.println(d3);
System.out.println(f3);
System.out.println(d3==f3);//false


System.out.println("=============");
//3.字符拓展
//unicode编码 2字节 65536 2的16次方
char c1 = 'a';
char c2 = '中';
char c3 = '∑';
System.out.println(c1);//97
System.out.println(c2);//20013
System.out.println(c3);//8721
System.out.println((int)c1);
System.out.println((int)c2);
System.out.println((int)c3);
System.out.println("=============");

//4.转义字符
System.out.println("hello\nworld");//换行
System.out.println("hello\rworld");//回车
System.out.println("hello\fworld");//换页
System.out.println("hello\tworld");//tab键

类型转换

由于java是强制性语言,每个类型运算前必须转换为同一类型

  • 强制类型转换:高--》低转换。会造成精度损失和内存溢出。

  • 自动类型转换:低--》高转换。

    //高-》低 强制转换
    int i = 128;
    byte b = (byte)i;
    System.out.println(b);//-128 内存溢出
    
    //低-》高 自动转换
    byte b1 = 127;
    int i1 = b1;
    System.out.println(i1);//127
    
    //操作大数据时,注意内存溢出
    int a = 20_0000_0000;
    int b = 10;
    System.out.println(a*b);//-1474836480 内存溢出了
    //将其中一个转为long,再用long接受,内存就不溢出了
    long l1 = a*(long)b;
    System.out.println(l1);//20000000000
    

变量

  • 类变量

  • 实例变量

  • 局部变量

    //1.类变量 在整个类中可以使用(在类加载时加载)
    static String sex = "";
    
    //2.实例变量 在整个类中可以使用
    //boolean  默认为false
    //除了基本数据类型,其他默认都为null
    String name;
    private int age;
    
    public static void main(String[] args) {
    //3.局部变量 在方法内部使用
    int a = 10;
    //变量类型
    Demo08 demo08 = new Demo08();
    System.out.println(demo08.age);
    

运算符

image-20250521211121697

  • 位运算符:左移一位*2,右移一位/2,效率很高

  • 短路:&&运算符前者为false,后者直接跳过

scanner类

scanner类可以实现人机之间的交互

//创建一个扫描器对象,用来捕获键盘输入
Scanner sc = new Scanner(System.in);
System.out.println("使用键盘输入:");
//如果有输入
if (sc.hasNext()) {
    //打印输入的字符
    System.out.println("您的输入为:"+sc.next());
}
//io流使用完必须关掉,节省资源
//io流使用完必须关掉,节省资源
//io流使用完必须关掉,节省资源
sc.close();
//hasNext()不能获得输入空格后的字符 hasNextLine()不能获得输入回车后的字符
posted @ 2025-05-21 21:23  x学生  阅读(16)  评论(0)    收藏  举报