Java笔记

我自己总结的Java笔记

基本的window相关的DOS命令

exit: 退出
cls:清屏
dir:列出当前目录下的所有子文件/子目录
cd:改变目录

路径包括绝对路径和相对路径
绝对路径:从盘符作为出发点的路径
相对路径:从当前所在的路径作为出发点

cd…:回到上级目录
cd\:直接回到根目录
c/d + enter :切换盘符
md :创建目录
rd:删除目录

Java语言的特性

简单性,面向对象性,可移植性,多线程,跨平台,健壮性等

类的加载与执行

编译:(javac)
.java(源文件)——>.class(字节码文件)
运行:(java)
类装载器(clasLoader) ——Java虚拟机(JVM)——操作系统——硬件平台

Java的语言基础

一、标识符
1.在Java源程序中有权利自己命名的单词都是标识符,包括类名,方法名,变量名,接口名,常量名…
2.标识符的命名规则:只能由数字,字母,下划线和$组成,且不能以数字开头,严格区分大小写。关键字不能作为标识符
3.标识符的命名规范
见名知意
驼峰命名方式
(1)类名,接口名;首字母大写,后面每个单词的首字母大写
(2)变量名,方法名:首字母小写,后面每个单词的字母大写
(3)常量名:全部大写,多个单次时每个单词之间用下划线连接
(4)包名:全部小写

二、关键字(全是小写)
class interface enum byte short int long double float char 等等
避开保留字(goto,const)

三变量
1.格式 :数据类型 变量名 = 变量值;
2.变量必须先声明再使用。变量在作用域内有效,同一个作用域,不能声明两个同名的变量
3.数据类型
(1)基本数据类型:

数值型;

整数类型;byte,short,int,long
浮点类型;double ,float
字符型;char
布尔型;boolean)

(2)引用数据类型

类 :class (字符串在这里)
接口;interface
数组:array

基本数据类型之间的运算规则

1.自动类型提升
byte ,char,short ->int -> long ->float ->double
容量小的数据类型变量与容量大的做运算时,自动提升为容量大的数据类型

2.强制类型转换(自动类型提升的逆运算)
使用强制转换福
可能导致精度损失

3.整型常量默认为int型,浮点型常量默认为double型

4.String型可以和8种基本类型的数据变量做连接运算,运算的结果还是String类型

原码:将一个数用二进制表示,最高位是符号位
反码:负数的反码将原码按位取反,最高位是1
补码:负数的补码是反码+1

运算符

算术运算符: +, - ,, /, %(如果有负数,结果的 符号与被模数一致), ++,–,+(连接)
赋值运算符: =, += ,-= ,
= /= ,%= (支持连续赋值,不会改变数据类型)
比较运算符(结果是boolean类型):==,!=,<,>,<=,>=,instanceof(检查是否是类的对象)
逻辑运算符:&,&&(短路与),|,||(短路或),^|(异或,不同为1,相同为0)
注:&和&&的运算结果相同
相同点:符号左边是true时,二者都会执行符号右边的运算
不同点:符号左边是false时,&会执行符号右边的运算,&&不会执行符号右边的运算

注:|和||的运算结果相同
相同点:符号左边为false时,二者都会进行符号右边的操作
不同点:符号左边是true时,|会执行符号右边的运算,||不会执行符号右边的运算

位运算符(左右都是数值,对整数的二进制进行运算):<<,>>,>>>(无符号右移),&,|,^,~
注意:左移一位其实就是乘以2,右移一位其实就是除以2
右移时,如果原数是正数,则补0;原数是负数,则补1
无符号右移:无论原数是正数还是负数,空位用0补

三元运算符:(条件表达式)?表达式1:表达式2;

程序流程控制

顺序结构
分支结构(if…else 和 switch …case)
循环结构

使用Scanner从键盘获取不同类的变量

1.导包
2.Scanner实例化
3.调用Scanner类的相关方法,来获取指定类型的变量

对于String类型的获取 scan.next();
对于int,double,boolean类型的获取 scan.nextInt() scan.nextDouble() scan.nextBoolean()
对于char型,Scanner没有提供相关的方法,只能获取一个字符串然后进行索引

如何获取一个随机数?
假设想要获取数的区间在[a,b]
则 (int)(Math.random()*(b-a+1)+a)

switch - case

switch(表达式){
case 常量1:
语句1;
break;
case常量2 :
语句2 ;
break;

default:
语句;
break;
}

switch表达式里面只能是如下6种数据类型:
byte,short,char,int,枚举类型,String类型
default是可选且位置灵活的
break不是必须的

循环结构

for循环
while循环
do-while循环

组成部分
(1)初始化部分
(2)循环条件
(3)循环体部分
(4)迭代部分

for(初始化部分;循环条件;迭代部分){
循环体;
}

初始化部分
while(循环条件){
循环体;
迭代部分;
}

初始化部分
do{
循环体;
迭代部分
while(循环条件)
}

总结:外层循环控制行数,内层循环控制列数

Math.sqrt(i) 开方
long start = System.currentTimeMillis(); 获取当前时间距离**的秒数

特殊关键字的使用

break 和continue
都有就近原则,在它们的后面不能再声明执行语句

break 使用在switch -case中或循环结构中(用来结束当前循环)
continue使用在循环结构中(用来结束当次循环)

return 用来结束当前方法

可以用表情结束指定的循环
label :…
break label;
continue label;

衡量代码的优劣性

正确性
可读性
健壮性
运行效率和存储空间

数组(Array)

数组是引用数据类型变量,但是数组中的元素可以使基本数据类型变量也可以是引用数据类型变量
创建数组会在内存中年开辟一整块连续的空间
数组的长度一旦确定就不能修改
数组的角标(索引)从0开始到数组的长度-1结束

一、数组的初始化
一维数组
静态初始化:int[ ] arr = new int[ ]{2,3,4,5,6};
动态初始化:int[ ] arr1 = new int [5];

一维数组元素的默认初始化值
(1)整型:0
(2)浮点型:0.0
(3)char型:ASCII中的0
(4)boolean:false
(5)String类型:null 不是"null"

二维数组
静态初始化
int[ ] [ ] arr2 = new int [ ] [ ] {(2,3),(1,2),(5),(6,8,9)};
动态初始化
int [ ] [ ] arr3 = new int [ 3][ ];

二维数组的默认初始化值
int [ ] [ ] arr3 = new int [3][2];
外层为地址值,内层与一位数组相同
int [ ] [ ] arr3 = new int [ 3][ ];
外层为null,内层无法调用报错

数组中的常见算法

1.数组中元素的赋值(杨辉三角,回形数)
2.求数值型数组元素中的max,min,sum,aver;
3.数组的复制,反转,查找(线性查找和二分法查找)
4.数组元素的排序算法

面向对象

三条主线
1.Java类及类的成员:属性,方法,构造器,代码块,内部类
2.面向对象的三大特征:封装性,继承性,多态性
3.其他关键字;this,super,static,interface,abstract,final,package,import等

**面向对象(OOP)**强调具备了功能的对象,以类/对象为最小单位,强调谁来做
面向过程(POP)强调功能行为,以函数为最小单位,强调怎么做

一、面向对象的两个要素
类:对一类事物的描述,抽象概念上的定义
对象:是实际存在的该类事物的个体,也称作实例

常见的类的成员
属性=成员变量=field=域
方法=成员方法=函数=method

创建类的对象就是 类的实例化

二、类和对象的使用
1.创建类,设计类的成员
2.创建类的对象
3.通过“对象.属性”或“对象.方法”调用对象的结构

三、如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)
意味着如果修改一个对象的属性,不影响另一个对象的属性

类中属性的使用

属性(成员变量)vs局部变量
不同点:
(1)在类中声明的位置不同
属性(成员变量)直接定义在类的 {}中
局部变量声明在方法内。方法形参,代码块内,构造器形参,构造器内部的变量
(2)权限修饰符不同
属性(成员变量)可以使用public, private ,缺省,protected
局部变量不可以使用权限修饰符
(3)关于默认初始化值
属性(成员变量)是类的属性,根据其类型都有默认初始化值
局部变量没有默认初始化值,意味着在调用局部变量前,一定要显式赋值。特别地,形参在调用时赋值
(4)二者在内存中加载的位置不同
属性(成员变量)加载到堆空间
局部变量加载到栈空间

相同点:
定义变量的格式
先声明再使用
都有对应的作用域

万事万物皆对象

1.在Java语言中,将功能,结构封装到类中,通过类的实例化,来调用具体的结构功能
2.涉及到Java与前端HTML后端数据库交互时,前后端的结构在Java层面交互时,都体现为类,对象

再谈方法

1.方法的重载:两同一不同,同一个类,同一个方法名,不同的形参列表(个数,类型),与方法的权限修饰符,返回值类型,形参变量名,方法体都没有关系
2.可变形参的方法
(1)格式: 数据类型 … 变量名 eg. String …stus
(2)当调用可变个数形参的方法时,传入的参数个数可以是0,1,2…个
(3)可变个数形参的方法与本类中的方法名相同,形参不同的方法之间构成重载
(4)可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不能够成重载
(5)可变个数形参在方法的形参中,一定要声明在末尾,且最多只有1个

3.方法参数的值传递机制
如果变量是基本数据类型,则赋值是变量 所保存的数据值
如果变量是引用数据类型,则赋值是变量所保存的数据的地址值

方法形参的值传递机制

形参

方法定义时,声明的小括号内的参数

实参

方法调用时,传递给形参的数据

值传递机制

如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
如果参数是引用数据类型,此时实参赋给形参的是实参实际存储数据(对象,数组)的地址值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值