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
转化为十进制数就是这个