黑马程序员_java基础(1) JDK汇总&变量与运算

本文详细介绍了 Java 开发工具包 JDK 的组成部分及其配置方法,对比了 JDK、JRE 和 JVM 的区别,并深入探讨了 JDK 中的关键字、标识符、变量、常量以及各种运算符的使用。

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

------- android培训 java培训 、期待与您交流! ----------

一.JAVA JDK 汇总

   jdk 与 jre 区别:
      jre:包含jvm(JVM Java Virtual Machine)  和 java 程序核心库,java 运行环境,相当于一台操作系统,面向java程序
      使用者,而不是开发者
      jdk: 提供给java开发人员使用,包含用java程序开发的JDK工具,也包含JRE 运行环境,开发工具,如:javac.exe,
      jre.exe 等  且实现java 程序都放在\lib\tools.jar包中
      jvm:java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,
      这种类文件可 以在虚拟机上执行,也就是说class并不直接 与机器的操作系统相对应,而是经过虚拟机间接与操
      作系统交互,由虚拟机将程序解释给本地系统执行,JDK包含JRE,JRE包含JVM。bin主要是编译器与JVM 交互
      用的头文件lib.

     jdk 配置
   系统环境 :windows  系统属性高级环境变量设置,新增三个系统属性变量 JAVA_HOME,PATH,CLASSPATH
                                   JAVA_HOME=c:\Program Files\Java\jdk1.6.0_02
                                   PATH = %JAVA_HOMEE%\bin                            
                                   CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
                      Linux     gedit  ~/.bashrc
                                   加入信息 :  
                                   JAVA_HOME=/usr/java/jdk1.6.0_02
                                   JAVA_BIN=/usr/java/jdk1.6.0_02
                                   PATH=$PATH:$JAVA_HOME/bin
                                   CLASSPATH=.:$JAVA_HOME/bin
                                   export JAVA_HOME JAVA_BIN PATH CLASSPATH                               
  class 文件 在 JRE 运行过程
  
-------------------------------------------------------------------------------------------------------------------------

二.JDK 常用命令

    javac.exe  java编译器,java 源代码转换成java字节码
    java.exe java 解释器,解释并执行 java应用程序字节码文件
    appletivewer.exe Applet程序浏览器,执行HTML文件上的java小应用程序
    javadoc.exe 根据java源码及说明语句生成HTML格式的注释文档
    jdb.exe java  调试器,设置断点和检查变量
    javap.exe  java反编译器
    jar.exe 压缩工具
    native2ascii  字符编码转换工具
    servertools  命令行接口,用于注册 或取消注册,启动,关闭一个服务
    jconsole  基于JMX的GUI工具,用于连接正在运行的JVM,主要用于监控
    jps  jps查找当前用户的进程 注意:不是当前系统中的所有进程
    jstack  打印所有java线程的堆栈跟踪信息
    jstat 显示测试 java hotsport 虚拟机的性能统计信息
    jstatd  一个java远程方法调用(RMI)服务器应用程序-它监测Java Hotsport虚拟机的创建和终止并且提供一个接口来允许远程监控工具依附到 运行于本地主机的JVM
    jmap  打印某个java进程的内存信息

    用于解决堆栈内存溢出的JDK工具  jtack,jmap,jconsole,jvisualvm 
    
-------------------------------------------------------------------------------------------------------------------------

三.关键字与标识符 

关键字的定义和特点

定义:被Java语言赋予了特殊含义的单词

特点:关键字中所有字母都为小写

 

abstract    default    if            private      this 
boolean     do         implements    protected    throw 
break       double     import        public       throws 
byte        else       instanceof    return       transient 
case        extends    int           short        try 
catch       final      interface     static       void 
char        finally    long          strictfp     volatile 
class       float      native        super        while 
const       for        new           switch 
continue    goto       package       synchronized

一共48个,其中最常见的三个关键字 true,false,null,都不是关键字,只是作为一个单独标识类型

其中,很少用的关键字:const,goto,native,strictfp,transient,volatile,  注意:const 和 goto 作为java 中保留字

1.native 是方法修饰符 ,native 方法是由另外一种语言(c/c++/汇编等)实现的本地方法,native可以和其他一些修饰符连用,但是 abstract 和接口interface 方法不能用native 修饰

 eg:

public interface LoadInterface
{
	void doSomeMethod();
}
public class  Load implements LoadInterface
{
	public native void doSomeMethod();
	private native int doSomeMethodB();
	public native synchronized String doSomeMethodC();
	static native void doSomeMethodD();
}

strictfp

 精确浮点, 修饰类和方法,当一个类和接口用strictfp声明,内部所有的float和double表达式都会成为strictfp的,interface 方法不能用strictfp修饰,class当中可以声明

 eg:

 

strictfp interface LoadTest {  
     void methodA();  
}  
class A implements LoadTest {  
    public void methodA() {  
    }  
    public void methodB() {  
  }  
  public strictfp void methodC() {  
  }  
}  
class B {  
    strictfp void methodA() {  
    }  
} 
transient

变量修饰符 ,在对象存储时,这些变量的状态不会被持久化

volatile 

修饰变量,并发线程中访问共享变量,都强迫读取共享内存中的成员的值,若成员值发生改变,强迫线程变化值写入共享内存

eg:

class Test
{
	static int m = 0,n = 0;
	static void methodA(){
		m++;
		n++;
	}
	// 此成员数据会出现不一致
	static void methodB(){
		System.out.println("m="+m+",n="+n);
	}
}
这里 成员变量 m和n 会出现几次更新不一致状态,避免发生此情况,mehtodA 与mehtodB  加上同步sychronized

代码如下:

class Test
{
	static int m = 0,n = 0;
	static synchronized void methodA(){
		m++;
		n++;
	}
	// 此成员数据就所有并发线程共享了
	static synchronized void methodB(){
		System.out.println("m="+m+",n="+n);
	}
}
更简洁的写法,并发线程共享的成员变量用 volatile 声明

代码实现:

 

class Test
{
	// volatile 修饰成员变量,并发线程共享
	static volatile int m = 0,n = 0;
	static void methodA(){
		m++;
		n++;
	}
	// 此成员数据就所有并发线程共享了
	static void methodB(){
		System.out.println("m="+m+",n="+n);
	}
}

标识符
由26个英文大小写字母,数字,下划线,美元符号 $ 组成, 且不能以数字开头命名。java中严格区分大小写
java命名规范:
包名:多个单词组成,所有字母都小写
类名和接口名:多个单词组成,首字母大写
变量名和函数名:多个单词组成,第一个单词首字母小写,从第二单词开始首字母大写
常量名:所有字母都大写,多个单词之间用下划线分隔连接
注释:
多行注释:/* 注释描述  */
单行注释:// 注释描述
文档注释:/** 注释描述 */   用jdk 工具javadoc 命令进行解析 生成html格式说明文件
-------------------------------------------------------------------------------------------------------------------------

四.变量与常量

进制转换 
二进制与十进制互转
十进制转二进制 除2取余    运算满10进1,基数0-9, 
二进制转十进制 乘以2幂数   运算满2进1,基数0和1
十进制 与 八进制互转,将二进制位表现形式,以每三位取出一个数
十进制 与 八进制互转,将二进制位表现形式,以每四位取出一个数
负数进制转换  正数的二进制取反加1,最高位是1
包装器类型 Integer 提供了进制转换功能
eg:
public class Test{
public static void main(String args[]){

   int i=100;
   String binStr=Integer.toBinaryString(i);
   String otcStr=Integer.toOctalString(i);
   String hexStr=Integer.toHexString(i);
   System.out.println(binStr);
   }
}

java中的常量

整数常量。所有整数

小数常量。所有小数

布尔型常量。较为特有,只有两个数值。true false。

字符常量。将一个数字字母或者符号用单引号( ' ' )标识。

字符串常量。将一个或者多个字符用双引号标识。

null常量。只有一个数值就是:null


引用类型 数组,类,接口
类型转换:强制类型转换,自动类型转换
表达式的数据类型自动提升
所占字节数大于某个数据类型字节数,则自动转换,否则强制转换,但可能出现损失精度
-------------------------------------------------------------------------------------------------------------------------

五.运算符

赋值运算

= , +=, -=, *=, /=, %=

eg:

int a,b,c;  a=b=c =3;

int a = 3;   a+=5;等同运算a=a+5;

思考:有什么区别? 

short s = 3; 

s=s+2;运算后进行类型提升,装不进short类型型中,编译失败

s+=2;    在运算的过程中进行类型转换,编译可以通过


代码实现:
class OperateDemo2 
{
	public static void main(String[] args) 
	{
		//赋值运算符。=  += -= *= /= %=
//		int a,b,c;
//		a = b = c = 4;

		//int a = 4;
		//a+=2;//a = a + 2;

		short s = 3;
		//s+=4;
		s = (short)(s + 4);


		System.out.println("s="+s);
	}
}


逻辑运算
& 与 && 区别:&两边都要进行运算,&&短路功能,第一个为真,第二个参与运算,否则第二个不参与运算
“|”和“||”的区别: || 具备短路功能 第一个为真,第二个不参与运算,否则第二个参与运算
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false
位运算
直接对二进制数运算,
<<左移 被移除的高位丢弃,低位补0,乘以2的移动的位数次幂
>>右移 被移位的二进制最高位是0,右移后,高位补0;最高位是1,高位补1,除以2的移动的位数次幂
>>>无符号右移 被移位二进制最高位无论是0或者是1,高位都用0补

&与运算

|或运算6 

^异或运算

~反码

代码实现:

class OperateTest2 
{
	public static void main(String[] args) 
	{

		/*
		对一个整数的最后一个字节,高四位和低四位进行换位。

		int num = 0101-1100 & 255;
		1100-0101

		61 = 0011-1101
			 1101-0011 = 211


		*/
		int num = 61;
		
		int n1 = num & 15;//低四位
		int n2 = num & (15<<4);//高四位


		int n = n1<<4 | n2>>>4;


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

	}
}


三元运算
if else结构的简写形式,变量=(条件表达式)?表达式1:表达式2
eg:
class OperateDemo5 
{
	public static void main(String[] args) 
	{

		int x = 0,y;

		y = (x>1)?100:200;
		System.out.println("y="+y);

		//获取两个整数中的较大的整数。

		int a,b;
		int max = a>b?a:b;

		//获取三个整数中的较大的整数。

		int o,p,q;

		int temp = o>p?o:p;
		int max2 = temp>q?temp:q;

	}
}




------- android培训 java培训 、期待与您交流! ----------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值