Javase基础知识详细总结(1)

本文介绍了Java的基础语法,包括标识符、字面量和书写规范。详细讲解了基本数据类型和运算符,如赋值、算术和逻辑运算。还涉及了JVM的功能和结构,以及控制语句(选择、循环和转向)。此外,讨论了递归、用户输入、对象创建、实例与静态的区别、构造方法、封装、继承、多态和super关键字的使用。
摘要由CSDN通过智能技术生成

索引:

  1. java基础语法;

  1. 基本数据类型和运算符;

  1. JVM虚拟机的功能和结构;

  1. java中的控制语句:选择,循环和转向;

  1. 递归的使用;

  1. 接收用户键盘输入,以及对象的创建;

  1. 实例和静态的区别以及关系;

  1. 构造方法以及变量类型;

  1. 静态代码块和实例代码块;

  1. this关键字;

  1. 封装;

  1. 继承;

  1. 多态

  1. super关键字;

一.java的基础语法:

1.标识符:

java中可以自己命名的都是标识符

一个合法的标识符只能由数字,字母,下划线,美元符号组成,且不能以数字开头

标识符需遵守驼峰命名规范,也就是以字母大小写来区分一句话由几个单词组成

关键字:

关键字是java提前定义好了,且带有特殊意义的单词,不能当做标识符,且严格遵循大小写

如:

public static void class byte short int long float double

boolean char true false if while for private protected .......等等都是关键字

2.字面量:

字面量在java中用于表示数据,字面量的种类有很多,如

整数型:1, 2, 3

浮点型:1.2, 1.3

布尔型:true, false(表示真或假)

字符型:'a', 'b'(在' '里面放一个字符或数字表示)

字符串型:"a", "ab"(在" "里面放一个或多个字符或数字表示)

3.其他书写规范:

类名,接口名:首字母大写,后面每个单词首字母大写

变量名,方法名:首字母小写,后面每个单词首字母大写

常量名:全部大写

4.转义字符"\":

"\n"表示换行

"\t"表示制表符,在打印输出时会变成制表符

\"表示普通"

\'表示普通'

\\表示普通\

等...

二.基本数据类型和运算符:

1.声明一个变量:

int a = 1;//字面量类型 标识符 赋值运算符 字面量;

声明变量时的位置决定了变量的类型,变量类型分为成员变量和局部变量

成员变量:在类中方法外声明的变量称为成员变量,可在整个类中使用

局部变量:在{ }(除类的{ }) 范围内声明的变量叫做局部变量,只能在{ }范围内使用

注意:局部变量和成员变量的取名可以相同,当发生重名变量时,java会采取就近原则

2.各类运算符的使用:

赋值运算符:

=: 将=右边的值赋给左边变量

+=: a += b等同于a = a + b;(其他同类型赋值运算符同理)

注意:a = b + 1;假如b是一个char类型,加上一个整数型的1,那么结果会变成int类型

而使用b += 1;结果还是char类型,所以,+=是不会改变数据类型的

算数运算符:

+(加),-(减),*(乘),/(除),%(相除取余数)

++,--: 自加一和自减一

注意:

int a = 1;
System.out.println(a++);//输出1
System.out.println(a);//输出2
//在++放在变量后时,会先执行java语句后再自加一(--同理)
//但如果++放在变量前,则会先自加一,再执行,如:
a = 1;
System.out.println(++a);//输出2

比较运算符:

顾名思义,但需要注意的是==是判断是否相等,!=表示判断是否不相等

比较运算符的结果必定是布尔类型,也就是true和false

100 != 200//结果为true
100 >= 200//结果为false

逻辑运算符:

逻辑运算符的两边必须放上布尔类型表达式

&& :短路与,当两边都为true时,则整体为true,否则为false

||: 短路或,当两边存在至少一个true时,则整体为true,否则为false

& , | :逻辑与和逻辑或,用法和上述相同,但更耗费内存,通常不使用(区别在于短路与和短路或,在只判断左边就能得出结果的情况下,不执行右边的表达式,而逻辑与和逻辑或会继续执行右边表达式)

^: 当两边都为true,或都为false时为true,否则为false

三目运算符:

布尔表达式 java语句 : java语句;

当布尔表达式为true时,则执行左边语句,否则执行右边

3.基本数据类型的一些特点

数据类型

byte(字节型)

short(短整型)

int(整型)

long(长整型)

float(单精度)

double(双精度)

boolean(布尔型)

char(字符型)

占用字节

1

2

4

8

4

8

1

2

取值范围

-128~127

-32768~32767

-2147483648~2147483647

-2的63次方~2的63次方-1

-32768~32767

-2的63次方~2的63次方-1

true,false

0~65535

缺省默认值

0

0

0

0L

0.0f

0.0

false

'\u0000'

注意:因为浮点型包含小数,所以实际上浮点型能表示的数比整数型要多的多

还有short和char的容量虽然一样,但char能表示更大的数

4.类型转换

小转大(如short转int,自动类型转换,不会损失精度)

short a = 1;
int b = a;//自动类型转换

大转小(如long转int,强制类型转换,如果值大于目标类型的取值范围,则会损失精度)

long a = 1L;
int b = (int)a;//强制类型转换,需要强制类型转换符

三.JVM虚拟机的功能和结构:

如上.

四.java中的控制语句:选择,循环和转向:

1.选择语句:

  • if的几种用法

1)if(布尔表达式){ }

如果if内的布尔表达式为true,则执行if里的java语句

2)if(布尔表达式){ }

else if(布尔表达式){ }

如果未通过第一层if判断,则继续往下进行判断,可以重复嵌套

3)if(布尔表达式){ }

else { }

布尔表达式为true,则执行if中java语句,为false,则执行else语句

这种用法的优点是,必定执行其中一个java语句

  • switch语句

switch(值){

case 值1:

java语句;

java语句;

break;

case 值2:

java语句;

java语句;

break;

default:

java语句;

}

以上是一个完整的switch语句:

其中:break;语句不是必须的,default分支也不是必须的

switch支持int类型和String类型

执行原理:switch的值会与值1比较是否相等,遇到break停止执行

相等则执行,不相等则继续与值2比较,如果没有遇到break则会发生case穿透现象

如果所有分支都不执行,则执行default分支

可以一条代码写多个case,叫做case合并

case也可以取多个值

2.循环语句

break;//终止循环

continue;//终止此次循环

以上代码属于转向语句,可用于循环语句中

  • for循环

1)语法:

for(初始化表达式;布尔表达式;更新表达式){

循环体;

}

执行顺序:

先执行初始化表达式,再判断布尔表达式是否为true,如为true,则执行循环体,再执行更新表达式,再进行布尔判断,直到布尔表达式为false则终止

2)for循环嵌套,以及终止指定循环

a:for(初始化表达式;布尔表达式;更新表达式){

b:for(初始化表达式;布尔表达式;更新表达式){

break a;//用这种方式可以在内循环中终止外循环,但并不常用

}

}

  • while循环和do....while循环

语法:

while(布尔表达式){

循环体;

}

执行顺序:

布尔表达式为true时,则执行循环体,直到布尔表达式为false时停止

do{

循环体;

}while(布尔表达式);

执行顺序:

和while相反,do..while先执行循环体,再对布尔表达式进行判断

3.转向语句

五.递归的使用:

递归的就是return时调用自己

原理就是return时创建一个和自己一样的方法(需要压栈)将参数传入进行计算,依次类推直到满足条件

就会从最后一个方法逐个返回目标值到第一个方法,此时弹栈

递归非常耗费内存,如果递归没有结束条件,很容易引起栈内存溢出

六.接收用户键盘输入,以及对象的创建:

  • 接收用户键盘输出使用的是java.util包下的Scanner方法

java.util.Scanner s = new java.util.Scanner(System.in);
//将用户输入的数据的内存地址保存在s中,这属于创建对象

可以借用Scanner中的方法将键盘输入的数据转化为指定类型

如:

next();//转化为字符串,并删除空格

nextLine();//转化为字符串

nextInt();//转化为int类型

  • 创建对象

在本类中想要使用其他类中的实例方法时就需要用到创建对象

创建对象语法如上图

class a = new class();//假设class是一个其他类

new class();就是一个对象的内存地址,该内存地址被赋值给a

此时该对象会在jvm的堆内存中开辟空间,保存在堆内存中

而作为对象内存地址的a保存在栈内存中,该内存地址指向堆内存中的对应对象

此时a可代替class的类名使用

a属于引用数据类型

七.实例和静态的区别以及关系:

该部分内容如上图所示

八.构造方法以及变量类型:

1.构造方法:

构造方法的语法结构是:

{修饰符列表} 构造方法名 (形式参数列表){

构造方法体;

一般在构造方法体中给属性赋值,完成属性的初始化.

}

构造方法在创建对象时调用

构造方法分为无参构造和有参构造(一个类中无参必须要写,不写形式参数列表就是无参构造)

class a = new class(实际参数列表);

创建对象时会调用形式参数列表和实际参数列表相同的构造方法,这里涉及到方法重载机制

2.方法重载机制overload

当有多个功能类似的方法时可以给他们取一样的方法名,会自动匹配相应的方法

什么情况下会发生方法的重载?

1 在同一个类当中

2 方法名相同

3 参数列表不同(包括:参数个数不同,参数的类型不同,参数的顺序不同)

与返回值类型和修饰符无关

九.静态代码块和实例代码块:

静态代码块在类加载时执行,静态代码块并不常用,主要用于记录类加载的日志,即类加载的时间信息

实例代码块在创建对象时执行

十.this关键字:

注意:this()的括号表示实参,里面写错了

this表示内存地址指向自身的引用,一般用于同名变量的区分

this(实际参数列表)表示调用自身类中的构造方法

只能出现在构造方法的第一排

注意:this属于实例相关,不能在静态方法中使用

十一.封装:

封装需要用到private关键字

private和public一样都属于修饰符列表,private表示私有的

既能修饰变量也能修饰方法

被private修饰的方法无法被继承,且只能在本类中使用,没有办法在其他类中使用被private修饰的方法

同样,被private修饰的变量也只能在本类中使用,但可以通过set和get方法进行写入和修改,如上图.

十二.继承:

继承就是使用extends关键字

class a extend b{

}

表示a类继承b类除构造方法以外所有内容,详细解说如上图

子类中的一个方法如果和父类中的一个方法除了访问权限(访问权限可以更高,也可以不变,但不能变低)完全相同时(图中红字部分),就会覆盖掉父类的方法(称为方法的覆盖或者说方法的重写)

十三.多态:

1.多态的定义:

多态表示多种形态

编译时一种形态

运行时另一种形态

  1. 向下转型和向上转型

1)向上转型

父类 a = new 子类();//前提是子类必须重写父类的一个方法

父类对象指向子类引用,属于向上转型

编译时编译器会绑定父类当中的指定方法(静态绑定)

运行时实际上参与的是子类中的指定方法(动态绑定)

  1. 向下转型

向下转型用于父类调用子类独有方法时

需要使用强转符号将父类强转成子类

父类 a = new 子类();

子类 b = (子类)a;

3.instanceof关键字

但需要注意的是如果有多个子类

在不知道想要强转的变量是否指向指定子类时

所以需要使用instanceof关键字对其进行判断以保证程序运行正常,使用方法见上图

十四.super关键字:

super和this类似

super表示指向父类对象的引用

super()表示调用父类的构造方法

只能出现在构造方法的第一排,即使不写也会默认存在

详细请见上图

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮旧浮梦913

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值