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代码的运行原理


3.基础知识


运算符


算术运算符(12个)

需要注意

  • 如果除号的前后都是整型,那么结果也为整型 eg:5 / 2 = 2
  • 求余运算符通常用于整型,当然浮点型也可以,但结果是不准确的,但对精度要求
    较高时就不要了,可以使用BigDecimal类型
  • 自增和自减作为前缀还是后缀的问题:前缀:先自增,后参与运算 后缀:先参与运算,后自增
    比如,这样的程序

输出结果:

你算对了没?对付这种自增自减的问题,更重要的是细心,还有一点要注意的是:
自增自减运算符只能对单个变量起作用,表达式和常量是没用的
eg:(a + b)++ 想让相加后的结果+1,但是确是错的,
同样,常量也是不行的,6++,这样也是错的!切记!


逻辑运算符(7个)

需要注意

短路现象,区分逻辑与/或短路与/或 的区别,短路与/或
之前前置条件为真/假,后面就不会判断了,结果一定为真/假


三元运算符

a ? b : c

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


位运算符(7个):

<<: 左移1位等于乘以2
>>: 右移一位等于除以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

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

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


运算符优先级


数据类型

基本数据类型

整型: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,不然每个都会执行一遍
whiledo-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++)  
            {   ...  }  
        }  
    }  
}  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 637评论 0 0
  • 第一天 1.关键字 在Java中关键字是不能设置成为变量名、方法名、包名、类名的! 2.标识符 程序员自己定义的名...
    炙冰阅读 517评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 2,776评论 1 9
  • 没有比濑溪河水更懂得棠城的秋天的。白天在缩短,夜晚在拉长。而我始终无法解释和揭示濑溪河水的光亮背后隐藏了...
    馬豌豆阅读 364评论 0 0