JAVA入门基础_JAVA基础知识(二)

目录

JAVA基础知识

理解类、方法、修饰符、对象(实例)的含义

一个类相当于一个模板,我们可以使用类来创建对象(实例)

// 定义一个学生类,我们发现类中有着学生的状态和行为
class Student{
	// 学生的姓名
	String name;
	// 学生的年龄
	int age;
	// 学生可以进行的打游戏行为
	void playGame(){System.out.println("打游戏");}
	// 学生可以进行的学习行为
	void study(){System.out.println(name + "学习中");}
}

由上可知,类就是定义了状态和行为的模板。

方法的定义、如何组成

方法的定义

  • 可以把方法理解为一个行为,需要用方法去达成某种目的。

  • 例如一个方法的名字叫做add,主要是用于添加。

  • 大致理解一下方法就是一组语句的集合,用于完成某个功能

如何组成

  1. 修饰符:告诉编译器如何调用该方法,定义了该方法的访问类型

  2. 返回值类型:该方法可能会返回一个值,而这里定义了会返回的值的类型,有一个特殊的返回值叫做void(无返回值的意思)

  3. 方法名:顾名思义,方法的名字,定义的规则需要遵循标识符的规范

  4. 传入的参数:方法名后的小括号中可以写多个参数,写的时候要遵循 参数类型 参数名的规则,在这里写的参数均为形式参数(当这个方法被使用时,传入的数据叫做实际参数),为了传递数据给方法使用。

  5. 方法体:就是方法中所编写的代码
    image

该图片来自于菜鸟教程

修饰符

java中一共有4个访问修饰符,用于控制程序调用时的访问权限。
可以应用于类上、方法上、变量、常量

当前类 当前包 同一个包下 子类(同一个包下) 子类(不同包下) 不同包
private
default
protected
public

| 当前类 | 当前包 | 同一个包下 |子类(同一个包下) | 子类(不同包下) | 不同包 |
| ------------ | ------------ | ------------ | ------------ | ------------ |
| private | √ | | | | |
| default | √ | √ | √ | √ |
| protected | √ | √ | √ | √ |
| public |√ | √ | √ | √ |√ |

对象(实例)

通过对类的理解,我们了解到类就是定义了状态和行为的模板,但是呢,我们发现并没有一个具体的学生。而对象就相当于是一个具体的学生,类就是一个学生的模板,而每一个具体的学生都是一个个的对象。

class Student{
	// 学生的姓名
	String name;
	// 学生的年龄
	int age;
	// 学生可以进行的打游戏行为
	void playGame(){System.out.println("打游戏");}
	// 学生可以进行的学习行为
	void study(){System.out.println(name + "学习中");}
}
public class Test{
	public static void main(String[] args) {
		// 创建一个学生
		Student stu1 = new Student();
		stu1.name = "张三";
		stu1.age = 15;
		
		// 创建第二个学生
		Student stu2 = new Student();
		stu2.name = "王五";
		stu2.age = 19;
	}

}

注释的含义及使用

注释是就是在编写程序时,用来给程序员自己看到数据,注释不参与编译跟运行。

// 这是一条单行数据(常用)

/*
  这是一个多行注释,我是第一行(常用)
  这是一个多行注释,我是第二行(常用)
*/

/**
   我是一个DOC文档注释。
*/

变量、标识符及数据类型

什么是变量及分类

  • 什么是变量?
    变量就是可以变化的量。本质就是一片内存空间,这片内存空间中的数据可以灵活变换。
  • 变量的分类
    1. 基本数据类型(由java定义)
    2. 引用数据类型(其实就是对象)

什么是标识符及命名规则

  • 什么是标识符?
    标识符:可以理解为自定义的英文名称,可以用于命名变量、方法、类、接口等。
  • 标识符命名规则
    只需要记住标识符的首个字符:只能是[a-z][A-Z]、数字、下划线_、美元符号$开头组成。不能包含其他的符号,并且不能以数字开头。

变量的基本数据类型

// 整数型
1.byte  字节类型,占据一个1个字节,1个字节等于8bit,有效范围为 2^7 ~ 2^7-1  -128~127
2.short 短整型,占据2个字节,有效范围为 2^16 ~ 2^16-1
3.int   整形,占据4个字节
4.long  长整形,占据8个字节

// 浮点型
5.float 单精度浮点型(小数类型),占据4个字节
6.double 双精度浮点型(小数类型),占据8个字节

// 字符型
7.char 字符型,占据2个字节

// 布尔型
8.boolean 布尔型,只有true(真)与false(假)两个值

在java中创建基础数据类型的变量

小提示,整数型的数据默认为int型,浮点型的数据默认为double型,如果需要使用long类型或float类型则需要在整数型数据最后加上L或者F(大小写都行)

public class VariableDemo {
    public static void main(String[] args) {
        // 整数型
        byte b1 = 127;
        short s1 = 246;
        int i1 = 233;
        long l1 = 44444L; 
        
        // 浮点型
        float f1 = 1.254F;
        double d1 = 2.268D;
        
        // 布尔型
        boolean bool1 = true;
        
        // 字符型
        char c1 = 'g';
    }
}

变量的作用域以及成员变量、局部变量的称呼(暂时可以先不理解)

变量定义在方法中时(局部变量)

只有在当前方法中可以使用该变量

变量定义在类中时(成员变量)

该类中的所有方法都可以使用该变量,但是此种变量在各个对象当中是独立的。(例如该类有2个对象,那么对于这2个对象来说,每个类的变量都是独立的)

变量定义为static静态变量时(类变量)

可以直接使用类名调用,并且记住一点:只有静态可以调用静态。

当基础数据类型在进行 +(加) 运算时遇到String类型

任何基础数据类型在加了一个String类型的变量后,都会变成String字符串类型拼接。
例如:
int a = 3;
int b = 4;
String s = "";
// 结果为34
System.out.println(s + a + b);

基础类型之间进行运算的转换规则(整数型、浮点型)

向上转型

short s1 = 10;
short s2 = 13;
s1与s2进行计算时,会转换为int,因为int是java默认的整数类型。

byte byte1 = 10;
int int1 = 120;
切记 : int1 + byte1 后,得到的数据类型是int,因为当相同类型的数据进行运算时,会将精度小的数据类型向精度大的数据类型转换。(向上转型)

float float1 = 12.1f;
double double1 = 13.2d;
根据上述文字描述,可知float1与double1进行计算时会将float1的数据转换为double的数据类型再进行计算。(向上转型)

向下转型

其实就是精度大的数据想要转换为精度小的数据,例如long想要转换为int,int想要转换为short等。
语法如下:

long long1 = 10L;
int int1 = (int)long1; // 将long类型的数据强制转换为int类型的数据

运算符

赋值运算符(=、+=、-=、*=、/=、%= 6个)

// 赋值运算符:=、+=、-=、*=、/=、%=
// 作用:用于给变量进行赋值,将等号右边的值赋值给左边的变量。
int a = 10;
char gender = '男';
运算符 称呼 作用
= 赋值 例如 int a =10,把10这个值赋给了变量a
+= 加等 a+=b;等价为a = a + b
-= 减等 a-=b;等价为a = a - b
*= 乘等 a*=b;等价为a = a * b
/= 除等 a/=b;等价为a = a / b
%= 模余等 a%=b;等价为a = a % b

算数运算符(7个)

加减乘除(+、-、*、/ 4个)

int a = 10;
int b = 3;

a + b; // 加法
a - b; // 减法
a * b; // 乘法
a / b; // 除法

取模运算(% 1个)

// 作用: 相当于求左边除右边后所剩下的余数。
int a = 5 % 2; // 1
int b = 5 % -2; // 1
int c = -5 % 2; // -1
int d = -5 % -2; // -1
%取余时,左右两边的符号小问题

当进行%取余时,只看左边值的正负符号。
例如上述案例当中,只有左边只是负的时候,得出的结果才为负。

自增自减运算符(++、-- 2个)

// 作用:相当于一个数进行 加一或减一 的操作
// 自增自减的符号可以添加到变量的左边或右边,例如: a++、++a、a--、--a
// a++ 的意思是当前表达式结束后在加一。 可以理解为碰到分号时,当前表达式结束。
// ++a 的意思是当前表达式结束之前再加一。
int a = 10;
int b = 20;
System.out.println(a++); // 10
System.out.println(++b); // 21

比较运算符(>、<、<=、>=、==、!= 共6个)

// 作用:比较运算符所获得的结果只能是boolean类型的,因此只有2个值,true或false
int a = 10;
int b = 20;
a > b; // 判断a是否大于b,false
a < b; // 判断a是否小于b,true
a >= b; // 判断a是否大于等于b,false
a <= b; // 判断a是否小于等于b, true
a == b; // 判断a是否等于b,false
a != b; // 判断a是否不等于b,true

==、!= 可以用来比较引用类型(比较地址)

逻辑运算符(&、&&、|、||、!、^ 6个)

// 逻辑运算符的运算结果也只有true或false,用于boolean类型的运算
运算符 称呼 作用
& true & false时,结果为false,运算符的左右边都必须为true才为true
&& 断路与 true & false时,结果为false,与上不同的是,当左边为false时,不计算右边,直接得出结果为false
| true & false时,结果为true,运算符的左右两边有任意一个true结果就为true
|| 断路或 true & false时,结果为true,与上不同的是,当左边为true时,不计算右边,直接给出结果为true
! !true的结果为false,!false的结果为true,相当于取反
^ 异或 true ^ false 为true,true ^ true为false,false ^ false为false,当运算符左右两边不一致时,结果为true,否则为false

位运算符(&、|、^、~、<<、>>、>>> 6个)

数据在计算机中的存储方式以及原码是什么

数据存储在计算机当中,都是以二进制的形式进行存储的。当将一个数转换为二进制时,那么就是这个数的原码

数据在计算时,计算机会将其转换为补码形式进行运算。

补码:其实也是一种二进制的表示形式。

1、正数的补码等于它的原码。
2、负数的补码等于它的原码取反再+1,而负数的补码转换为原码的时候则需要 (-1 取反)也就是逆运算。
3、补码与原码进行转换时,符号位不变

各位运算符的作用

&:都为1时才为1,否则为0.
|:都为0时才为0,否则为1.
^: 相互不同时为1,否则为0.
~:取反,最高符号位也要取反
<<:左移,将数据向左移动,小提示:a左移一位为a * 2^1 ,a左移2位为 a * 2^2.(不包括符号位)
>>:右移,将数据向右移动,小提示:a右移一位为a / 2^1 ,a右移2位为 a / 2^2.(不包括符号位)
>>>:带符号右移,将数据向右移动(包括符号位)
&、|、^的计算步骤
int a = 10;
int b = 5;

// 如下计算步骤将省略一部分内容,例如转换成二进制时,很多个0没有写,取反的时候会都写
a & b的计算步骤如下:
1.将 a的值转换为二进制补码,10 > 1010
2.将 b 的值转换为二进制补码,5 > 0101
3.根据&计算的规则得到:      0000,因此得到a & b的计算结果为0.

a | b的计算步骤如下:
1.将 a的值转换为二进制补码,10 > 1010
2.将 b 的值转换为二进制补码,5 > 0101
3.根据 | 计算的规则得到:    1111,因此得到a | b的计算结果为15.

a ^ b的计算步骤如下:
1.将 a的值转换为二进制补码,10 > 1010
2.将 b 的值转换为二进制补码,5 > 0101
3.根据 ^ 计算的规则得到:    1111,因此得到a ^ b的计算结果为15.

~取反的计算步骤

int a = 10;

~a的计算步骤如下:
1.将a的值转换为二进制补码,由于正数的补码就是其原码,所以不用改变即可进行运算
      00000000 00000000 00000000 00001010
2.将得到的数据取反(包括符号位)
      11111111 11111111 11111111 11110101
3.由于现在最高符号位是1,因此是一个负数了,而负数的补码转换为原码则需要2步骤(分别是减-再取反)
	3.1 先进行减一的操作
      11111111 11111111 11111111 11110100
	3.2 再进行取反的操作(符号位不用改变)
      10000000 00000000 00000000 00001011
4.最后再将这个二进制转换为十进制
	4.1 首先现在最高位(符号位)为1,因此是一个负数
	4.2 除了最后的4位为1011,其他位都为0,因此1011转换为十进制为11
	4.3 加上第一步确认的符号,因此最终结果为 -11.

<<、>>无符号左移、右移的计算步骤

int b = 6;
b<<1 的计算步骤如下:由于正数的补码就是其原码,所以不用改变即可进行运算
1.将b转换为二进制补码
	00000000 00000000 00000000 00000110
2.将所有的值都向左边移动1位
	00000000 00000000 00000000 00001100
3.将二进制转换为十进制,得到结果为12

int b = -6;
b>>1 的计算步骤如下:由于正数的补码就是其原码,所以不用改变即可进行运算
1.将b转换为二进制补码
	10000000 00000000 00000000 00000110
2.将所有的值都向右边移动1位
	10000000 00000000 00000000 00000011
3.将二进制转换为十进制,得到结果为-3

>>> 带符号右移的计算步骤

int b = -6; // b>>>1的计算步骤
1.因为b是一个负数,所以将b转换为二进制补码需要2个步骤(原码取反、加一)
	1.1 得出b的原码
		10000000 00000000 00000000 00000110
	1.2 原码取反
		11111111 11111111 11111111 11111001
	1.3 取反后再加一
		11111111 11111111 11111111 11111010
2.将符号全部右移1位
		01111111 11111111 11111111 11111101
3.由于此时已经是一个正数了,所以补码就是原码,直接将其转换为十进制
4.得到结果为2147483645,你学会了么 ~^o^~
posted @ 2022-07-25 22:27  CodeStars  阅读(323)  评论(0编辑  收藏  举报