黑马程序员Java零基础 (1) 基础语法

跟着黑马程序员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是连续的范围

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值