JAVA基础1

本文详细介绍Java环境的搭建步骤,包括JVM、JRE与JDK的区分,环境变量的配置,以及Java程序的基本运行流程。深入解析Java源文件的编译与执行过程,探讨数据类型、变量、运算符等基础语法,并介绍Java的垃圾回收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 安装java环境
    JVM:java虚拟机。安装了jvm可实现跨平台。
    JRE:包含java虚拟机和核心类库。有了jre,java程序就可以正常的运行起来。
    JDK:软件开发工具包。包含了程序运行时所需的工具和jre。
总之:只要安装了jdk即可。

2.运行程序
    一个程序在运行的时候有两个基本的指令就是java.exe和javac.exe
    javac.exe:功能是编译 具体解释:将一个.Java类型的文件经过转化(编译),得到一个.class文件的过程   具体操作:javac.exe xx.java-->yy.class
    java.exe:功能是运行。具体解释:运行得到的.class文件得到程序的结果。具体操作:java yy

3.配置环境变量
    目的:将一些文件的路径系统化,可直接调用文件名执行文件。

5注意:java的名字可以与类名一致,在一个.Java文件中可以存在多个类,但只能有一个主类被public修饰的,
    然后.java文件的名字如果跟类的名字一致,一定是和主类的名字一致。
    b:一个类对应一个.class文件。我们将.class文件成为字节码文件。

 

6Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,以保证JAVA程序的可移植性;(这是因为jvm,即java虚拟机做了调整)。

7char可以存一个英文字母,一个特殊字符,一个空格,一个汉字,一个转义字符。

8AVA字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示(Unicode是全球语言统一编码)。

9

public class A{
	public static void main(String[] args)
	{
		System.out.println('\u0061'); //一个Unicode字符
	}
}
输出:a

​
public class A{
	public static void main(String[] args)
	{
		char tmp=97;
		System.out.println(tmp);
		System.out.println((int)98);
	}
}
输出:
a
98

​
public class A{
	public static void main(String[] args)
	{
		boolean b=false;
		boolean a=true;
		System.out.println(a);
		System.out.println(b);
		
		Boolean a1=true;
		Boolean b1=false;
		System.out.println(a);
		System.out.println(b);
	}
}
输出:
true
false
true
false




​
​

10char(字符) byte(字节) bit(位)
     1char=2byte=16bit

11boolean类型不能转换成任何其他基本数据类型

12二进制以0b开头 八进制以0开头 十六进制以0x开头

13小数可以用科学计数法表示

14

public class A{
	public static void main(String[] args)
	{
		double a=3.14e4;
		System.out.println(a);

	}
}
输出:
31400.0

11变量其实是内存中的一小块区域,使用变量名来访问这块区域。因此,每一个

变量使用前必须先申请(声明),然后必须进行赋值(填充内容),才能使用。

12.逻辑运算符:! & | ^ || && (共6个)

13常用DOC命令

dir 列出当前目录下的文件以及文件夹(等价ls)

rd 删除目录

rd /s 递归的删除文件夹及里面所有的内容

del 删除文件

剪切文件 move 源文件 得到的文件 

exit 退出doc命令行

mspaint 开图画图

notepad 打开记事本

mkdir创建目录

14JAVA的发展史

一伙人在爪哇岛(英文名为java盛产香蕉和咖啡)开发嵌入式程序,开发出了最初的java,当时

给它命名为oak(橡树的意思),但是后来发现这个名字被占用了就改为java,1995

年1.0版JDK由sun公司正式对外公布,后来sun公司为oracle(甲骨文)收购。

 JAVA语言发展到四大块应用:JAVAME(嵌入式开发的一套API可以简写为J2ME后同,侵入式:比
    如手机、PDA、电视机顶盒和打印机)

JAVASE(JAVA基础,用于桌面应用程序开发c/s架构【c=client客户端,s=server服务器端

用于桌面应用,安全性比B/S高】),

JAVAEE(企业级应用开发,网页,【B/S架构】)ADK(A=Android)

API:应用程序编程接口

Android底层是Linux,Android app使用JAVA开发的。

C/S:

​ 优点:安全性高,可以独立于服务器

​ 缺点:每台机器都要安装客户端程序,不方便

B/C:

​ 优点: 在任何地方都可访问,范围广

​ 缺点:安全性差

15垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预。

16

1.如果类不是public修饰的 , 类名可以和源文件的名字不同,但是如果 类名是public修饰的,那源文件的名字必须和    类名相同
2. 一个源文件中可以有多个类
3. 一个源文件中至多只有一个用public修饰的类

17如果只有一个类,类名和文件名相同,它不被public修饰也可以运行,当文件名与类名不同时,也可以运行。

写public主要是为了避免一个文件中有多个类,但无法找到含有入口函数(main)的类。如果一个文件中有多个类,在编译该文件的时候,会产生多个.class文件。一般一个文件放一个类,这样好维护。修饰class只允许用public或不写修饰符(默认权限)。

18

java环境配置

环境配置的作用:1.自己用的工具需要java环境的支持 2.第三方工具需要java环境的支持

变量 值

JAVA_HOME JDK安装目录

PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

CLASSPATH[windows用CLASS_PATH] .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

 

java_home:jdk的安装目录

path:能够在任何地方调用bin目录下的命令

classpath:bin目录下的命令执行时需要用到某些jar包功能的支撑

 

javac : 将java源码编译成.class后缀的字节码

java: 执行字节码得到结果

注意:javac可以在任何目录执行java源文件

​ java命令最好在文件当前盘符下执行

19

同时编译多个源文件 javac 源文件1 [源文件2]... 

执行带package包的文件 java 包名.类名 (或 java 包名/类名)

 20

多个文件有相互依赖的关系时,比如A依赖于B类,B类依赖于C类 在编译时顺序随意

javac C.java B.java A.java

javadoc -d 要生成的文档的绝对路径\为该文档起名  前缀.java //生成javadoc文档命令

jar cvf 生成jar包的绝对路径\为该包起名.jar  要打包的内容 //jar打包为压缩文件命令

jar xvf 包名.jar //jar解包命令

21进制转换(未完且未掌握)

我的原博客地址:https://blog.youkuaiyun.com/myloveprogrmming/article/details/80554065

二进制转八进制: 1101---> 001,101 --->015 将二进制从右到左每三位拆开,转成十进制,再将十进制合并,开头加上0

二进制转十六进制:1101--->1×2º+0× 2¹+1× 2²+1× 2³=0xd

十六进制转二进制:0x34B--->3,4,11-->十六进制拆开,转二进制

22jdk用于开发调试运行java程序,jre用于运行java程序,安装的jdk中就有jre,jre是jdk的子集。src中存的是源码,

23public static void main(String[] args)  public,static是修饰符,修饰符的顺序可以是任意的。

String[] args,args是字符串数组名,可以改为别的

在d盘的java文件夹中写一个Test.java

24类中的数据成员,整型默认值为0,浮点型默认值为0.0,char为空格,boolean为false,引用类型为null

25main方法可以直接调用其所在public类的静态数据成员,省略了类名.变量名。

26基本数据类型的取值范围:例如int为4byte=32bit 其最大取值为2的31次方-1,因为最高位写1其他位写0,最高位为2的31次方,最小值为负的2的31次方;其他也是这个原理。

27大整型:import java.math.BigInteger

28定义long加L,定义float加f

29回车等于先按下回车(\r  ascii码为10)再换行(\n  ascii码为13)

30 \t 横向跳格 \r回车  \n换行  \' 单引号 \"双引号 \\反斜

31 16进制为0-9 A-F

32 自动转换顺序:
char 2 
byte 1 
short 2 
int 4 
long 8 
float 4 
double 8 

注:注:char型略有不同,如果找不到参数类型为char的函数,则直接将char提升至int

注:所有的位运算符,即:~ & | ^ << >> >>> 都是先将原码转化成补码进行运算,再将运算得到的补码转化为原码,再转化为十进制数输出的。

原码符号位用0表示正号,用1表示负号,数值一般用二进制形式表示

反码反码可由原码得到,正数的反码与原码一样;负数的反码是它原码除符号位,各位取反得到的。

补码补码可由原码得到,正数的补码与原码一样;负数的补码是它原码除符号位,各位取反并在末位加1。 

总结:
正数原码=反码=补码
负数反码=~原码(除符号位)、

         补码=~原码+1 即:补码=反码

 

public class A {

	public static void main(String[] args) {
		System.out.println(Integer.toBinaryString(-5));//打印的是补码
 // 注:计算机里的数都是补码形式,因为CPU只会做加法,数的补码形式就可以用加法实现减法运算,进而以加//法完成所有的运算。   
		
	}
}
输出:
11111111111111111111111111111011 不用想了肯定是32位
过程是这样的:
一个负数,比如-5,它的二进制在里面是这样表示(即原码) 
1000 0000 0000 0000 0000 0000 0000 0101 
反码是: 
1111 1111 1111 1111 1111 1111 1111 1010 
补码是:
1111 1111 1111 1111 1111 1111 1111 1011 
即得到打印的内容 


1~操作符(取反):对每个二进制位(包括符号位)的内容求反,即1变成0,0变成1

负数:
public class A {

	public static void main(String[] args) {
		int a=-5;
		int b=~a;
		System.out.println(b);
		
	}
}
输出:
4
过程:首先表示-5的补码
1111 1111 1111 1111 1111 1111 1111 1011
各位取反得到补码 
0000 0000 0000 0000 0000 0000 0000 0100
再将其转换为原码,因为这个数首位为0所以是整数,整数的原码等于补码,再将这个原码转化为 
转为10进制得到4 
正数:
public class A {

	public static void main(String[] args) {
		int a=5;
		int b=~a;
		System.out.println(b);
		
	}
}
输出:
-6
5的原码:
0000 0000 0000 0000 0000 0000 0000 0101
因为正数的原码等于补码,所以现在对补码取反得到补码: 
1111 1111 1111 1111 1111 1111 1111 1010 
这是一个负数的补码,已知负数的补码,如何快速求其原码?
方法:从该补码左右两端起找第一个出现的1,然后将中间夹的数取反,其余不变,所得到的就是补码。
即:
1000 0000 0000 0000 0000 0000 0000 0110
将这个原码转化为十进制数就是-6

2&操作符:对应的二进制位进行与操作,两个都为1才为1,其他情况均为0。

正数:
public class A {

	public static void main(String[] args) {

		System.out.println(5&6);
		
	}
}
输出:
4
5的补码:       0000 0000 0000 0000 0000 0000 0000 0101 
6的补码:       0000 0000 0000 0000 0000 0000 0000 0110
进行&得到的补码  0000 0000 0000 0000 0000 0000 0000 0100
因为是正数所以原码等于补码,再将这个原码转化为十进制数得到:
2**2=4

负数:
public class A {

	public static void main(String[] args) {

		System.out.println(-5&6);
		
	}
}
输出:
2

-5的补码:  1111 1111 1111 1111 1111 1111 1111 1011
 6的补码:  0000 0000 0000 0000 0000 0000 0000 0110
&得到的补码 0000 0000 0000 0000 0000 0000 0000 0010
正数的原码等于补码,再将该原码转化为十进制数为:
2**1=2

3|操作符:只要有一个1就是1,思路同&

4^操作符:相同为0,不同为1,思路同&

5<<操作符:左边移动,右边填充0(自己瞎理解:因为空出来的不是符号位,所以没那么特殊就填0玩吧)

正数:
public class A {

	public static void main(String[] args) {

		System.out.println(2<<3);
		
	}
}
输出:
16

过程:
2的原码:
0000 0000 0000 0000 0000 0000 0000 0010
它的补码等于原码,再将补码左移3位,右端补0得到它的补码:
0000 0000 0000 0000 0000 0000 0001 0000
因为是正数所以得到它的原码,再将原码转化为十进制数:
2**4=16

 

负数:
public class A {

	public static void main(String[] args) {

		System.out.println(-5<<2);
		
	}
}
输出:
-20
过程:
-5的补码:                 1111 1111 1111 1111 1111 1111 1111 1011
左右2位,右端补0,得到补码   1111 1111 1111 1111 1111 1111 1110 1100
这是一个负数的补码,将其转化为原码为:
                          1000 0000 0000 0000 0000 0000 0001 0100
将这个原码转化为十进制数为:-(2**4+2**2)=-20

6>>操作符:右移,正数左边补0,负数左边补1 (自己瞎想的:因为是和符号位相关嘛,所以按符号补)

正数:
public class A {

	public static void main(String[] args) {

		System.out.println(5>>1);
		
	}
}
输出:
2
5的补码:               0000 0000 0000 0000 0000 0000 0000 0101 
进行 >>1 操作得到的补码:0000 0000 0000 0000 0000 0000 0000 0010
将其转化为原码再转换为十进制数为 2**1=2
 
负数:
public class A {

	public static void main(String[] args) {

		System.out.println(-5>>1);
		
	}
}
输出:
-3
过程:
-5的补码为:            1111 1111 1111 1111 1111 1111 1111 1011 
进行 >>1 操作得到的补码:1111 1111 1111 1111 1111 1111 1111 1101
将其转化为原码为         1000 0000 0000 0000 0000 0000 0000 0011
将其转外为十进制数为 -(2**0+2**1)=-3

7>>> 操作符,无符号右移,不管正负通通补0(因为无符号嘛)

public class A {

	public static void main(String[] args) {

		System.out.println(5>>>1);
		
	}
}
输出:
2
过程:
5的补码等于原码等于:      0000 0000 0000 0000 0000 0000 0000 0101 
进行 >>>1 操作得到的补码,因而得到原码:0000 0000 0000 0000 0000 0000 0000 0010 
转化成十进制数为2
public class A {

	public static void main(String[] args) {

		System.out.println(-5>>>1);
		
	}
}
输出:
2147483645
过程:
-5的原码:      1111 1111 1111 1111 1111 1111 1111 1101 
进行 >>>1 操作得到的补码,进而得到原码:0111 1111 1111 1111 1111 1111 1111 1101 
转化为十进制数就是这个

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值