跟着黑马程序员Java零基础视频教程的笔记.简要提纲版,有问题可以看视频解答.此篇是p1-p39.
黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)_哔哩哔哩_bilibili
一、命令行
1.打开qq应用不用cd,直接输入qq.exe
C:\Program Files (x86)\Tencent\QQ\Bin>QQ.exe
2.环境变量:任意目录下都能直接打开QQ
把QQ路径记录在电脑的环境变量
系统属性-环境变量-系统变量-path-输入(到Bin的层级就好)
二、java入门
1.javac编译:jdk提供的编译工具,把javac HelloWorld.exe文件编译成class文件
java执行:jdk提供的编译工具,运行class文件(字节码文件),不加后缀名
javac HelloWorld.exe
java HelloWorld
2.nodepad高级记事本
设置-首选项-新建-选ANSI:可以写中文了
3.java长期支持版本:java5、java8、java17,其中java8等于jdk1.8
4.se:桌面应用,计算器、坦克大战
me:小型版,嵌入式设备、小型移动设备。被安卓、ios替代
ee:web方向网站开发。浏览器开发、服务器开发。
5.用途
企业级应用开发:
微服务、sringcloud
大数据开发
6.编译型:不同操作系统需要不同的编译器
解释型:读一行解释一行
混合型:java——整体编译成字节码文件class,运行在虚拟机上。不同操作系统有不同的虚拟机。
7.JVM
不同操作系统的JVM能让相同的字节码在不同的操作系统中得出一样的结果。
这是字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。
8.JRE:
只需要运行java不编写就用jre。包括JVM,核心类库和运行工具
三、基础语法
1.注释
多行:/*注释*/
文档:/**注释*/
写注释不要嵌套
注释不参与编译和运行
2.关键字
都是小写,有特殊颜色
class:创建一个类,类是java的最基本单元。大括号,没有;
3.字面量(常量)
告诉程序员在程序中的书写形式
整数
小数
字符串:双引号,“hello”
字符:单引号,‘h’,‘e’,只能有一个,‘he’就是错的
布尔:值为true或false
空:值为null,不能被直接打印
4.字符类型中特殊的一种:转义字符
‘\t’制表符:把前面字符串的长度补齐到8或者8的倍数
public class Main {
public static void main(String[] args) {
System.out.println("name"+'\t'+"name");
System.out.println("12345"+'\t'+'e');
}
}
5.变量
存储数据的小空间
使用方式:
1)输出打印
2)参与运算
3)修改记录的值:变量同时只能记录一个值
使用之前一定要初始化(赋值),名字不可以重复定义
6.计算机的存储规则
文本、图片、声音3类数据,以2进制存储
文本包括:数字、字母、汉字
二进制:0b开头
八进制:0开头
十六进制:0x开头
public class Main {
public static void main(String[] args) {
System.out.println(0b110);//二进制
System.out.println(017);//八进制
System.out.println(0x113);//十六进制
}
}
为什么用二进制?
高电平(>3.3v)——1
低电平(
进制的转化?
k进制转十进制:数*权重
十进制转k进制:除基取余法
图像:
黑白图:01
灰度图:
彩色图:每个像素点记录不一样的颜色
RGB:红绿蓝组成了每个像素点
声音:
波形图:音质好就是采样数据点多
7.数据类型
基本数据类型和引用数据类型
基本数据类型包括:整数\浮点数\字符\布尔类型
char 2
boolean 1
int 4
long 8:定义的时候要在数据后面加L这个后缀
long a = 9999999L;
byte 1
short 2
float 4 :后缀F
double 8 :后缀D可加可不加
8.标识符:名字
要求:
数字\字母\下划线\$
不能用数字开头
不能是关键字
区分大小写
建议:
小驼峰:变量\方法
firstName
isTrue()
大驼峰:类名
Student
SpecialStudent
9.键盘录入
Scanner类
导包-创建对象-接收数据
import java.utils.Scanner;
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
import java.util.Scanner;public class Main {
public static void main(String[] args) {
//回车是输入完毕的标志
Scanner sc1 = new Scanner(System.in);
int str1= sc1.nextInt();
Scanner sc2 = new Scanner(System.in);
int str2= sc2.nextInt();
System.out.println(str1 + str2);
}
}
10.idea操作
目录结构:
项目-模块=包=类
包的命名:公司域名反写,多级包
psvm:快捷写主程序
修改类名:右键refactor-rename
11.运算符
算数: + - * \ %
System.out.println(1.1 + 1.01);//结果是2.1100000000000003
//如果是小数可能不精确
除法:
整数除不尽时,结果自动取整
10 / 3 = 3
取余:
10 / 3 = 1
取余的用处:
a判断整除b判断偶数c取位数
练习:
import java.util.Scanner;public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int one = 0, ten = 0, thousand = 0;
one = num % 10;
ten = num / 10 % 10;
thousand = num / 100 % 10;
System.out.println(thousand + " " + ten + " " + one);
}
}
12.隐式转换和强制转换
隐式:取值范围小的自动转成大的(自动)
byte
byte\short\char类型运算的时候都会先提升为int类型再计算
public class HelloWorld {
public static void main(String[] args) {
byte a = 10;
byte b = 23;
System.out.println(a + b);//这里的a+b不是byte,是int
}
}
强制:取值范围大的转换为小的(我们要写)
float a = 2.3F; int b = (int)a;
如果数据比较大,容易发生错误.
练习
byte a =100;
byte b = 100;
byte c = (int)(a + b);//会发生错误,因为要转换的数据过大
13.字符串相加
当+中间出现字符串的时候,+不再是算术运算符,成了一个拼接的工具,产生一个新的字符串.
public class HelloWorld {
public static void main(String[] args) {
byte a = 10;
byte b = 23;
System.out.println(a + b);//33
System.out.println(a + "哈哈" + b);//10哈哈23
System.out.println(a + b + "哈哈");//33哈哈
System.out.println(1 + 2 + "abc" + 2 + 1);//3abc21
}
}
1+99+"黑马"结果是100黑马,因为1和99之间没有字符串,+还是运算符.
也可以看做从前往后算,先看1+99.没有字符串参与,因此不是拼接.
14.字符相加
字符+字符
或
字符+数字
通过ASCII码将字符转化成对应的整数
记住:A65 a97
15.自增自减++ --,在前就先加后赋值,在后就先赋值后加
16.赋值运算符:
=
+= -= *= /= %=
底层含一个强转
17.关系运算符: >=
结果都是布尔类型
18.逻辑运算符
且: & 都真才真,一假则假
或: | 都假才假,一真则真
非: !
异或: ^ 相同为fasle,不同为true.(记忆,不同才对)
&& || 和& |的区别
&&:且,这种当前面不合格的时候就自动不判断后面了,不想第一个还会判断后一个
可以用||连接3个判断
19.三元运算符
a?b:c;
a真,执行b
a假,执行c
这个结果必须被使用,否则报错
int res = a ? b : c;
import java.util.Scanner;public class Main {
public static void main(String[] args) {
Scanner sc1 = new Scanner(System.in);
int weight1 = sc1.nextInt();
Scanner sc2 = new Scanner(System.in);
int weight2 = sc2.nextInt();
System.out.println(weight1 == weight2 ? "相同" : "不同");
}
}
20.运算优先级
背不下来就无脑小括号,最优先
21.原码\反码\补码
原码:最左侧是符号位
弊端是负数运算是错的,和预期相反.
反码:解决原码不能计算负数.
因此正数和原码一样.负数:符号位不变,其余各位取反
弊端:计算的时候跨零会出错,比如-5+7
因为反码的0有+-之分,被算了两遍
补码:去掉反码中的0
补码的0只能是0000 0000
负数时候是反码的基础上加1
-128规定为1000 0000
所以隐式转换就是前面补0
强转就是前面去0
& |:0false 1true
>>:向右移动,高位补零或一(根据原本的符号位是什么补)
>>>:向右移动,高位补零(无论正负)
22.分支(if\switch)
if () {
statement1;
}
括号里为true就执行下面的语句.括号里是布尔类型则不用==了
if () {
statement1;
} else {
statement2;
}
if () {
statement1;
} else if (){
statement2;
} else{
statement3;
}
switch-case:
switch (表达式) {
case 值1:
语句1;
break;
case 值2:
语句2:
break;
default:
语句3
break;
}
default类似于else
表达式取值是byte\short\int\char\string(JDK7+)
case后面不能是变量,只能是字面量
public class Main {
public static void main(String[] args) {
String noodles = "兰州拉面";
switch (noodles) {
case "兰州拉面":
System.out.println("是我想吃的面");
break;
case "热干面":
System.out.println("不是我想吃的面");
break;
default:
System.out.println("不是我想吃的面");
break;
}
}
}
ps:
1.default省略,但是没有匹配的case,会自动退出
2.default不一定要写到最下面
3.case穿透:
没有break会这样.每个case符合了以后不退出switch.
仅从第一个符合的case开始连续穿透
public class Main {
public static void main(String[] args) {
String noodles = "兰州拉面";
switch (noodles) {
case "热干面":
System.out.println("不是我想吃的面");
//break;
case "兰州拉面":
System.out.println("是我想吃的面");
//break;
default:
System.out.println("不是我想吃的面,吃方便面");
//break;
case "油泼面":
System.out.println("吃油泼面");
}
}
}
break结束最近的循环.
4.case穿透的使用场景:多个case内的语句重复
//实例是热干面和兰州拉面都需要输出"是我想吃的"
public class Main {
public static void main(String[] args) {
String noodles = "兰州拉面";
switch (noodles) {
case "热干面","兰州拉面":
System.out.println("是我想吃的面");
break;
default:
System.out.println("不是我想吃的面,吃方便面");
break;
case "油泼面":
System.out.println("油泼面不是我想吃的面");
break;
}
}
}
5.JDK12新特性 新的写法
不用写break也不会造成case穿透了,改成了case value->{}
import java.util.Scanner;public class Main {
public static void main(String[] args) {
String noodles = "兰州拉面";
switch (noodles) {
case "热干面"->{
System.out.println("热干面不是我想吃的面");
}
case "兰州拉面"->{
System.out.println("是我想吃的面");
}
default->{
System.out.println("不是我想吃的面,吃方便面");
}
case "油泼面"->{
System.out.println("油泼面不是我想吃的面");
}
}
}
}
如果是语句是单行,大括号也可以省略
import java.util.Scanner;public class Main {
public static void main(String[] args) {
String noodles = "兰州拉面";
switch (noodles) {
case "热干面"-> System.out.println("热干面不是我想吃的面");
case "兰州拉面"-> System.out.println("是我想吃的面");
default-> System.out.println("不是我想吃的面,吃方便面");
case "油泼面"-> System.out.println("油泼面不是我想吃的面");
}
}
}
还可以赋值
6.swtich和elseif分别的使用场景
switch是离散的范围,elseif是连续的范围