目录
JDK组成
- JDK(Java Development Kit)Java程序开发的工具包=JRE+开发工具
- JRE(Java Runtime Environment)Java的运行环境=JVM+核心类库
- JVM(Java Virtual Machine)Java虚拟机,真正运行Java程序
- 核心类库:java自己写好的程序
JAVA的跨平台性
Java源文件经过JDK中的编译器编译成字节码文件(.class),然后在JRE中的JVM虚拟机解释执行,因为每个操作系统的内核各不相同,所以每个操作系统都会安装属于自己操作系统的JVM虚拟机。
注释
-
单行注释
格式://code
-
多行注释
格式:/*
code
*/
-
文档注释
格式:/**
code
*/
调整注释颜色
打开设置——配色方案——语言默认设置——点击三个注释(其中文档注释里面有个文本)——点击前景右面的颜色矩形,选择喜欢的颜色,最终点确定即可
关键字不能直接拿来使用
字面量
数据在程序中的书写格式
练习:网站展示歌曲信息,用java实现
public class constant_test {
public static void main(String[] args) {
System.out.println("老鹰乐队(Eagles)");
System.out.println("流行");
System.out.println("选集");
System.out.println("CD");
System.out.println(3);
System.out.println(9.8);
}
}
变量
内存中的存储空间,空间中存储着经常发生改变的现象
格式
数据类型 变量名 = 数据值 ;
public class variable {
/*
数据类型 变量名 =数据值;
整数类型 int
*/
public static void main(String[] args) {
int salary = 10000;
System.out.println(salary);
salary = 5000;
System.out.println(salary);
int age = 18;
System.out.println(age);
}
}
变量的注意事项
public class variable_demo {
/*
变量的注意事项:
1、变量名不允许重复定义
2、一条语句,可以定义多个变量,中间需要逗号分割
3、变量在使用之前必须赋值
4、TODO:变量的作用域
*/
public static void main(String[] args) {
int salary=12000;
// 1、变量名不允许重复定义
// int salary=15000;
System.out.println(salary);
// 2、一条语句,可以定义多个变量,中间需要逗号分割
int a=10,b=20,c=30;
// 3、变量在使用之前必须赋值
int num;
num=10;
System.out.println(num);
}
}
TODO是代做任务
Debug
查看程序的执行流程,也可以用于追踪程序执行过程来调试程序
右键点小虫子,然后需要加断点,才能在debug模式下,追踪程序执行到断点行
左边是线程,main表示现在执行主方法,第十行;右面是变量,表示salary整数变量现在值为5000
打多个断点,可以用来测试两个断点中间范围内的代码运行效果
在第一个断点debug的时候点击这个绿色小箭头就可以跳转到下一个断点,且中间的代码已被执行
标识符
给类、方法、变量等起名字的符号
命名规则
不能是关键字、不能是数字开头、区分大小写,只能由数字、字母、下划线、美元符号组成
class是关键字不可以,但Class可以
命名规范
见名知意
小驼峰:给变量起名字
一个单词,所有字母小写——name
多个单词组成,第二个单词开始,首字母大写——firstName
大驼峰:给类起名字
一个单词,首字母大写——Name
多个单词,每个单词的首字母都大写——FirstName
数据类型
1、基本数据类型 整数 byte 1个字节 -128-127 10000000——01111111 int 4个字节 short 2个字节 long 8个字节 小数 float 4个字节 double 8个字节 字符 char 2个字节(也可以写数值0-65535) 布尔 boolean 1个字节 2、引用数据类型 字符串 String ---------------------------------------------------- 使用思路: 1、使用整数类型首选int,装不下了就用long,定义long类型需要加入L的标识 2、使用小数类型首选double,非要用float类型,需要加入F标识
键盘录入Scanner
笔记
import java.util.Scanner;
//引入jdk-lib-src-java-util-Scanner.java,一定写在class的上面
public class scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//sc是变量名
int age = sc.nextInt();//定义整数类型变量接受键盘输入的整数
double height = sc.nextDouble();//从键盘录入小数,用double类型变量接收
boolean flag =sc.nextBoolean();//从键盘录入布尔,用boolean类型接收
String name =sc.next();//从键盘录入字符串,用String接收
}
}
例题
答案
import java.util.Scanner;
public class scannertest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name =sc.next();
System.out.println("请输入您的年龄:");
int age =sc.nextInt();
System.out.println("请输入您的性别:");
String gender =sc.next();
System.out.println("请输入您的身高:");
double height =sc.nextDouble();
System.out.println("请输入您的婚姻状况:");
boolean marriage =sc.nextBoolean();
System.out.println("注册成功!");
}
}
运算符
笔记
/两边整数就取结果的整数部分,有一边是小数,结果就是具体的小数
%为取余符号
例题
数值拆分
答案
import java.util.Scanner;
public class operatordemo {
public static void main(String[] args) {
//输入一个三位数并接收
System.out.println("请输入一个三位数:");
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
//拆个位
int gewei =number%10;
//拆十位
int shiwei =number/10%10;
//拆百位
int baiwei =number/10/10%10;
//当+号的一边遇见了字符串,此时的含义为字符串连接符
System.out.println("该三位数"+number+"的个位为:"+ gewei);
System.out.println("该三位数"+number+"的十位为:"+ shiwei);
System.out.println("该三位数"+number+"的百位为:"+ baiwei);
}
}
字符串连接
“5+5=”+5+5
+号左右两边有字符串,则把5加入左边的字符串
第一步——“5+5=5”+5
第二步——“5+5=55”
自增自减运算符
++和--
++在前:先自增,后操作
++在后:先操作,后自增
b=a++意思就是第一步b=a,第二步a++
int a =3;
int b=(++a)+(a++)+(a*10);
a最后为5,自增两次;b最终为58,a先自增,然后传递到第二个小括号,最终以5传递给第三个小括号
类型转换
隐式转换
取值范围小的数值或者变量直接赋值给另一个取值范围大的变量
- 在两者进行运算时,如果数据类型不统一,小的会先提升给大的再进行运算、
- byte、short、char在进行运算的时候,会先提升为int,再运算
强制转换
取值范围大的数值或变量不能直接赋值给取值范围小的变量
有可能会出现精度损失
进制
十进制默认
二进制0b开头
八进制0开头
十六进制0x开头
计算机在运算的时候都是以补码的形式在运算
- 正数的原码与反码、补码相同
- 负数的负码是原码逐位取反,符号位不变
- 负数的补码是反码末尾加1
- 负数的补码反推原码就是符号位不变,逐位取反。末尾加一
例如:
int num1=130;
//num1=00000000 00000000 00000000 10000010 int四个字节
byte num2=(byte)num1;
//num2的补码=10000010 byte1个字节
//num2的原码=11111101+1=11111110=-126
System.out.println(num2);
//num2=-126
类型转换面试题
/*
类型转换面试题:
下面代码是否有错误,若有则改正
byte b1=3;
byte b2=4;
byte b3=b1+b2;
*/
byte b1=3;
byte b2=4;
//byte在运算的时候会转化为int类型,所以要么int b3,要么把b1+b2的结果转化为byte类型
int b3=b1+b2;
byte b4=(byte)(b1+b2);
System.out.println(b3);
System.out.println(b4);
//byte bb =3+4; 会出错吗?
byte bb =3+4;
System.out.println(bb);
上面为什么没有报错呢,是因为Java存在常量优化机制:在编译(javac)的时候就会对3和4这两个字面量进行运算,所以字节码文件运行的时候实际为:byte bb = 7;