java 数组内容左移一位,Java-Review-Note——1.Java基础知识

Java-Review-Note——1.Java基础知识

标签: JavaStudy

1.面向过程与面向对象的对比

举个简单的例子来帮助理解:平时玩的棋类游戏

面向过程要思考的是:(步骤)

开始游戏

-> 甲方先走 -> 绘制棋盘 -> 判断输赢

-> 乙方走 -> 绘制棋盘 -> 判断输赢

-> 重复上面两个过程,直到输出最后结果

面向对象要思考的是:(功能)

分为三个部分(对象):玩家对象,棋盘系统,规则系统

流程如下:

甲乙两个玩家对象,负责接收用户的下子(输入),然后告诉棋盘系统

棋局的变化,同时刷新棋盘,并且利用规则系统进行输赢,是否犯规

等的判定。

思考:

相比前者,面向对象表现得更为灵活,试想如果想加一个

悔棋功能,哪个会更容易实现点?

笼统定义:将生活中的对象进行描述,通过类的形式,描述事物的属性和行为

面向对象是从宏观来看待问题的,面向过程则是从微观来解析问题

2.Java相关名词

四种技术架构:JAVASE,JAVAEE,JAVEME(嵌入式,已过时),JavaCard(适用于智能卡的Java平台)

Java主要优点:

面向对象,跨平台,多线程,安全,简单和健壮性,以及改进了的解释性:

为了弥补解释语言较慢的不足,Java采用预编译方法,生成字节代码,有些JAVA环境用JIT编译器将

字节码编译成机械码,直接运行,针对重复执行的服务端软件可以达到C的速度。

JVM Java虚拟机(Java Vitual Machine)

是一种想象中的机器,在实际计算机上通过软件模拟来实现,在Java运行环境中处于可信地位,

它使得Java可以跨平台执行,包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆

和一个存储方法域

运行原理:在任何一个平台上都给编译程序一个共同的接口,Java源程序经过编译器编译后变成字节码,

字节码再由虚拟机解释执行,虚拟机将每条执行的字节码送给解释器,解释器翻译成特定机器上的机器码

最后在特定的机器上运行

JRE与JDK

JRE(Java Runtime Enviroment)运行时环境: JVM + 核心类库

JDK(Java Development Kit)开发工具集: JRE + 编译器

JVM的垃圾回收机制(Garbage Collection)

回收的是没有任何引用指向的对象空间,一般情况下Java会自动进行垃圾收集

如果想要手动请求垃圾收集,可以调用system.gc()或者finalize()方法建议;

也仅仅是建议而已,并不能精确地控制垃圾回收机制的执行

环境变量配置:

新建:JAVA_HOME:jdk的安装路径,比如:C:\Program Files\Java\jdk

修改:PATH,光标移到最前面(Home键),添加:%JAVA_HOME%\bin;

新建:CLASSPATH,添加:%JAVA_HOME%\lib\tools.jar;

Java代码的运行原理:

d8e8963e06b25fb805c5137b682f3968.png

3.基础知识

运算符

算术运算符(12个)

18e91c48dbd945a1788a17a9c03c9c37.png

需要注意:

如果除号的前后都是整型,那么结果也为整型 eg:5 / 2 = 2

求余运算符通常用于整型,当然浮点型也可以,但结果是不准确的,但对精度要求

较高时就不要了,可以使用BigDecimal类型

自增和自减作为前缀还是后缀的问题:前缀:先自增,后参与运算 后缀:先参与运算,后自增

比如,这样的程序

65fb082d9d81febc18b5bc13b5dd6b79.png

输出结果:

03b8c94ad302e208a77438a56af14071.png

你算对了没?对付这种自增自减的问题,更重要的是细心,还有一点要注意的是:

自增自减运算符只能对单个变量起作用,表达式和常量是没用的

eg:(a + b)++ 想让相加后的结果+1,但是确是错的,

同样,常量也是不行的,6++,这样也是错的!切记!

逻辑运算符(7个)

61c50208af3dd6b27b57f0962d82e1a4.png

需要注意:

短路现象,区分逻辑与/或 和 短路与/或 的区别,短路与/或

之前前置条件为真/假,后面就不会判断了,结果一定为真/假

三元运算符:

a ? b : c

如果a成立执行b,不成立执行c,精简版的if-else,另外要注意,b,c 需为表达式,即

有返回值!

位运算符(7个):

07858b1d46b65e52fc4030b0bdbf8271.png

<

>>: 右移一位等于除以2;再取整,移位溢出的丢弃

>>>: 无符号右移 最高位不是用原来的最高位填充,而是直接用0来填充最高位

~:按位取反,~a = - a -1

&:操作数都为1结果为1,否则结果为0

|:操作数都为0,结果才为0,否则为1

^:操作数相同为0,不同结果为1

不用第三个变量交换两个变量的值得方法

①利用他们的和:a = a + b;b = a - b;a = a - b;

②用^运算符:a = a^b; b = a^b; a = a^b;

编码相关常识:

原码:最高位为符号位,比如8位二进制对应的取值范围为:

[1111 1111,0111 1111] 即:[-127,127]

反码:正数反码不变;负数最高位不变,其他位取反

比如:

[+1] = [0000 0001]原 = [0000 0001]反

[-1] = [1000 0001]原 = [1111 1110]反 一般转换成原码后才能看出他的数值

补码:正数补码不变;求反码后 最低位 + 1

比如:

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补 同样也是需要转成原码才能看出值

计算机加入符号位会使基础电路变得十分复杂,1 - 1 = 1 + (-1) = 0

那么机器就可以只有加法没有减法,演变过程:

原码:0000 0001 + 1000 0001 = 1000 0002 = -2

=> 反码:原式 = [0000 0001]反 + [1111 1110]反 = 1111 1111 = -0

0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0

=> 补码:原式 = [0000 0001]补 + [1111 1111]补 = 0000 0000 = 0

-0的问题解决了,还能表示多一个最低数,比如[-127,127]用补码:[-128,127]

进制转换

所有进制转十进制:权值相加,示例如下:

二级制(0,1): 1011 = 12^3 + 02^2 + 12^1 + 12^0 = 11

八进制(0~7): 53 = 58^1 + 38^0 = 43

十六进制(0123456789ABCDEF): 2B = 216^1 + 1216^0 = 43

十进制转其他进制:一直求余法或先转二进制再转

二进制与八进制互转:三合一法,不够补零;

比如:11010111.0100111转八进制

小数点左边部分:011 010 111 右边部分010 011 100 => 327.234

如果是八转二:取一分三法,如327 = 011 010 111

二进制与十六进制互转:四合一法和取一分四法,和八进制类同,略..

八进制与十六进制互转:先转二进制,再转

运算符优先级:

3dee16562e56d29d914e0dd46f893a39.png

数据类型

基本数据类型:

整型:int,short,long,byte;都是有符号的

浮点型:float,double

字符型:char

布尔值:boolean

要注意:

①Java中,如果是想表示float类型的必须在后面加后缀F,如果没有后缀的话会被默认为double类型

②在Java中char占用两个字节哦!因为Java使用Unicode 16位的编码方式,可以表示所有的字符

③布尔值boolean只有两个值:要么是true,要么是false,不能用1,0来表示真假!

数据类型的自动转换:

自动转换(隐式):如果满足以下两个条件就会进行自动转换:

①转换后的类型比原来的类型大 ②转换前后类型相互兼容

比如:两个byte变量相加后,结果是int类型

强制转换(显式),前面加个(数据类型),需注意精度丢失的问题

包装类相关

我们可以直接调封装器类的下述方法获得对应参数,以Integer为例

Integer.MAX_VALUE = 0x7FFFFFFF; //正数最大值

Integer.MIN_VALUE = 0x80000000; //负数最大值

Integer.SIZE = 32; //字节数

Integer还提供了几个进制转换的方法

转二进制:toBinaryString()

转八进制:toOctalString()

转十六进制:toHexString()

二,八,十六转十进制:decode()

另外int和Integer可以直接比较是否相等,因为Java会自解装,如果

是两个Integer比较,需要掉intValue()方法进行比较;或者调

compareTo方法也行。

常量与变量

需注意的:

对于局部变量,当我们想要使用一个变量的时候,要先对他进行初始化,不然编译器会报错!!!

而例外的情况:实例变量与类变量,编译器会自动地对他们进行初始化

默认:boolean变量 为false,char默认为'\000'

字符串

字符串相关的操作方法

1.字符串的连接:用"+"加号可以连接成字符串,比如: 123 + "" = "123"

2.求字符串的长度: str.length()

3.求子串:str.subString(开始下标,"结束下标") //注意是从0开始算的

4.判断是否相等:这里要注意==这个比较的是字符串是否存储在同一位置!如果是比较内容我们要用equals("");

5.返回给定下标处的字符: str.charAt(int index); //从0开始算的

6.将指定字符串连接到字符串的尾部: str.concat("HeHe");

7.检索某字符在字符串中第一次出现的下标: str.indexOf("a");

8.检索某字符在字符串中最后一次出现的下标:str.lastIndexOf("a");

9.去掉头尾的空白:str.trim(),这个在数据库操作中比较常用

10.替换字符串中的某段: str.replace("想替换的字符串","替换后的字符串");

11.比较两个字符串的大小,无视大小写:str.equalsIgnoreCase(stg);

12.全部字符转化为小写:str.toLowerCase()

13.全部字符转化为大写:str.toUpperCase();

14.切割字符串,返回字符串数组:str.split(String),比如有:abcdeabcab

split("a")会返回一个字符串数组:{"bcde","bc","b"},转义字符要注意!!!

另外还有另外一个构造方法可以对多个字符进行分割,比如:split(new char{'c','d','e'})

15.字符串拼接:使用concat比+好,当然前提是拼接的两个都是字符串,字符串

拼接首选StringBuffer!

需注意:

问:String str = "abc" str = "cba"那么string对象是否会发生改变呢?

答:不会,str只是作为一个引用指向一个字符串存储的内存空间,str存储的只是

一个地址,当我们定义字符串变量时,系统会先对String常量池中的字符串进行匹配

有的话直接使用已经存在的字符串常量,否则在池中再生成一个!

程序流程控制

if语句:else语句总是和其最近if语句相互搭配,当然前提是他们在同一块中

switch:要注意的就是记得给每个case写个break,不然每个都会执行一遍

while和do-while()的区别:无论条件是否成立,后者至少执行一次

for(初始化,条件判断,迭代):循环嵌套时一定要有条件跳出循环,小心死循环

break语句:可以直接终止循环,多层嵌套时,跳出一层循环

continue语句:直接停止本次循环的剩余语句,直接进行下一次循环

return语句:只能用在方法(函数)中,结束当前的方法

数组

创建:int[] array = new int3; //定义一个容量为3的整型数组

初始化:定义的时候初始化,或者利用for循环进行赋初值

使用:获取长度:array.length; 数组复制:长度,类型相同的

直接数组名赋值就好;main()的参数拿来用,命令行下可以在java ... 后添加参数

多维数组:Java的多数组的列数可以是数目不同的!

例子如下:

public class arrayTest {

public static void main(String[] args) {

//①直接一开始赋初值

int[][] array1 =

{

{1,2,3},

{4,5,6},

{7,8,9}

};

//②创建规则的二维数组 5*3的

int [][] array2 = new int[5][3];

//③创建不规则的二维数组:3行,列数依次为:3,2,1

int [][] array3 = new int[3][];

//指定每一行的列数

array3[0]= new int[3];

array3[1]= new int[2];

array3[2]= new int[1];

//赋值

for(int i = 0;i < array3.length;i++)

{

for(int j = 0;j < array3[i].length;j++)

{ ... }

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值