黑马程序员技术交流社区

标题: java基础知识整理 [打印本页]

作者: 迦南    时间: 2014-8-22 21:04
标题: java基础知识整理
1.整型
byte:一个byte类型整数在内存里占8位
short:一个short类型整数在内存里占16位
int:一个int类型整数在内存里占32位
long:一个long类型整数在内存里占64位
java中整数常量有4种表示方式:二进制,十进制,八进制和十六进制,其中八进制的整数常量是以0开头,十六进制的整数常量是以0x或者0X开头,其中10~15分别以a-f来表示   java7新增了对二进制整数的支持,二进制的整数以0b或者0B开头

java语言中常用的转义字符
\b      退格符    \u0008
\n      换行符    \u000a
\r      回车符    \u000d
\t      制表符    \u0009
\"      双引号    \u0022
\'      单引号    \u0027
\\      反斜线    \u005c

只有浮点数除以0才可以得到正无穷大或者负无穷大,因为java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)处理,如果一个整数值除以0,则会抛出一个异常:ArithmeticException:/by zero(除以0异常)

三目运算符语法格式
(expression) ? if-true-statement : if-false-statement;
String str = 5>3 ? "5大于3" : "5不大于3";
//输出 "5大于3"
System.out.println(str);

使用switch语句时,有两个值得注意的地方:第一个地方是switch语句后的expression表达式的数据类型只能是byte,short,char,int四个整数类型和枚举类型;第二个地方是如果省略了case后的代码块的break;将引人一个陷阱

do while循环语句与while循环不同的是,do while 循环的循环条件后必须有一个分号,这个分号表明循环结束。
for循环和while,do while 循环不一样,由于while,do while 循环的循环迭代语句紧跟着循环体,因此如果循环体不能完全执行,如使用continue语句来结束本次循环,则循环迭代语句不会被执行,但for循环的迭代语句并没有与循环体放在一起,因此不管是否使用continue语句来结束本次循环,循环迭代语句一样会获得执行。选择循环变量时,习惯选择i,j,k来作为循环变量。通常紧跟break之后的标签,必须在break所在循环的外层循环之前定义才有意义。

定义数组时不能指定数组的长度,不要同时使用静态初始化和动态初始化,也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。java语言的数组索引是从0开始的,如果访问数组元素指定的索引小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时出现异常:java.lang.ArrayIndexOutOfBoundsException:N(数组索引越界)

foreach循环
String[] books = {"","",""};
for(String book : books){
    System.out.println(book);
}

实际的数组对象被存储在堆(heap)内存中,如果引用该数组对象的数组引用变量是一个局部变量,那么他被存储在栈(stack)内存中.当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁,因此,所有在方法内定义的局部变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法借宿后,这个对象还可能被另一个引用变量所引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它。
Arrays类处于java.util包下,为了在程序中使用Arrays类,必须在程序中导入java.util.Arrays类

类的构造器是有返回值的,当我们用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值,因此构造器的返回值类型总是当前类,无需定义返回值类型,但必须注意:不能在构造器里显式使用return来返回当前类的对象,因为构造器的返回值是隐式的

省略this前缀只是一种假象,虽然程序员省略了调用jump()方法之前的this,但实际上这个this依然是存在的,对于java语言来说,调用属性,方法时,主调是必不可少的,即使代码中省略了主调,但实际的主调依然存在,一般来说,如果调用static修饰的成员(包括方法,field)时省略了前面的主调,那么默认使用该类作为主调,如果调用没有static修饰的成员时省略了前面的主调,那么默认使用this作为主调

长度可变的形参只能处于形参列表的最后,一个方法中最多只能包含一个长度的形参,调用包含一个长度可变形参的方法时,这个长度可变的形参既可以传入多个参数,也可以传入一个数组。

对于int f(){}和void f(){}两个方法,如果这样调用int result = f();,系统可以识别是调用返回值类型为int的方法;但java调用方法时可以忽略方法返回值,如果采用如下方法来调用f();你能判断是调用哪个方法吗?如果你尚且不能判断,那么java系统也会糊涂,在编程过程中有一条重要规则,不要让系统糊涂,系统一糊涂,肯定就是你错了,因此,java里不能使用方法返回值类型作为区分方法重载的依据。


java的常用包
java.lang: 这个包下包含了java语句的核心类,如String,Math,System和Thread类等,使用这个包下的类无需使用import语句导入,系统会自动导入这个包下的所有类。
java.util: 这个包下包含了java的大量工具类/接口和集合框架类/接口,例如Arrays和List,set等
java.net: 这个包下包含了一些java网络编程相关的类/接口
java.io:这个包下包含了一些java输入/输出编程相关的类/接口
java.text:这个包下包含了一些java格式化相关的类
java.sql:这个包下包含了java进行JDBC数据库相关的编程的相关类/接口
java.awt:这个包下包含了抽象窗口工具集,这些类主要用于构建用户图形界面
java.swing:这个包下包含了swing图形用户界面编程的相关类/接口

通常建议为java类保留无参数的默认构造器,因此,如果为一个i类编写了有参数的构造器,则通常建议为该类额外提供一个无参数的构造器
为什么要用this来调用另一个重载的构造器?如果仅仅从软件功能实现上来看,这样复制,粘贴确实可以实现这个效果,但从软件工程的角度来看,这样做是相当糟糕的。在软件开发里有一个规则:不要把相同的代码段书写两次以上,因为软件是一个需要不断更新的产品,因此尽量避免相同的代码重复出现,充分复用每一段代码,既可以让程序代码更加简洁,也可以降低软件的 维护成本。

为了在子类方法中访问父类中定义的,被隐藏的实例变量,或为了在子类方法中调用父类中定义的,被覆盖(Override)的方法,可以通过super.作为限定来调用这些实例变量和实例方法

引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如,通过Object p = new Person()代码定义一个变量p,则这个p只能调用Object类的方法,而不能调用Person类里定义的方法。

当把子类对象赋给父类引用变量时,被称为向上转型(upcasting),这种转型总是可以成功的,这也从另一个侧面证实了子类是一种特殊的父类。这种转型只是表明这个引用变量的编译时类型是父类,但实际执行它的方法时,依然表现出子类对象的行为方式,但把一个父类对象赋给子类引用变量时,就需要进行强制类型转换,而且还可能在运行时产生ClassCastException异常,使用instanceof运算符可以让强制类型转换更安全


String str = "123"
int it1 = Integer.parseInt(str);
int it2 = new Integer(str);

String floatStr = "4.56";
float it1 = Float.parseFloat(floatStr);
float it2 = new Float(floatStr);

String ftstr = String.valueOf(2.345f);

把基本类型变量和“”进行连接运算,系统会自动把基本类型变量转换成字符串
//intStr的值为"5"
String intStr = 5 + "";

java对数据进行缓存,缓存是一种非常优秀的设计模式,在java,java EE 平台的很多地方都会通过缓存来提高系统的运行性能,简单地说,如果你需要一台电脑,那么你就去买了一台电脑。但你不可能一直使用这台电脑,你总会离开这台电脑-在你离开电脑的这段时间内,你如何做?你会不会立即把电脑扔掉?当然不会,你会把电脑放在房间里,等下次又需要电脑时直接开机使用,而不是再次去购买一台。假设电脑是内存中的对象,而你的房间是内存,如果房间足够大,则可以把所有曾经用过各种东西都缓存起来,但这不可能,房间的空间是有限制的,因此有些东西你用过一次就扔掉了。你只会把一些购买成本大,需要频繁使用的东西保存下来。类似地,java也把一些创建成本大,需要频繁使用的对象缓存起来,从而提高程序的运行性能。


作者: 许愿じ☆VE杰    时间: 2014-8-23 10:00
涨姿势了
作者: abc83983682    时间: 2014-8-23 10:39
给力,收藏下!
作者: .Mч┞尛__洋    时间: 2014-8-23 12:02
给力啊 ,,,,,,,
作者: 复仇者联盟    时间: 2014-8-23 12:04
不错,要是是文档形式的话,就更好了。
作者: 杨列振    时间: 2014-8-23 13:21
感谢分享。。
作者: 黑马-胡明    时间: 2014-8-23 13:27
好东西呀···
作者: 迦南    时间: 2014-8-23 21:16
许愿じ☆VE杰 发表于 2014-8-23 10:00
涨姿势了

嗯。谢谢
作者: 迦南    时间: 2014-8-23 21:17
abc83983682 发表于 2014-8-23 10:39
给力,收藏下!

互相学习
作者: 迦南    时间: 2014-8-23 21:20
卢仪敏 发表于 2014-8-23 10:55
整理的不够详细!

呵呵,下次改进
作者: 迦南    时间: 2014-8-23 21:22
.Mч┞尛__洋 发表于 2014-8-23 12:02
给力啊 ,,,,,,,

谢谢!!!
作者: 迦南    时间: 2014-8-23 21:23
复仇者联盟 发表于 2014-8-23 12:04
不错,要是是文档形式的话,就更好了。

不知道怎么发:L
作者: 迦南    时间: 2014-8-23 21:24
杨列振 发表于 2014-8-23 13:21
感谢分享。。

不用谢!
作者: lhtwm1    时间: 2014-8-23 21:25
难道基础的20多天视频 就这些 知识点吗
作者: 迦南    时间: 2014-8-23 21:25
黑马-胡明 发表于 2014-8-23 13:27
好东西呀···

呵呵,谢谢
作者: 丨懒蟲灬Nigh    时间: 2014-8-23 21:26
整理的还不错 不过要是更详细下就好了
作者: 迦南    时间: 2014-8-23 21:32
丨懒蟲灬Nigh 发表于 2014-8-23 21:26
整理的还不错 不过要是更详细下就好了

好的,后续会重新分享的
作者: wfaly    时间: 2014-8-24 01:39
谢谢 楼主分享
作者: 迦南    时间: 2014-8-24 22:14
wfaly 发表于 2014-8-24 01:39
谢谢 楼主分享

谢谢,:)
作者: 思如涌泉    时间: 2014-8-25 06:56
谢谢分享,赶紧复制
作者: 我为你着迷    时间: 2014-8-25 09:06
lhtwm1 发表于 2014-8-23 21:25
难道基础的20多天视频 就这些 知识点吗

他只是整理了一部分而已
作者: iefegend    时间: 2014-8-25 09:18
整理的不错,,顶一下:)
作者: 米家小九    时间: 2014-12-22 07:15
回复上了没啊
作者: lgc黑马    时间: 2014-12-27 21:42
顶顶顶顶顶顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2