Java的重要特点
下面提到的东西后面会学到,这里的内容了解一下就好
- Java语言是面向对象的OOP(Object Oriented Programming)
- Java语言是健壮的,因为有强类型机制、异常处理、垃圾回收的这些机制
- Java语言是跨平台性的,也就是一次编译,到处运行,可以在Windows或Linux或Android或Mac上运行,生成的字节码文件交给虚拟机
- Java语言是解释型语言,简单点理解就是说不生成exe文件(Windows下)
解释方式与编译方式
头疼的概念,请耐心看完
- 源程序:高级语言或者汇编语言编写的程序,但是不能被计算机执行如果源程序是用汇编语言编写的,需要一个汇编程序将其翻译成目标程序后才能执行。如果是高级语言编写的需要对应的解释程序或编译器对其进行翻译,翻译成目标程序才能执行
- 解释程序又叫做解释器,直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行,在Java中解释器是运行在虚拟机中的
- 编译器是将源程序翻译成目标语言程序
- 解释方式与编译器的区别:解释
- 方式不生成独立的目标程序(Windows下的exe),编译方式会生成独立的目标程序
修改一次
java执行流程分析
源文件通过编译(javac.exe)后生成字节码文件(.class文件)再使用java在JVM中运行
开发工具
暂时先用sublime Text3,这里附上链接sublime下载地址
点进去后就是这个样子
然后就是傻瓜式下一步就行
JDK与JRE,JDK的下载与安装
- JDK = JRE + 开发工具集合
- JRE = JVM + Java SE标准类库
JDK的安装
JDK各个版本的链接
打开后是这个样子
环境变量的配置
你电脑上的JDK安装路径\bin,
跟着我的来就好
我电脑上的JDK安装路径:D:\jdk1.8.0_131
第三步是点新建
把路径粘贴过去就行,接下来一直点确定就好,如果是win7的话需要重启才能生效
查看jdk是否安装成功
win+r打开运行对话框,输入cmd,再回车,进入到一个黑乎乎的窗口
输入java -version,如果出现了下面的样子就是安装成功,如果出现了既不是外部命令也不是内部命令那就说明环境变量配置错误,请重新检查java的安装路径
第一个Java程序
动动你的小手,在sublime输入以下代码
//class First{}表示定义一个类
//main方法是函数的入口
//System.out.println("First");在控制台上输出First
class First{
public static void main(String[] args){
System.out.println("Fist");//注意这里是英文状态下的分号,编程中括号,逗号,引号基本上是英文状态下的
return;
}
}
进入程序存放路径,在路径中输入cmd
在cmd中输入javac Test.java
如果没有反应那就说明编译成功,对了可能会出现gbk编码错误
解决办法
如果上面的没有报错那就在cmd中输入
java Test
就可以在控制台上看到First了,大功告成,收工
java开发注意事项
- Java的源文件以.java为扩展名,源文件的基本组成部分是类,也就是用class标记的部分
- Java应用程序的执行入口时main()方法,固定格式:public static void main(String[] args){…}
- 注意Java区分大小写
- 注意Java每条语句以;结束
- 一个源文件最多只能有一个public类,且源文件名必须与用public标记的类名字相同
- main方法不一定是在public类中,也可以在非public类中
java注释 Comment
单行注释
多行注释
文档注释
//main函数啥的我不写了,这条就是一条单行注释
/*
我是多行注释
/*不允许嵌套*/JVM认为上一个多行注释的结束标记在这里,但是下面的多行注释的结束标记没有开始所以报错
*/
![在这里插入图片描述](https://img-blog.csdnimg.cn/9f24707ee2cb4c43bfb906812d8100b1.png)
文档注释比较好玩点
/**
* @author 123
* @version 0;1
* */
public class one {
}
命令格式:javadoc -d 生成目录名 [-注解1 -注解2…] 源文件名
- 生成目录名,可以写全路径也可以写相对路径
- 注解就是 上面写的author和version等,
- 源文件名,就是Java文件了,记住带扩展名,可以不写,也可以写多个
eg:javadoc -d web -author -version test.java
变量
使用变量的步骤
- 声明 eg: int a;//定义了一个int类型的变量
- 赋值 a=60;//把60赋给a,=的运算顺序是从右到左的
就是先声明后使用,但是一般是这样的,
int a=10;
例子
main方法我不写了
int age=18;
double score =90;
char gender ='男';
String name="jasoon";
System.out.println(String.format("信息如下:%d,%.2f,%c,%s",age,score,gender,name));
变量使用注意事项
- 不同的类型的变量所占用的存储空间不一样哈,如int 4个字节,double就是8个字节
- 对于变量来说,必须要有变量名和数据类型
- 变量必须先声明后使用
- 在同一个作用域内变量不能重名
程序中+号的使用
- 当左右两边都是数值类型的时候,就是做加法运算
- 当左右两边只要有一方是字符串,就是做拼接运算
- 运算顺序是从左到右
小练习
System.out.println(100+1);//101
System.out.println("199"+1);//有字符串类型,1991
System.out.println(100+1+"a");//有字符串类型,101a
System.out.println("a"+199+1);//有字符串类型,a1991
数据类型
分类
整数类型
类型 | 占用存储空间 | 范围 |
---|---|---|
byte[字节] | 1字节 | -128~127 |
short[短整型] | 2字节 | -(2^15) ~2^15-1 |
int | 4字节 | -2^31~ 2^31-1 |
long | 8字节 | -2^63~ 2^63-1 |
整形的使用细节
- Java各整数类型有固定的范围和字段长度,不受具体OS,保证Java程序的可移植性
- Java的整型常量(具体值)默认是int类型,声明long类型的常量需要加上l或L
使用细节的第二点说明:
long a=10l;//是l哈,不是1
浮点类型
- 浮点数=符号位+指数位+尾数位,这个详细的在计算机组成原理中会详细说明,预计这个暑假完成
- Java的浮点型常量默认为double型,声明float型常量,须后加’f’或’F’
- 浮点数型常量有两种表达方式,十进制数形式,如5.12,512.0f .512(必须有小数点);科学计数法形式如5.12e2(5.12*10^2)
小陷阱:
System.out.println(2.1);//2.1
System.out.println(8.1/3);//2.6999999999999997
字符类型(char)
注意char是两个字节,可以存放汉字,多个汉字用String类型
注意
- 在Java中,char的本质是一个整数,输出的时候输出的是对应unicode码对应的字符
- 可以直接给char类型的变量赋一个整数,然后输出的时候,会输出对应的unicode字符
- char类型的变量是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
int a = 'a'+'b';
char b = 'a'+2;
System.out.println(a);//195
System.out.println(b);//c
char c1='a';
char c2='\t';
char c3='希';
char c4=110;
System.out.println((int)c1);//97
System.out.println((int)c2);//9
System.out.println((int)c3);//24076,这个是希字的unicode值
System.out.println((int)c4);//110
char c5='c'+2;
System.out.println(c5);//e
System.out.println((int)c5);
boolean类型
就是true和false,占一个字节
自动类型转换
注意
- 多种数据类型混合运算,自动转换成容量最大的那种数据类型,然后再计算
- byte,short和char之间不会相互自动转换
- byte,short,char之间可以进行计算,再计算时首先转换为int类型
- Boolean不参与任何转换,意思是说运算中包含了Boolean类型,会报错
//多种数据类型进行混合运算,自动转换为容量最大的数据类型
int a=10;
char c=1;
float result = 1.0+a+c;//报错,因为在Java中1.0是double类型,double类型不能直接赋值给float,会数据溢出
double result = 1.0+a+c;//这个可以
float result =1.0f+a+c;//这个可以
//将精度大的数据类型赋值给精度小的数据类型时,会报错,必须进行强制类型转换
float result =(float)1.0+1;
// 但是byte,char,short 之间不会相互自动转换
byte a1=-999;//会检查数值是否在[-128,127]区间内,不在则报错
//byte,char,short在进行运算的时候,计算时首先转换为int类型
byte n1=2,n2=-10;
short s2=n1+n2;//不对。int类型的数据不能直接赋值給short
//boolean类型的数据不参与任何转换
boolean condition=false;
int name=1+condition;//报错
System.out.println(name);
强制类型转换
将精度大的数据强制转换为精度小的数据,数据精度可能降低,数据可能会溢出
// 但是byte,char,short 之间不会相互自动转换
// byte a1=-999;//会检查数值是否在[-128,127]区间内,不在则报错
//byte,char,short在进行运算的时候,计算时首先转换为int类型
byte n1=2,n2=-10;
// short s2=n1+n2;//不对。int类型的数据不能直接赋值給short
int a=(int)-200;
System.out.println(a);
byte b = (byte)a;//这个是可以算的
/*
* 1.写出a的补码,这里是1 0011 1000
* 2.只要后八位,如果后八位最高为是符号为,则需要取补
* 3. 将八位的数据转换为十进制数,这里是0011 1000 也就是56
* */
b=(byte)-500;
//1 1 1111 0100
//1 0 0000 1100
System.out.println(b);
//char类型可以保存int类型的常量值(如100,900),但是不能保存变量的值
int example =1;
char ch=900;
ch=example;//报错
字符串与其他类型的转换
其他类型转换成字符串就是调用toString()方法
字符串类型转换成其他类型方法:调用基础类型的包装类.parse转换的目标类型(字符串变量),如
将字符串123转换成int,double,float的
String s="123";
int i = Integer.parseInt(s);
double v = Double.parseDouble(s);
float v1 = Float.parseFloat(s);
short i1 = Short.parseShort(s);
//上述操作可能会抛出异常
运算符
算数运算符
就是加减乘除哪些的东西,但是要注意/,++
例如: 10/4=2,++要注意是之前看到有一个题,
原文
int i=1;
i=i++; i的值是多少? 实际上就是 temp = i,i=i+1,i=temp;也就是1
i=1;
i=++i;i的值是多少? 实际上就是 i = i + 1,temp=i,i=temp; 也就是2
还有一个%,取余运算符的本质: a % b = a- a/b * b
关系运算符
就是大于等于哪些,有一个要注意
instance of,检查是否是类的对象,如 1 instance of Integer 结果是true
逻辑运算符
与或非 异或
位运算符
如果两边都是boolean的话和逻辑运算符差不多,但是如果是数值那就要算了,以 -50 76为例
负数在计算机中是以补码的形式存储的,由于Java的Integer是四个字节也就是32位,-50在计算机中表示为
1111 1111 1111 1111 1111 1111 1100 1110,
76的补码为0000 0000 0000 0000 0000 0000 0100 1100
进行按位与
// 0000 0000 0000 0000 0000 0000 0100 1100
// 1111 1111 1111 1111 1111 1111 1100 1110
// 1111 1111 1111 1111 1111 1111 1100 1110 最高位是1表明是负数,再求补码得到真值
// 1000 0000 0000 0000 0000 0000 0011 0010 这是按位或的结果 最高位是1表明是负数,将110010转换为十进制为50,加上符号就是-50、
// 0000 0000 0000 0000 0000 0000 0100 1100 按位与的结果 76
// 1111 1111 1111 1111 1111 1111 1000 0010
// 1000 0000 0000 0000 0000 0000 0111 1110 异或的结果 -126
三元运算符
条件1?表达式1:表达式2
命名规范
包名:多单词组成时所有字母都小写
类名、接口名:多单词组成时,所有单词的首字母大写
常量名:大写,多个单词用下划线连接