Java入门
注释
单行注释
多行注释
文档注释
字节
数据类型
八大数据类型(基本数据类型)
//整数
int num1 = 10;
byte num2 = 20;
short num3 = 30;
long num4 = 30L; //long类型要在数字后面加L
//小数/浮点数
float num5 = 50.1F; //float类型要在数字后面加F
double num6 = 3.14;
//字符
char a = 'A';
//字符串,String不是关键字,而是类
String b = "ABCD";
//布尔值
boolean flag1 = true;
boolean flag2 = false;
引用数据类型
- 类
- 接口
- 数组
数据类型拓展
整数拓展
二进制0b 十进制 八进制0 十六进制0x
int a = 10;
int b = 010; //八进制0
int c = 0x10; //十进制0x 0~9 A~F 16
System.out.println(a);
System.out.println(b);
System.out.println(c);
浮点数扩展
import java.math.BigDecimal; //BigDecimal 数学工具类,表示银行业务,钱
浮点型(float,double):有限 离散 舍入误差 大约 接近但不等于,例如:
public class Main {
public static void main(String[] args) {
float a = 0.1f; //0.1
double b = 1.0/10; //0.1
System.out.println(a == b); //false
float c = 234567890123f;
float d = c + 1;
System.out.println(c == d); //true
}
}
最好完全使用浮点数进行比较
字符扩展
所有的字符本质还是数字
public class Main {
public static void main(String[] args) {
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1); //强制转换
System.out.println(c1);
System.out.println((int)c2); //强制转换
}
}
编码
转义字符
对象 从内存分析
public class Main {
public static void main(String[] args) {
String a = new String("hello world");
String b = new String("hello world");
System.out.println(a == b); //false
String c = "hello world";
String d = "hello world";
System.out.println(c == d); //true
}
}
布尔值扩展
Boolean flag =true;
if (flag = true){} == if (flag){}
类型转换
-
强制类型转换 (类型)变量名称 高—低
public class Main { public static void main(String[] args) { int i = 12; byte a = (byte)i; //如果数值过大,容易导致内存溢出 System.out.println(i); System.out.println(a); } }
-
自动类型转换 低—高
public class Main { public static void main(String[] args) { int i = 12; double a = i; System.out.println(i); System.out.println(a); } }
-
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换为低容量时,强制转换
- 转换的时候可能存在内存溢出(操作过大的时候)或者精度问题 JDK7新特性,数字之间可以用下划线分割
变量,常量,作用域
变量
-
变量是可以变化的量 变量必须声明 变量类型 变量名字 = new 变量名字
-
Java变量是最基本的存储单元,其要素包括变量名,变量类型和作用域 //数据类型 变量名 = 值
-
注意事项:
- 每个变量必须有类型,可以是基本类型,也可以是引用类型
- 变量必须是合法的标识符
- 变量声明是一条完整的语句,每个变量写完必须以分号结束
-
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则,除了第一个单词以外,后面的单词首字母大写
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线
- 类名:首字母大写和驼峰原则
- 方法名:首字母小写和驼峰原则
变量作用域
实例变量
从属于对象,如果不自行初始化,则这个类型的默认值为0,0.0
布尔值的的默认类型是false,除了基本类型,其他的默认值都是null
局部变量
必须声明和初始化值
类变量 static
加上static关键字是存储于类
常量
- 常量:初始化后不能改变值,不能变动的值 final 常量名 = 值 (final是修饰符,不存在先后顺序)
- 常量名一般用大写字符
运算符
Java支持此下运算符:
-
算术运算符:+,-,*,/,%,++,–
-
自增自减运算符(一元运算符):++,–
public class Main { public static void main(String[] args) { int a = 3; System.out.println(a); int b = a++; //a = a + 1 System.out.println(b); //执行完这行代码后,先给b赋值,再自增 int c = ++a; //a + a + 1 System.out.println(c); //执行完这行代码前,先自增,再给c赋值 //幂运算 double pow = Math.pow(2,3); System.out.println(pow); } }
-
-
赋值运算符:=
-
关系运算符:>,<,=,<=,==,!= 返回结果:正确/错误
public class Main { public static void main(String[] args) { int a = 12; int b = 20; System.out.println(a>b); System.out.println(a<b); } }
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<
/* A = 0011 1100 B = 0000 1101 A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~B = 1111 0010 <<左移 相当于*2 >>右移 相当于/2 根据二进制表: 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16 */
-
条件运算符:?:
x ? y : z //如果x==true,则结果为y,否则结果为z
-
扩展赋值运算符:+=,-=,*=,/=
-
优先级
Java流程控制
Scanner
用户交互Scanner
java.util.Scanner
是Java 5的新特征,我们可以通过Scanner来获取用户输入基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的next()和nextLine()方法获取输入的字符串读取前我们一般需要使用hasnext()与hasnextLine()判断是否还有输入的数据
Scanner进阶
顺序结构
Java基本结构是顺序结构,除非特别指明,否则就按照顺序一句一句执行
顺序结构是最简单的算法,它是任何一个算法都离不开的一种基本算法结构
选择结构
if
if单选结构
语法
if (布尔值){
//如果布尔值表达式为true将执行的语句
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if (s.equals("hello")){
System.out.println(s);
}
System.out.println("end");
scanner.close();
}
}
if双选结构
语法
if (布尔表达式){
//如果布尔值表达式为true将执行的语句
}else {
//如果布尔值表达式为false将执行的语句
}
if多选结构
语法
if (布尔表达式1){
//如果布尔值表达式1为true将执行的语句
}else if (布尔表达式2){
//如果布尔值表达式2为true将执行的语句
}else if (布尔表达式3){
//如果布尔值表达式3为true将执行的语句
}else {
//如果以上布尔值表达式都不为true将执行的语句
}
if嵌套结构
switch
switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支
语法
switch (expression){
case value:
//语句
break;
case value:
//语句
break;
default://可选
//语句
}
switch语句中的变量类型可以是:
-
byte,short,int或者char
-
从Java SE 7开始,switch支持字符串String类型
jdk7新特性,表达式可以是字符串(字符的本质是数字),
反编译 Java——class(字节码文件)——反编译(IDEA)
-
case标签必须为字符串常量或者字面量
循环结构
while
while是最基本的循环,它的结构是
while (布尔表达式){
//循环内容
}
只要布尔表达式为true,循环就会一直执行下去
do while
语法:
do {
//代码语句
}while (布尔表达式)
do while 循环至少执行一次
while 和do while 循环的区别:
- while先判断后执行,do while先执行后判断
- do while 总是保证循环至少执行一次
for
for 循环是支持迭代的一种通用结构是最有效、最灵活的循环
for 循环执行的次数是在循环前就确定的,语法:
for (初始化;布尔表达式;更新){
//代码语句
}
增强for 循环:
-
Java 5引入了一种用于数组或集合的增强型for语句
-
语法格式
for (声明语句:表达式){ //代码语句 }
-
声明语句:声明新的局部变量,该变量的类型必须与数组元素的类型匹配,其作用域限定在循环语句块,其值与数组元素的值相等
-
表达式:表达式就是要访问的数组名,或者是返回值为数组的方法
-
break continue goto
break用于强行退出循环,不执行循环中剩余的语句
continue用于终止某次循环过程,即跳过循环中尚未执行的语句,接着进行下一次是否执行循环的判定
goto关键字
Java流程控制例子
打印三角形
public class Main {
public static void main(String[] args) {
for(int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--){
System.out.print(" ");
}
for (int j = 1; j <= i; j++){
System.out.print("*");
}
for (int j = 1; j < i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
打印九九乘法表
public class Main {
public static void main(String[] args) {
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i * j) + "\t"); //print()输出后不会换行
}
System.out.println(); //println()输出后会换行
}
}
}