1. cmd: javac , java
javac ****.java 用于编译java源代码生成.class字节码文件
然后运行:java ****,用虚拟机运行字节码
JDK,JRE,JVM三者代表什么,包含关系如何,Java的运行过程,原理:编译后用jre中翻译,JVM(基于Windows,Unix, OS)运行,所以Java不依赖于操作系统运行,这也是Java可移植性好的原因,不太容易受操作系统影响。
**Java的跨平台的实现原理:**java在操作系统上加入了jvm虚拟机,程序运行在jvm上,jvm会自动根据不同操作系统将相同的.class字节码解释成不同的机器码。
**Java程序的开发和执行过程:**编写源文件->编译源文件(使用编译器javac)->字节码->执行字节码(使用解释器java)。
javac -encoding utf-8 Welcome.java
2. 一些基本概念
public class Welcome{
public static void main(String[] args){
System.out.println("Hello World, 你好,世界!");
}
}
- Java 对大小写敏感
- 关键字public 称为访问修饰符,控制程序其它部分对这段代码的访问级别
- 关键字class 表示类,Java是面向对象的语言
- 一个源文件只可以有一个public类,其它类个数不限,如果源文件包含一个public 类,源文件名必须和其中定义的public的类名相同,以“.java”为扩展名;
- 正确编译后的文件会得到相应的字节码文件****.class
- main 方法是Java应用程序的入口方法, 有固定的书写格式
- Java 中以花括号{},划分程序的层级
- Java 中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行
- 编程时,注意缩进规范,括号配对
3. 最常用的DOS命令
- cd mycode:进入一个目录
- cd … :返回父目录
- dir:查看本目录下的文件和子目录列表
- cls:清除屏幕命令
- 上下键:查找敲过的命令
- Tab 键:自动补齐命令
4. Eclipse 初步
在src写源码
在隐藏的bin目录存放编译源码的class文件(eclipse不显示这个文件夹)
JRE System lib 是 架包class文件的集合
在src内new一个class文件命名为Welcome,会自动生成Welcome.java文件在src文件夹中,同时eclipse会自动编译出Welcome.class文件保存在bin文件夹
5. Java 标识符
给变量,方法,类,包命名。
- 必须以字母,下划线_,美元符号$开头
- 其它部分可以是字母,下划线_,美元符号$和数字的组合
- Java对大小写敏感,且长度不限制
- 标识符不可以是Java的关键字
- 类的标识符,每个单词首字母必须大写:Man,GoodMan
- 方法和变量的标识符,第一个单词小写,第二个单词首字母大写,eat(), eatFood()
6. Java 关键字
################################20.7.23###################################
1. 变量
变量的分类:局部变量,类变量(静态变量static),成员变量(非静态变量),后面两个变量在面向对象中很重要,会自行初始化。
声明变量,初始化变量。
变量本质上就是代表一个”可操作的存储空间”, Java是一种强类型语言,每个变量都必须声明其数据类型。
primitive基本数据类型:boolean, byte,char,short,int,float,long,double,布尔型,字符型,数值型
int类型大约可存21亿,2^32.
reference 引用数据类型:类class,接口interface,数组(都是4个字节)
2. 常量
final 关键字定义常量后,该常量不可被赋值,
常量命名:大写字母和下划线:MAX_VALUE
final double PI = 3.14;//常量,不可重新赋值,标识符:全部大写,下划线MAX_VALUE
整型数值:
十进制:正常
八进制数:0开头
十六进制数:0x开头
二进制数:0b开头
int a = 15;
int b = 015;//八进制
int c = 0x15;//十六进制
int d = 0b10101;//二进制
long m = 555555555555L;//数据超过int范围,需要加L
浮点型数值:
float类型又被称作单精度类型,尾数可以精确到7位有效数字,一般不够用,用double
浮点型不要用于数据对比,因为不准确
java.math包下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
float a2 = 3.14f;
double b2 = 6.28;
double b2 = 6.28D;
字符型:
单引号说明字符,双引号说明字符串
char 类型用来表示在Unicode编码表中的字符。
Unicode具有从0到65535之间的编码。(两个字符)
’\u0000’到’\uFFFF’之间的十六进制值来表示。
以后我们学的String类,其实是字符序列(char sequence)。
转义字符:\t \n \ ’
char a = 'T';
char b = '尚';
char c = '\u0061';
String d = "abc";
布尔型:
在内存中占一位(不是一个字节)
boolean man;
man = true;
if(man) {//不推荐 man==true这种写法,代码简练不易出错
System.out.println("是男性。");
}else {
System.out.println("是女性。");
}
7. Java 运算符
1. 算术运算符中+,-,*,/,%属于二元运算符,++,–属于一元运算符
如果两个操作数有一个为Long, 则结果也为long。
如果两个操作数有一个为double,则结果为double。
int aa = 1;
int bb = aa++;// 先赋值,再自增
System.out.println("bb:"+bb);
System.out.println("aa:"+aa);
aa = 1;
int cc = ++aa;// 先自增,再赋值
System.out.println("#############");
System.out.println("cc:"+cc);
System.out.println("aa:"+aa);
/*
输出:
bb:1
aa:2
#############
cc:2
aa:2
*/
2. 扩展运算符
// 扩展运算符
int e = 5;
int g = 2;
e += g;//等价于 e=e+g;
System.out.println("#############");
System.out.println(e);
e = 5;
e *= g+2;//等价于e = e*(g+2)
System.out.println(e);
3. 关系运算符
可以比较字符间的关系
//关系运算符
char cr1 = 'a';
char cr2 = 'b';
int n1 = 0 + cr1;//把字符型转换为整型
System.out.println("#############");
System.out.println(cr1<cr2);
System.out.println(n1);
System.out.println((int)cr2);//强制转换
4. 逻辑运算符
- 逻辑与 &
- 逻辑或 |
- 短路与 &&:只要有一个为false,则直接返回false,后面的不会再计算,相对前两个,效率更高
- 短路或 ||:只要有一个为true, 则直接返回true,后面的不会再计算,相对前两个,效率更高
- 逻辑非 !
- 逻辑异或 ^:相同为false,不同为true
5. 位运算符
- 取反:~
- 按位与:&
- 按位或:|
- 按位异或:^
- 左移运算符,左移1位相当于乘2:<< 3<<1 = 3*2
- 右移运算符,右移1位相当于除2取商:>> 3>>1 = 3/2
int a = 3*2*2;
int b = 3<<2; //相当于:3*2*2;
int c = 12/2/2;
int d = 12>>2; //相当于12/2/2;
字符串连接符: “+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
int a = 10;
int b = 11;
String s = "4";
System.out.println(a+s);//把整型a=10变成了字符型,和s连接
System.out.println(a+b+s);//先计算a+b=21,把21变成了字符串与s连接
/*
104
214
*/
6. 条件运算符:x ? y : z
x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
int score = 80;
int x = -100;
String type = score < 60 ? "不及格":"及格";
System.out.println(type);
int flag = x>0 ? 1: (x<0 ? -1: 0);
System.out.println(flag);
7. 运算符优先级
优先级
逻辑非>逻辑与>逻辑或
8. 自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
9. 强制类型转换 :(type)var
在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
double x = 3.14;
int nx = (int)x;
char c = 'a';
int d = c+1;
System.out.println((char)d);
强制转换注意问题:
-
操作比较大的数,注意是否溢出
-
变量不要命名有l,容易与1混淆
int money = 1000000000;
int year = 20;
long total = (long) money*year;//会溢出,强制转换为long
System.out.println("###################");
System.out.println(total);
10.简单的键盘输入
import java.util.Scanner;
/**
* 简单的键盘输入和输出
* @author 孔阳
*
*/
public class TestScanner {
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入名字:");
String name = scanner.nextLine();
System.out.println("请输入爱好:");
String favor = scanner.nextLine();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
System.out.println("###############");
System.out.println(name);
System.out.println(favor);
System.out.println(age);
}
}