@[toc]
常用Dos命令
打开控制台:Win + R 输入cmd
1.盘符切换 想切换的盘: 如: D:
可以看出:大小写都可以,但必须要加冒号:
2.查看当前目录下的所有文件 dir
3.切换目录(目录包含盘符,即既能切换盘符,也能切换具体目录) cd(change directory)
- 用cd /d切换盘符: cd /d 盘符:
- 用cd切换目录:
cd加目录名:切换目录
跨盘符切换目录
- 用 cd.. 返回上一级目录
4.清理屏幕 cls(clear screen)
原本是这样的:
cls过后变成了这样:
5.退出终端 exit
6.查看电脑的ip ipconfig
7.打开应用
calc 计算器
mspaint 画图工具
notepad 记事本
8.ping 命令
ping www.baidu.com
9.文件操作
md 目录名 创建一个文件夹
rd 目录名 删除一个文件夹
cd> 文件名 创建一个文件
del 文件名 删除文件
md创建文件夹
cd>创建文件
del删除文件
rd删除文件夹
注释
Java中的注释有三种:
1.单行注释
2.多行注释
3.文档注释
//单行注释: 只能注释一行文字 格式://
//多行注释:可以注释一段文字 格式:
/*
注释
*/
//文档注释:JavaDoc 格式:
/**
*
*/
/***
* ┌─┐ ┌─┐ + +
* ┌──┘ ┴───────┘ ┴──┐++
* │ │
* │ ─── │++ + + +
* ███████───███████ │+
* │ │+
* │ ─┴─ │
* │ │
* └───┐ ┌───┘
* │ │
* │ │ + +
* │ │
* │ └──────────────┐
* │ │
* │ ├─┐
* │ ┌─┘
* │ │
* └─┐ ┐ ┌───────┬──┐ ┌──┘ + + + +
* │ ─┤ ─┤ │ ─┤ ─┤
* └──┴──┘ └──┴──┘ + + + +
* 神兽保佑
* 代码无BUG!
*/
文档注释怎么用:
/**
* sex:1 表明是男性
* sex:0 表明是女性
*/
int sex;
这是我在类中定义的属性👆
当我调用该属性,把鼠标光标移动到上面时
就会出现我们的文档注释
标识符
Java所有的组成部分都需要名字。 类名、变量名以及方法名都被称为标识符。
标识符注意点
- 所有的标识符都应该以字母 (A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z), 美元符($)、或者下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary、#abc
- 虽然可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很low!!!
数据类型
强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
弱类型语言:变量不用定义就能直接使用(Python)
Java的数据类型分为两大类
基本数据类型
引用类型
①基本数据类型(primitive type)
八大基本数据类型:byte short int long float double char boolean
- 数值类型
整数类型
类型 | 范围 |
---|---|
byte:占1个字节 | 范围:-128~127 |
short:占2个字节 | 范围:-32768~32767 |
int:占4个字节 | 范围:-2147483648~2147483647 |
long:占8个字节 | 范围:-9223372036854775808~9223372036854775807 |
浮点类型
类型 |
---|
float:占4个字节 |
double:占8个字节 |
字符类型
类型 |
---|
char:占2个字节 |
- boolean类型
占一位,其值只有true和false两个
//八大基本数据类型 byte short int long float double char boolean
//整数 记住4字口诀:百 万 亿 够
byte a = 127; //百以内用它
short b = 32767; //万以内用它
int c = 2147483647; //亿以内用它 (最常用)
long d = 9223372036854775807L; //够用了昂 注意:long类型要在数字后面加个L
//浮点数 (小数)
float e = 20.1F; //float类型要在数字后面加个F
double f = 3.141592653589793238462643;
//字符
char g = 'G'; //char类型里只能写一个字母或一个中文,不能写多个。(注意:用''单引号)
//字符串,String不是关键字,是类。不是八大基本数据类型之一 !!!
//String h = "谢谢你,因为有你,温暖了四季";
//String 不属于八大基本类型,属于`引用`类型 (注意:String后用""双引号)
//布尔值:是非 (只有这两个值)
boolean i = true;
//boolean j = false;
②引用数据类型 (reference type)
- 类
- 接口
- 数组
(除了八大基本类型都是引用类型)
数据类型扩展
整数扩展
//整数拓展: 进制问题 二进制0b 八进制0 十进制 十六进制0x
int i1 = 0b10; //二进制10的十进制值是1*2^1+0*2^0 = 2(1乘2的1次方+0乘2的0次方=2)
int i2 = 010; //八进制10的十进制值是1*8^1+0*8^0 = 8(1乘8的1次方+0乘8的0次方=8)
int i3 = 10;
int i4 = 0x10; //十六进制10的十进制值是1*16^1+0*16^0 = 16(1乘16的1次方+0乘16的0次方=16)
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
输出结果:
浮点数扩展
//浮点数拓展
//BigDecimal 数学工具类 可以表示银行业务
//float 问题:表现字长是有限的,离散的,舍入误差,大约 接近但不等于
//double
//结论:最好完全避免用浮点数进行比较
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f == d); //false
float f1 = 23131312312312313f;
float f2 = f1 + 1;
System.out.println(f1 == f2); //true
输出结果:
字符扩展
//字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c2);
System.out.println((int)c2);
//所有的字符本质还是数字
//编码:Unicode 占2字节 最多表示65536个字符 2**16=65536
输出结果:
char c = 'a'; //ASCII码中a是97
int e = c+1; //97+1=98
System.out.println(e);
System.out.println((char)e); //ASCII中98代表b
输出:
转义字符
//转义字符
// \t 制表符
// \n 换行
// ...还有很多
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
布尔值扩展
//布尔值扩展
boolean flag = true;
if (flag == true){} //新手
if (flag){} //老手
//这俩意思一样
什么是字节
位(bit):是计算机 内部数据 存储的最小单位,11001100是一个八位二进制数。(几个01就是几位)
字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写B来表示,1B(byte,字节)= 8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
- 1bit表示1位
- 1Byte表示一个字节 1B = 8b
- 1024B = 1KB
- 1024KB = 1M
- 1024M = 1G
类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
优先级:
低 ------------------------------------------》》》 高
byte,short,char → int → long → float → double
低:容量小,字节少,优先级低
高:容量大,字节多,优先级高
注意:浮点数优先级一定大于整数!!!
运算中,不同类型的数据需要先转化为同一类型,然后才能进行运算。需要有个转换过程。
- 强制类型转换
- 自动类型转换
格式:强制类型转换: (类型)变量名 高-->低
自动类型转换: 低-->高
int i = 128;
byte b = (byte)i; //int`高`优先级-->byte`低`优先级
double d = i; //int`低`-->double`高` 不需要加任何东西
//强制类型转换: (类型)变量名 高-->低
//自动类型转换: 低-->高
System.out.println(i);
System.out.println(b); //内存溢出
System.out.println(d);
/*
注意点:
1. 不能对布尔值转换
2. 不能把对象类型转化为不相干的类型,比如:按字节的(八大基本数据类型)不能转化为按位的(boolean)
3.在把高优先级(大容量)转换到低优先级(小容量)的时候,强制类型转换
4.转换的时候可能存在内存溢出,或者精度问题
*/
输出结果为:
注意点:
- 不能对布尔值转换
- 不能把对象类型转化为不相干的类型,比如:按字节的(八大基本数据类型)不能转化为按位的(boolean)
- 在把高优先级(大容量)转换到低优先级(小容量)的时候,用强制类型转换
- 转换的时候可能存在内存溢出,或者精度问题
System.out.println((int)23.7); //23,精度丢了
System.out.println((int)-45.89f); //-45,精度也丢了
输出:
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; //-1474836480,计算时溢出了。int最大21亿,这都200亿了
long total1 = money*years; //这俩都是int,相乘直接就溢出了,转换前就出问题了,都没机会最后转long型
//相乘时至少转换一个,就可解决溢出问题
long total2 = (long)money*years; //计算前转换成long,转一个
long total3 = money*(long)years; //计算前转换成long,转一个
long total4 = (long)money*(long)years; //两个都转
System.out.println(total);
System.out.println(total1);
System.out.println(total2);
System.out.println(total3);
System.out.println(total4);
变量
- 变量是什么:就是可以变化的量!
- Java是一种强类型语言,每个变量都必须声明其类型。
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
格式: 数据类型 变量名 = 值;(可以使用逗号隔开来声明多个同类型变量)
如:int a = 1;
注意事项:
1.每个变量都有类型,类型可以是基本类型,也可以是引用类型。
2.变量名必须是合法的标识符。
3.变量声明是一条完整的语句,因此每个声明都必须以分号来结束。
变量作用域
- 类变量
- 实例变量
- 局部变量
类变量
static int a = 1;实例变量
在类里面,方法外面,从属于对象;所有的数值类型,如果不初始化,默认值就是: 整数0 小数0.0
布尔值默认是:false
除了基本类型,其余的默认值都是null
String name; 默认值为null
int age; 默认值为0
局部变量
在方法内定义,它的作用域仅限于方法内部, 离开该方法内部就是无效的,再使用就会报错。
所在位置:方法内,方法形参,构造器内,构造器形参,代码块内。
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:除了第一个单词以外,后面的单词首字母大写。如:monthSalary lastName
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
常量
常量定义方法:
final 常量名 = 值;
注意:
- 常量名全用大写字母!如果字母多,中间用下划线_隔开
- static是修饰符,修饰符的写法不存在先后顺序
static final double PI = 3.14; // static和final是修饰符,写法不分先后
final static double PII = 3.141;
public static void main(String[] args) {
System.out.println(PI);
System.out.println(PII);
final double PPII = 3.1415; // 注意:不加static无法打印
// 错因: java: 无法从静态上下文中引用非静态 变量 PPII
运算符
Java语言支持如下运算符:
基本运算符 —— 二元运算符
二元指的是:运算时至少需要两个数。
补充一个快捷键 Ctrl + D : 复制当前行到下一行
int a = 1;
int b = 2;
int c = 3;
int d = 4;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); //两个数都是int型,求出的结果就不会有小数部分
System.out.println(a / (double)b); //把其中一个数强制转换成double型,结果就会自动转换成double型
System.out.println(d % c); //取余(模运算),结果为:1 4/3 = 1......1
计算结果的类型
<font
color="red">计算结果的类型总是跟操作数中优先级最高的类型保持一致;如果优先级最高的类型低于int,则结果为int类型。
byte i1 = 8;
short i2 = 10;
int i3 = 123;
long i4 = 123123123123123L;
double i5 = 3.14;
System.out.println(i1+i2+i3+i4+i5);
//double —— 优先级最高的类型是i5(double),所以计算出的结果为double型
System.out.println(i1+i2+i3+i4);
//long —— 优先级最高的类型是i4(long),所以计算出的结果为long型
System.out.println(i1+i2+i3);
//int —— 优先级最高的类型是i3(int),所以计算出的结果为int型
System.out.println(i1+i2);
//int —— 优先级最高的类型是i2(short),但short低于int,所以计算出的结果为int型
关系运算符返回的结果
正确,错误 通过布尔值表示 。一般跟if连用,用来判断
int n1 = 10;
int n2 = 20;
System.out.println(n1 > n2);
System.out.println(n1 < n2);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
自增自减运算符 —— 一元运算符
一元:一个数就能运算。
int a = 3;
int b = a++; //先给b赋值,再自增
//a++ a = a + 1
System.out.println(a); //检查此时a的值是多少
//++a a = a + 1
int c = ++a; //先自增,再给c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
初识Math类
//幂运算 2^3 2*2*2 = 8 但Java中没有^,这时就要借助工具类 Math
double pow = Math.pow(2,3);
System.out.println(pow);
逻辑运算符
与(and) 或(or) 非(!)
boolean a = true;
boolean b = false;
System.out.println(a && b); //逻辑与运算:两个变量都为真,结果才为true
System.out.println(a || b); //逻辑或运算:两个变量有一个为真,结果就为true
System.out.println(!(a && b)); //逻辑非运算:如果是真,则变为假;如果是假,则变为真
短路运算:
与(&&)运算时,如果第一个值为false,则运算停止,后面不执行了
int c = 5;
boolean d = (c<4) && (c++<10);
//c<4直接就是错的,后面(c++<10)压根就不执行;如果执行,c++就会使c变为6,但输出结果表示c还是5
System.out.println(c);
System.out.println(d);
位运算符
跟二进制有关
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001 (异或:相同为0,不相同为1)
~B = 1111 0010 (取反)
面试问: 2*8 怎么运算最快?
答:
拆分成2*(2\*2\*2)
<< 左移 相当于把数字 *2
>> 右移 相当于把数字 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
......
0000 1000 8
......
0001 0000 16
把2左移3次就相当于做了三次*2,即2*(2*2*2)
System.out.println(2<<3);
三元运算符
x ? y : z
如果 x\==true(x为真), 则结果为 y;如果 x==false(x为假), 结果为 z
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);
扩展赋值运算符
+= ,-= ,/=,*=
int a = 1;
int b = 2;
int c = 3;
a += b; //a = a + b
System.out.println(a);
c -= b; //c = c - b
System.out.println(c);
字符串连接符 —— +
加号+左右两边只要有一边出现了String字符串类型 , 就会把另一边的操作数都转换成String进行连接
a = 1;
b = 2;
System.out.println("" + a + b); //"1"+"2" = "12"
System.out.println(a + b + ""); //"1 + 2" = "3"
要是Python这样写会直接报错!!!
a = 1
b = 2
print("" + a + b)
print(a + b + "")
包机制
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间,防止类名重复。
通俗来说:包是文件夹,里面的文件是类
。
创建包:
包语句的语法格式为:
package pkg1 [ . pkg2 [ . pkg3… ]];
例如,新建一个Yes.java 文件,它的内容是:
package java.pro1.base;
public class Yes {
}
导包:
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。
使用import
语句可以完成此功能。
import package1 [. package2… ].( classname |* );
当我们想用Data函数时,就需要先导包了!不导包是没法用滴
import java.util.Date;
注意!:
package
必须放在最上面
import
必须放在package下面
- 不要让包里面的名字重复(导入包的类名和当前类名不要重复)
通配符 —— *
导入包下的所有类
import java.util.*;