Java笔记《Java从入门到精通第5版》

第1章 初识Java

Java特点:跨平台,面向对象,高级。

Java程序代码编译和运行过程:程序源代码——编译器——字节码——JVM(Java虚拟机)——机器码——计算机。

Java版本分类:Java SE标准版用于桌面应用程序的开发,Java EE企业版用于开发企业级分布式网络程序,Java ME用于嵌入式系统开发。

第3章 Java语言基础

Java程序的基本组成单元是类,类体中又包含属性与方法两部分。

每一个应用程序都必须包含一个main()方法,含有main()方法的类称为主类。

代码文件名必须和类名同名。

Java区分大小写

声明在类中的称为全局变量(成员变量),声明在方法中的称为局部变量。

main()方法是类体中的主方法,Java中的main()方法必须声明为public static void。main()方法是程序开始执行的位置。

Java基本数据类型:数值型[分为整数类型(byte、short、int、long)和浮点类型(float、double)]、字符型、布尔型。共8种。

整数类型:3种表示形式,十进制、八进制(必须以0开头)和十六进制(必须以0X或0x开头)。byte(1字节8位,-128-127)、short(2字节)、int(4字节)、long(8字节)。

对于long型值,若赋给的值大于int型的最大值或小于int型的最小值,则需要在数字后加L,表示该数值为长整数。

浮点类型:单精度float(4字节)(小数后面需要添加F或f),双精度double(8字节)(小数后面的D或d可加可不加)。

字符类型:1.char型(2字节)存储单个字符;2.转义字符

布尔类型:逻辑类型,用关键字boolean定义,只有true和false。

系统内存大致分为3个区域:系统区(OS)、程序区(Program)和数据区(Data)。程序执行时,程序代码加载到内存中的程序区,数据暂存至数据区中。

声明常量:final 数据类型 常量名称[=值]

常量名称通常使用大写字母

当定义的final变量属于成员变量时,必须在定义时赋初值

变量的有效范围:

成员变量在整个类中都有效。成员变量又可分为两种,静态变量(加关键字static,也称类变量)和实例变量。静态变量的有效范围可以跨类,能直接以“类名.静态变量”的方式在其他类中使用。

局部变量只在当前定义的方法内有效。

局部变量可与成员变量的名字相同,此时成员变量将被隐藏。

运算符:

赋值运算符=

算术运算符+ - * / %

自增和自减运算符++ –

比较运算符

逻辑运算符&(&&) || !

&与&&区别:&属于“非短路”运算符(运算符两边表达式都执行),&&属于“短路”运算符(第一个表达式为false则不去判断第二个表达式)。

位运算符& | ~ ^ << >>(最高位为0/1,右移空的位就填0/1) >>>(右移空的位都填0)

三元运算符 条件式?值1:值2

数据类型转换

包括隐式转换与显式转换

隐式转换:从低精度类型向高精度类型的转换,系统自动执行

显式转换:又称强制类型转换,高精度转低精度必须用

代码注释:在多行注释中可嵌套单行注释,但不可嵌套多行注释。

第4章 流程控制

复合语句:又称块语句,由{}标记。为局部变量创建了一个作用域,在该作用域中创建的变量无法在作用域外使用。

条件语句

if条件语句:简单if条件语句、if…else语句(可使用三元运算符进行简化)、if…else if多分支语句

switch多分支语句:表达式的值必须是整型、字符型或字符串类型。

循环语句

while循环语句

do…while循环语句

for循环语句:for语句、foreach语句

foreach语句:

for(元素变量x : 遍历对象obj){

引用了x的Java语句;

}

//在遍历数组等方面很方便

循环控制:continue(执行下一次循环)和break(中断循环)(嵌套循环下break只会中断包含它的最内层循环)

若想让break跳出外层循环,可使用“标签”功能:

标签名: 循环体{

break 标签名;

}

continue也支持标签功能:

标签名: 循环体{

continue 标签名;

}

第5章 字符串

声明字符串:通过java.lang包中的String类。将字符串作为对象来管理。

String类的常用构造方法:

String(char a[])
String(char a[], int offset, int length)
String(char[] value)

连接字符串

连接多个字符串:使用“+”运算符可连接多个字符串并产生一个String对象。

连接其他数据类型:会将其他类型的数据直接转换成字符串。

获取字符串信息

获取长度:int size = str.length();

字符串查找:

str.indexOf(substr) (返回搜索的字符或字符串首次出现的位置)

str.lastIndexOf(substr) (返回搜索的字符或字符串最后一次出现的位置)

若没有查找到返回-1

获取指定索引处的字符:str. charAt(int index)

字符串操作

获取子字符串:str.substring(int beginIndex) str.substring(int beginIndex, int endIndex)

去除空格:str.trim() //返回副本,去除前导和尾部空格。

字符串替换:str.replace(char oldChar, char newChar)

判断字符串的开始与结尾: str.startsWith(String prefix) str.endsWith(String suffix) 返回boolean类型

判断字符串是否相等:

str.equals(String otherstr) //区分大小写

str.equalsIgnoreCase(String otherstr) //忽略大小写

按字典序比较两个字符串:str1.compareTo(String str2) //若1在前,返回一个负整数,若1在后,返回一个正整数,若想等返回0

字母大小写转换:str.toLowerCase() str.toUpperCase()

字符串分割:str.split(String sign) str.split(String sign, int limit)

格式化字符串:format()方法

正则表达式:含有一些具有特殊意义字符的字符串。特殊字符称为元字符。

字符串生成器:StringBuilder

要输出字符串结果:使用toString()方法

append(content) //向字符串生成器中追加内容

insert(int offset, arg) //向字符串生成器中的指定位置插入数据内容

delete(int start, int end) //移除子字符串中的字符

第6章 数组

数组:具有相同数据类型的一组数据的集合。Java中同样将数组看作是一个对象。

创建一维数组的两种方法:

先声明,再用new运算符分配内存
数组元素类型 数组名字[]; //声明

数组元素类型[] 数组名字; //声明

数组名字 = new 数组元素类型[个数];

声明的同时为数组分配内存
数组元素类型 数组名[] = new 数组元素类型[元素的个数];

使用new分配内存时,整型数组的元素初始值都为0。

初始化一维数组:

int arr[] = new int[]{1,2,3};

int arr2[] = {4,5,6};

二维数组

数组的基本操作

遍历数组(可使用foreach语句)

填充替换数组元素:在java.util.Arrays包里。

Arrays.fill(int[] a,int value); //全部替换

Arrays.fill(int[] a, int fromIndex, int toIndex, int value); //替换从fromIndex(包括)到toIndex(不包括)。

对数组排序:Arrays.sort(object);

复制数组:

Arrays.copyOf(arr, int newlength); //复制数组至指定长度

Arrays.copyOfRange(arr, int fromIndex, int toIndex); //复制数组的指定长度

数组查询

Arrays.binarySearch(Object[] a, Object key); //使用二分搜索法,返回要搜索元素的索引值(未搜到返回-1或“-插入点”,插入点是第一个大于此值的元素索引)

查询前需要先对数组进行排序。

Arrays.binarySearch(Object[] a, int fromIndex, int toIndex, Object key); //在指定范围内检索

数组排序算法

冒泡排序

直接选择排序:每一趟从待排序的数据元素中选出最大(最小)的元素,放在已排好序的数据堆的最前,直到全部排完。

反转排序:把数组最后一个元素与第一个元素交换,依此类推。

第7章 类和对象

面向对象设计:对现实世界中的对象进行建模操作。

对象:事物存在的实体。包括静态部分-属性,和动态部分-行为。

类:同一类事物的统称(具有相同属性和行为的一类事物)。是构造对象时所依赖的规范。

类是世间事物的抽象称呼,对象是这个事物相对应的实体。

类是封装对象属性和行为的载体,对象是类抽象出来的一个实例。

类中以成员变量的形式定义对象的属性,以方法的形式定义对象的行为。

面向对象程序设计特点:封装性、继承性、多态性。

封装性:将对象的属性和行为封装起来,为用户提供接口,对用户隐藏实现细节。

继承性:关联(类与类之间的关系)的一种。利用特定对象的共有属性,子类继承父类(超类)的属性和行为,再添加子类独有的属性和行为。

多态性:将父类对象应用于子类的特征。父类通常定义为抽象类,由抽象方法组成的集合就是接口。

类:使用class关键字来定义

成员方法:对应类对象的行为。

权限修饰符 返回值类型 方法名(参数类型 参数名){

…//方法体

return 返回值;

}

参数可以是对象,也可以是基本数据类型的变量。可有返回值和不返回任何值(用void关键字)。

类成员变量和成员方法可统称为类成员。

权限修饰符:

private public protected,控制着对类、类成员变量、成员方法的访问。

访问范围:private(仅本类) protected(本类+同包其他类或子类) public(本类+同包其他类或子类+其他包的类或子类)

不使用任何修饰符时,默认访问范围为同一个包中的类。

类的权限设定会约束类成员的权限设定。

局部变量在使用时必须进行赋值操作或被初始化,否则会编译错误。

局部变量的有效范围(作用域):从变量声明开始,到块结束为止。

this关键字:用于引用类的对象中的成员变量和方法(this.name=name)。还可以作为方法的返回值(return this;)。

类的构造方法:与类同名的方法。用于完成对象的创建。

构造方法没有返回值(不需用void)。名称必须与本类名称相同。

构造方法中可为成员变量赋值,从而将对象初始化。

若没有定义构造方法,编译器会自动创建不带参数的默认构造方法。

this还可以调用类中的构造方法。

被声明为static的变量、常量和方法被称为静态成员。可以在本类或其他类使用类名和“.”运算符调用静态成员。

静态成员的作用通常是为了提供共享数据或方法。

静态成员同样受权限修饰符约束。

在静态方法中不可使用this关键字。

在静态方法中不可直接调用非静态方法。

不能将局部变量声明为static的。

执行类时若希望先执行类的初始化动作,可用static定义一个静态区域。当代码被执行时,首先执行static块中的程序,并只会执行一次。

类的主方法:类的入口点

public static void main(String[] args){

//方法体

}

主方法是静态的,要在其中调用其他方法必须也是静态的。

主方法没有返回值。形参为数组。

对象

创建:用new操作符。并可以调用构造方法进行初始化。创建与初始化可同时。

访问:使用“对象.类成员”来获取对象的属性和行为。

对象的比较:

“==”运算符:比较两个对象引用的地址是否相等。

equals()方法:比较两个对象引用所指的内容是否相等。

对象的销毁:

被视为垃圾的对象:1、对象引用超过其作用范围。2、将对象赋值为null。

第8章 包装类

Java为每个基本类型都提供了包装类,便可把基本类型转换为对象来处理。

Integer类

构造方法:Integer(int number)、Integer(String str) //要用数值型String

常用方法:byteValue() compareTo() equals() intValue()

常量:MAX_VALUE, MIN_VALUE, SIZE, TYPE

Long Short类与Integer基本相同

Boolean类

构造方法:Boolean(boolean value) Boolean(String str)

常用方法:booleanValue() equals() toString() valueOf()

常量:TRUE, FALSE, TYPE

Byte类

构造方法:Byte(byte number)、Byte(String str) //要用数值型String

常用方法:byteValue() compareTo() equals() intValue()

常量:MAX_VALUE, MIN_VALUE, SIZE, TYPE

Character类

构造方法:Character(char value)

常用方法:toUpperCase() toLowerCase() isUpperCase() isLowerCase()

常量:UNASSIGNED等

Double和Float类

构造方法:Double(double value) Double(String str)

常用方法:isNaN()等

常量:MAX_EXPONENT, MIN_EXPONENT, NEGATIVE_INFINITY, POSITIVE_INFINITY

Number类

数字类的父类

第9章 数字处理类

数字格式化:主要针对浮点型数据。使用DecimalFormat类。

两种方式:使用实例化对象设置格式化模式、使用applyPattern()方法对数字进行格式化。

数学运算

Math类:包括三角函数方法、指数函数方法、取整函数方法、取最大值最小值及绝对值函数方法

数学常量:Math.PI Math.E

随机数

两种生成方式:调用Math类的random()方法,调用Random类

调用Math类的random()方法:0<=Math.random()<1.0
生成任意两个字符之间的随机字符:

(char)(char1+Math.random()*(char2-char1+1));

Random类:Random r=new Random(seedValue)

大数字运算

BigInteger类,针对大整数

构造方法:public BigInteger(String val)

BigDecimal类,针对大小数

构造方法:public BigDecimal(double val) public BigDecimal(String val)

第10章 接口、继承与多态

继承:子类基于某个父类进行扩展,可以继承父类原有的属性和方法,也可以增加新的属性和方法,或直接重写父类中的某些方法。

使用extends关键字来标识两个类的继承关系。

使用super关键字调用父类的构造方法和成员方法等。

子类没有权限调用父类中被修饰为private的方法。

重写(也称为覆盖):在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改存储权限,或修改返回值类型(重写的返回值类型必须是父类中同一方法返回值类型的子类)。

重构:特殊的重写方式,只修改成员方法的实现内容,其他不变。

重写时,方法的权限范围只能从小范围改为大范围。

在实例化子类对象时,编译器会自动调用父类的无参构造方法,即父类对象也相应被实例化。(有参构造方法不能被自动调用,要使用super关键字显式地调用)

Object类:是所有类的父类,是最高层类。

Object类中的方法

getClass()方法:返回对象执行时的Class实例,getClass().getname();可以取得类的名称。

toString()方法:将一个对象返回为字符串形式。

对象类型的转换

向上转型:把子类对象赋值给父类类型的变量,可直接使用,总是安全的。

向下转型:将较抽象的类转换为较具体的类。需要使用显式类型转换,在父类对象前加上括号和子类类名。

myobject instanceof ExampleClass

判断某类的对象引用myobject是否属于ExampleClass类。返回布尔值。

方法的重载:在一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。

方法重载中两个方法的返回值类型可以不同,但只有返回值类型不同不足以构成重载。

不定长参数方法:

返回值 方法名(参数数据类型…参数名称)

这个不定长参数就是一个数组

抽象类:使用abstract关键字定义,用来被继承。

抽象方法:没有方法体,必须放在抽象类中。

抽象类被继承后需要实现其中所有的抽象方法。

接口:抽象类的延伸,可看作是纯粹的抽象类,里面所有的方法都没有方法体(方法必须被定义为public或者abstract形式)。使用interface关键字进行定义。

在接口中定义的任何字段都自动是static和final的。

一个类实现一个接口,可使用implements关键字。

Java中不允许多重继承,但一个类可以同时实现多个接口。

定义一个接口时也可继承自另外一个接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值