当前位置:文档之家› Core_Java_全面的java基础内容

Core_Java_全面的java基础内容

Core_Java_全面的java基础内容
Core_Java_全面的java基础内容

Core Java

第一章:进入Java世界第一章:进入世界

程序语言发展历程机器语言:二进制机器代码,不便理解,不好记忆,机器语?言:二进制机器代码,不便理解,不好记忆,与硬件平台相关,不具有可移植性。?件平台相关,不具有可移植性。汇编语言:用助记符号来描述,与机器代码一一对应?,汇编语言:用助记符号来描述,与机器代码一一对应,能够理解,但同样不可移?植。够理解,但同样不可移植。高级语言:按自然语言的语法风格书写程序,方便?理解,高级语言:按自然语言的语法风格书写程序,方便理解,在原代码的层次上?可以实现跨平台移植。在原代码的层次上可以实现跨平台移植。

我们熟知的常用计算机语言C C++ Pascal Basic Java ……

Java来自来自Sun 来自Sun : Standford University Network Sun公司官方网?

https://www.doczj.com/doc/574347787.html,

Java创始人创始人James Gosling green的项目组

具有深厚的c++背景。任务是为小型消费型电子产品开发一种通用的编程语言。?如机顶盒。

Oak

Java简史简史

Java 应用概述J2ME (Java 2 Micro Edition) J2SE (Java 2 Standard Editi?

on) J2EE (Java 2 Enterprise Edition) 微型版标准版企业版

Java 应用概述Java ME (Java Micro Edition) 微型版Java SE (Java Stand?

ard Edition) 标准版Java EE (Java Enterprise Edition) 企业版

编译型和解释型编译型语言:

编译型和解释型解释型语言

Java的工作方式的工作方式Java的目标是让你写出一个应用程序,并能在任何?设备上运行

Java的工作方式的工作方式编译器

编译源代码,同时检查错误

字节码文件

由编译器产生,任何支持Java的设备都能够把它转译成可执行的内容,编译后?的字节码与平台无关

Java虚拟机

你不会真的买一台Java的机器,但是你都会有一个虚拟机,这个虚拟机由软件?实现,它可以读取与执行字节码文件。

你要做的事编写源代码、编译、执行

JDK、JRE、JVM 、、JDK

Java Development Kit (java 开发工具包) 工具箱1.2-1.4版本也称为SDK

Software Development Kit JRE

Java Runtime Environment (java 运行环境)

JVM Java Virtual

Machine

(java 虚拟机)

JDK、JRE、JVM 、、JDK:(Java Development kit) 包含Java运行的基本类库?

和开发命令,安装JDK可以进行完整的Java开发。JRE:(Java Runtime Environmen?page 1t) 包含Java运行的基本类库和一些运行命令,安装JRE可以运行编译好的Java程序?

。JVM:(Java Virtual Machine) Java语言内部运行的核心。

JDK

JRE

JVM

下载并安装JDK 下载并安装

从以下网站可下载JDK 从以下网站可下载https://www.doczj.com/doc/574347787.html, 根据开发机器?

的不同,请下载相应平台下的根据开发机器的不同,请下载相应平台下的JDK Install JDK Windows: run the executable Unix: run the shell

配置Java环境变量环境变量配置JA V A_HOME CLASSPA TH PATH

配置Java环境变量环境变量配置

Windows 2000/NT/XP 开始—控制面板系统—高级控制面板—系统高级—环境?

变量开始控制面板系统高级环境变量JA V A_HOME=… PA TH=%JA V A_HOM%\bin CLA?

SSPATH=.;… Unix csh: add these lines to $HOME/.cshrc setenv JA V A_HOME /us?

r/java…… setenv PA TH $JA V A_HOME/bin:…… setenv CLASSPATH . bsh/ksh: add?

these lines to $HOME/.profile JA V A_HOME=/usr/java PATH=$JA V A_HOME/bin:$PA?

TH CLASSPATH=. export JA V A_HOME PATH CLASSPATH

Java的程序结构的程序结构类存在于源文件中方法存在于类中语句存在于方?

法中

Source file class method1

method2

源文件和类源文件()带有类的定义。类用来表示程序的一个组件,小程序或?

许只会有一个类,类的内容必须包括在花括号里面。

public class Dog{

}

类和方法类中带有一个或多个方法在Dog这个类中,bark 方法带有如何“汪?汪”的指令。方法必须在类的内部定义

public class Dog{ void bark(){

} }

方法

方法和语句在方法的花括号中编写方法应该执行的指令。方法代码由一组语?

句组成。

public class Dog{ void bark(){ statement1; statement2;

} }

语句

Main方法方法当JVM启动时,它会寻找你在命令行所指定的类,然后它会锁定?像下面这样的一个特定方法:

public static void main(String[]args){

//程序代码

}

然后JVM就会执行这个方法中的所有代码

剖析类

是的,你不需要记住这些是的,

练习:Information.java 写一个Java程序打印出下列信息:

姓名性别年龄毕业学校户籍

第二章:Java基本语法第二章:基本语法

你在main()方法里能做什么?方法里能做什么?你在方法里能做什么做某件?事

声明、设定、调用方法

在适当的条件下做某件事

If/else switch

page 2 反复做某件事

for while

认识变量变量有两种:

基本类型引用类型

Java注重类型注重类型声明变量的规则

变量必须有一个类型变量必须有一个名字int count;

类型

名称

变量类型的不同变量=杯子

Java的基本数据类型的基本数据类型byte short int long float double ch?

ar boolean 8-bit 整形值16-bit 整形值32-bit 整形值64-bit 整形值32-bit 浮?

点数值64-bit 浮点数值16-bit unicode编码的字符编码的字符布尔值(布尔值?(true 或false))

整形数据(整形数据(byte、short、int、long)、、、)

三种形式给一个整形变量直接赋值: 三种形式给一个整形变量直接赋值十进制?

、十进制、八进制和十六进制直接给出的值默认是int类型。直接给出的值默认是?类型。类型标示。长整形值应该在数字后面跟上‘l’或‘L’标示。标示public void testIntType() { int ia = 0x55; //十六进制十六进制int ib?

= 011; //八进制八进制byte bb = 0x771; byte ba = (byte)0x771; long la = ?

1234567L; //十进制十进制}

整形数据在计算机内的存储方式

1,正整数,存储该数字的二进制原码。2,负整数,存储该数字的二进制补码?。short a=57; int a=57; 0000 0000 short a=-57; int a=-57; 1111 1111 高字节?

位1111 1111 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 0011 1001 0?

011 1001 1100 0111 1100 0111 低字节位

浮点数据类型—float 和double 浮点数据类型

类型。直接在程序中书写的浮点数默认为dobule类型。类型float 类型的数?

据占位长度(4 Bytes)类型的数据占32位长度位长度()double类型的数据占?位长度(8 Bytes)类型的数据占64位长度类型的数据占位长度()直接表示一?个float 类型的值必须在数字后跟…f? 或‘F? 直接表示一个直接表示一个doub?

le 类型的值可以在数字后跟‘d? 或‘D? 类型的值可以在数字后跟‘直接表示一?

个可以用科学计数法表示,可以用科学计数法表示,如:123.456e3或123.456E3 或?public void testFloatType() { float fa = 123.4f; float fb = 12.5E300F; fl?

oat fc = (float)12.5E300; double da = 123D; double db = 123.456D; double d?

c = 123.45e301; }

字符类型char 字符类型

1,其实就是一个无符号的16位整形,其范围为0~65535,用来存储该字符的?Unicode编码值,因为Unicode 编码中包含汉字的编码,所以一个char类型的变量也?可以存储一个汉字字符。2,在代码中直接给出的一个字符值必须用单引号括起来。?char zhChar = …中’;char enChar = …a?; char ucChar = …\u0060?; 3,?

对某些不方便直接书写或直接书写有歧义的字符,java语言规定用转义字符给出。?

4,可以把char类型数据当作整数数据来操作。

转义字符

Java语言中转义字符都以‘\?给出常用转义字符列表:转义字符\ddd \uxx?

xx \? \?? \\ \r \n \f \t \b 描述1到3位8进制数所表示的字符(ddd) 1到4位1?

6进制数所表示的字符(xxxx) 单引号字符双引号字符反斜杠字符回车换行走纸换?

页横向跳格退格

字符串类型String 字符串类型

String 1,是JDK中定义的一个类,不是基本数据类型中定义的一个类,,中?

定义的一个类2,一个对象可以用来存储多个字符,,一个String对象可以用来存?

储多个字符,在程序中直对象可以用来存储多个字符接给出一个String值要用双引?

号括起来接给出一个值要用双引号括起来String myName = “Ice Xu”; 3,可以?

page 3使用+ 运算符把多个运算符把多个String数据连接起来,并且数据连接起来,,?

数据连接起来还可连接其他类型的数据例如:例如:int count=7; System.out?

.println("Counted " + count + " chars." );

布尔类型-boolean 布尔类型

一个boolean类型的变量用来表示一个或真或假的关系类型的变量用来表示一个?

或真或假的关系一个类型变量的值必须是true 或false二者之一一个boolean 类?

型变量的值必须是boolean isCorrect = true;

基本数据类型的取值范围

Type boolean byte short char int long float double Bits 8 8 16 16 32 ?

64 32 64 Bytes 1 1 2 2 4 8 4 8 Minimum Range Maximum Range

Only two values :true or false -27 -215 0 -231 -263 Not needed Not ne?

eded 27 - 1 215 - 1 216-1 231 - 1 263 - 1 Not needed Not needed

变量赋值

public class Assign { public static void main(String args[]) { int x,?

y; // 声明类型变量和y 声明int类型变量类型变量x和float z = 3.414f; // ?

声明声明float类型变量并赋值类型变量并赋值double w = 3.1415; //声明声明?

double类型变量并赋值声明类型变量并赋值boolean truth = true; //声明声明?

boolean类型变量并赋值声明类型变量并赋值char c; //声明声明char类型变量?

类型变量c 声明类型变量String str; //声明声明String类型的引用声明类型的?

引用String str1 = “bye”; //声明声明String类型的引用并且实例化声明类型?

的引用并且实例化 c = …A?; // 给c变量赋值变量赋值str = “Hi out there!”?

; // 给str实例化实例化x = 6; y = 1000; } }

变量赋值要确保变量能存下所保存的值

你无法用小杯子装大值不可以吗?

类型转换

自动类型转换(隐含转换自动类型转换隐含转换) 隐含转换强制类型转换(显?

式转换强制类型转换显式转换) 显式转换

基本数据类型转换序列

说明:说明:在本图中,顺着箭头方向的类型转换可以自动进行,1,在本图?中,顺着箭头方向的类型转换可以自动进行,逆箭头方向的转换或无箭头类型之间的?转换必须强制转换。逆箭头方向的转换或无箭头类型之间的转换必须强制转换。

byte short int long float double char

2,能将A类型变量自动转换成B类型变量的前提条件是这种能将A类型变量自动?转换成B 转换不会造成数据和精度的丢失,转换不会造成数据和精度的丢失,即A类?型的取值范围是类型的取值范围的子集。B类型的取值范围的子集。

类型转换的例子

package sample; public class CastingTest { public void implictCasting?

() { byte a = 60; int ia = a; char b = 'a'; int c = b; long d = c; long e ?

= 1000000000L; float f = e; double g = f; String s = "hello"; } public voi?

d explicitCasting() { long l = 1000000L; int i = l; //(int)l; doubl

e d = 1?

2345.678; float f = d; //(float)d; Object o = new String("Hello"); String ?

str = o; //(String)o; } }

练习

1,写一个程序,要求定义出boolean,int,char,double,float,String ,写一个?

程序,要求定义出类型的变量并赋初值,然后将这些值输出出来。类型的变量并赋?

初值,然后将这些值输出出来。3,下列哪些赋值语句是错误的:,下列哪些赋值语?句是错误的:(1) byte b= 0x175; (2) int i=0x27f; (3) char c=123; (4) int a?

=…真’; 真(5) float f=12.345E2; (6) boolean f=0; 4,判断下列语句中的和b?

的值是否相等:的值是否相等:,判断下列语句中的a和的值是否相等(1) int a?

=0; int b=…0?; (2) int a=0; char b=…\u0000?; (3) int a=123; char b=…\?

u007B?; (4) int a=0x123; char b=123; (5) int a=3+…5?; char b=?8?; (6)?

int a=…3?+?5?; char b=…8?; (7) char a=…\u0000?; char b=…0?;

page 4 常用运算符列表

序号1 2 3 4 5 6 7 8 描述括号和引用单目运算符算术运算符关系运算符?

逻辑运算符位运算符条件运算符赋值运算符()++ * / [] -% < || >> & >>>?

. !~ + <= | & | ^ == != 运算符结合性左右右左左右左右左右左?

右/ 右左

> >= && << ?:

= += -= *= /= %= >>= >>>= <<= &= |= ^=

算术运算符

Java对“+”运算符进行了扩展,使它能够进行字符串的连接,对运算符进行?

了扩展,运算符进行了扩展使它能够进行字符串的连接,如“abc”+“de”,得到?

串“abcde” ,得到串“++i , --i 在使用前,先使的值改变在使用i前先使i的?

值改变i++ , i-- 在使用后,再改变的值在使用i后再改变i的值

关系运算符Java中,任何数据类型的数据(包括基本类型和引用类型)都可以?

通过中任何数据类型的数据(包括基本类型和引用类型)==或!=来比较是否相等?

这与、C++不同。来比较是否相等(这与不同)。或来比较是否相等这与C、不?

同关系运算的结果返回true或false,而不是、C++中的或0。中的1或。关系运?

算的结果返回或,而不是C、中的

布尔逻辑运算符

逻辑运算符AND(&&)、(||)以及()、)、OR()以及NOT(!)能生成?

一个布逻辑运算符()尔值(尔值(true或false)或)说明:说明:? 只?

可将只可将AND,OR或NOT应用于布尔值。不可将一个非布尔值应用于布尔值。,?或应用于布尔值当作布尔值在逻辑表达式中使用例如:以下是非法的。例如:以?

下是非法的。int i=1,j=2; i && j i || j !i

布尔逻辑运算符

说明:说明:

对浮点数字的比较是非常严格的。对浮点数字的比较是非常严格的。

短路运算:短路运算:

1、a && b && c 、

2、a || b || c 、3 、x=y=1 a=5, b=3,c=2,d=1 (x=a>

用法~ op op1 & op2 op1 | op2 op1 ^ op2 op1 >> op2 op1 << op2 op1 >>>?

op2

描述按位取反按位与按位或按位异或op1右移op2位op1左移op2位op1无符?号右移op2位

<< >>>

位运算符(~, &, | , ^)位运算符(

位运算符(<<)位运算符(>>, >>>, <<)

>> :将一个数的各二进制位全部右移若干位移到右端的低位被舍弃,将一个?

数的各二进制位全部右移若干位,移到右端的低位被舍弃移到右端的低位被舍弃,最?

高位则移入原来高位的值a = 00110111,则a>>2 = 00001101 例如:,b = 110?10011,则b>>2 = 11110100 ,右移一位相当于除2取商右移一位相当于除取商例?如:例如:128 >> 1 returns 128/ 21 = 64 256 >> 4 returns 256/ 24 = 16 -2?

56 >> 4 returns -256/ 24 = -16 >>> :一个数的各二进制位无符号右移若干位,与?

运算符相同,移一个数的各二进制位无符号右移若干位,与运算符>>相同相同,?

出的低位被舍弃,但不同的是最高位都补0。出的低位被舍弃,但不同的是最高位都?补。a = 00110111,则a>>>2 = 00001101 如, b = 11010011,则b>>>2 = 0?0110100 ,

位运算符

<< :用来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,低位用?

来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,补0。。例如:例?如:a = 00001111,则a<<2 = 00111100。,。在不产生溢出的情况下,左移一位?

相当于乘在不产生溢出的情况下,左移一位相当于乘2 128 << 1 returns 128 * 21?

= 256 16 << 2 returns 16 * 22 = 64

移位运算示例

page 5 12>>1= 12>>33= -12>>2= -12>>66= 128>>2 = 129>>2= int a1 = 12 >>> 1; i?

nt a2 = -12 >>>2; int a1 = 12 << 1; int a2 = -12 << 2; int a3 = 128 << 2; ?

int a4 = 129 << 2;

移位运算示例

12>>1 12/2(1) 6 12>>33 12/2(33%32) 12/2(1) 6 -12>>2 -12/2(2) -3 -12>>?

66 -12/2(66%32) -12/2(2) -3 128>>2 128/2(2) 32 129>>2 129/2(2) 32 int a1 =?

12 >>> 1;// 6 int a2 = -12 >>>2;//1073741821 int a1 = 12 << 1; //24 int a?

2 = -12 << 2;//-48; int a

3 = 128 << 2;//512 int a

4 = 129 << 2;//516

流程控制语句分支语句:if-else, switch-case 循环语句:for, while, do-?

while 循环跳转语句:break, continue

选择结构—if else 选择结构if else 的语法结构3,多层嵌套if( boolean ?

expression 1){ code block 1 }else if (boolean expression 2){ code block 2 ?

}else{ code block 3 }

1,基本结构if( boolean expression){ code block 1 }else{ code block 2 ?

}

2,省略else分支if( boolean expression){ code block }

选择结构—switch case 选择结构

switch case 实现多分支选择结构的语句:switch(expression) { case 整数?

值1 : 语句; break; case 整数值2 : 语句; break; case 整数值3 : 语句; break;?

case 整数值4 : 语句; break; case 整数值5 : 语句; break; //.. default:语句?

; }

switch case 说明表达式expression可以是以下四种基本数据类型和枚举可以?

是以下四种基本数据类型和枚举表达式类型(byte,short,int,char) ,,,?

case子句中的值必须是常量,而且所有子句中的值必须是常量,子句中的值必须是?

常量而且所有case子句中的值子句中的值应是不同的case通常与通常与break语?

句联用,以保证多路分支的正确实语句联用,通常与语句联用现。多个case可以?公用一组执行语句可以公用一组执行语句。多个可以公用一组执行语句switch case 应用

例题:根据考试成绩的等级打印出百分制分数段。public class GradeLevel{?

public static void main( String args[ ] ){ System.out.println("\n**** fir?

st situation ****"); char grade='C'; //normal use switch( grade ){ case 'A?

' : System.out.println(grade+" is 85~100");break; case 'B' : System.out.pr?

intln(grade+" is 70~84");break; case 'C' : System.out.println(grade+" is 6?

0~69");break; case 'D' : System.out.println(grade+" is <60");break; defaul?

t : System.out.println("input error"); } }

for循环循环

格式格式for(初始表达式; 布尔表达式; 步进){ 循环体语句块} 说明:说?

明:? 无论初始表达式,布尔表达式,还是步进,都可以置空。? 初始表达式在整?

个循环过程中只执行一次。for(int i = 0, j = 1; i < 10 && j != 11; /* body ?

of for loop */; i++, j++)

while 循环

格式:格式:格式while(布尔表达式){ 循环体语句块} 例子:public cl?

ass WhileTest {

public static void main(String[] args) { double r = 0; while(r < 0.99?

d) { r = Math.random(); System.out.println(r); } } }

do while 循环

格式格式:格式do { 循环语句}while(布尔表达式);?例子: 例子: 例子?

break 跳出它所在的循环语句或switch 语句,并从紧跟该循环语句或switch ?

语句后的第一条语句处执行int n=13; boolean flag=true; for(int i=2;i<=n/2;i?

++){ if(n%i==0){ flag=false; break; } } System.out.println(n+(flag?” is”?

:”is not”)+” a prime number”);

page 6 continue 用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终?

止条件的判断,以决定是否继续循环

注释

三种类型的注释//单行注释单行注释/*这是这是一段多行注释,一段多行?

注释,它跨越了多个行*/ /** 这是一个文档注释,可以使用这是一个文档注释,?

可以使用JDK的javadoc工具从原文件中的工具从原文件中抽取这种注释形成程序的?帮助文档。抽取这种注释形成程序的帮助文档。*/ 使用javadoc命令建立命令建立?HTML格式的程序文档使用命令建立格式的程序文档javadoc [options] [package?names] [sourcefiles] [@files]

Java的标示符的标示符

1,什么是标示符?,什么是标示符?语言中用来给一个类、在java语言中用?

来给一个类、变量或方法命名的符号语言中用来给一个类2,标示符的命名规则:?

,标示符的命名规则:以字母, 以字母“_” 或“$”符号开头符号开头可以包?

含字母、可以包含字母、“_” 、“$”和数字符号和数字符号大小写敏感不能?

与保留关键字冲突没有长度限制例如:例如:identifier _sys_ var1 user_ nam?

e $char userName

Java的标示符(续)的标示符(的标示符

3,命名约定:,命名:类名, 每个单词的首字母应该大写。类名接口名?

:每个单词的首字母应该大写。class MyFirstClass interface Weapon 字段、方法?

以及对象:第一个单词首字母应小写,字段、方法以及对象:第一个单词首字母应小?写,其他单词首字母大写。boolean isWoman void setName(String name) 常量:?

全部用大写字母表示。常量:全部用大写字母表示。public final int GREEN pub?

lic final int HEAD_ COUNT Java包(Package):它们全都字母小写。):它们全?

都字母小写包):它们全都字母小写。package java.awt.event

Java中的关键字中的关键字关键字列表:abstract boolean break byte ca?

se catch char class continue default do double else extends enum false fin?

al finally float for if implements import instanceof int interface long na?

tive new null package private protected public return short static super s?

witch synchronized this throw throws transient true try void volatile whil?

e Java 中true false不是关键字,而是boolean类型的字面量保留字:const,goto?

所有的关键字都是小写,friendly,sizeof不是java的关键字

练习1,编写程序,判断给定的某个年份是否是闰年。,编写程序,判断给定?

的某个年份是否是闰年。闰年的判断规则如下:闰年的判断规则如下:整除但不能?被100整除,则是闰整除,(1)若某个年份能被整除但不能被)若某个年份能被?4整除但不能被整除年。整除,(2)若某个年份能被)若某个年份能被400整除?,则也是闰年。整除则也是闰年。2,给定一个百分制的分数,输出相应的等级。?

,给定一个百分制的分数,输出相应的等级。90分以上A级分以上级80~89 B级?级70~79 C级级60~69 D级级60分以下E级分以下级3,编写程序求1+3+5+7?+……+99 的和值。的和值。,

练习

4、利用for循环打印9*9 表? 、利用循环打印

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*2=4 2*3=6 3*3?

=9 2*4=8 3*4=12 4*4=16 2*5=10 3*5=15 4*5=20 2*6=12 3*6=18 4*6=24 2*7=14 3*?

7=21 4*7=28 2*8=16 3*8=24 4*8=32 2*9=18 3*9=27 4*9=36

5*5=25 5*6=30 5*7=35 5*8=40 5*9=45

6*6=36 6*7=42 7*7=49 6*8=48 7*8=56 8*8=64 6*9=54 7*9=63 8*9=72 9*9=81?

5、从命令行接受一个参数年份,计算此年份是否为闰年? 、从命令行接受一个?

参数年份,计算此年份是否为闰年6、输出所有的水仙花数,把谓水仙花数是指一个?

数位数,位数,、输出所有的水仙花数,把谓水仙花数是指一个数3位数其各各位?数字立方和等于其本身,其各各位数字立方和等于其本身,例如:例如:153 = ?

1*1*1 + 3*3*3 + 5*5*5 7、求a+aa+aaa+……+aaaa aaaaa=? 、其中a为至之中的?

page 7一个数项数也可以指定? 之中的一个数,其中为1至9之中的一个数,项数也可以指?

定8、求2/1+3/2+5/3+8/5+13/8……前20项之和?项之和?、前项之和

9、利用程序输出如下图形: * *** ***** ******* ***** *** *

第三章:拜访对象村第三章:

有人告诉我那里遍地都是对象

对象Anything is Object 对象是一种客观存在对象与对象并不是孤立的存在?

的,都是有机的结合的对象有属性,代表这个对象有什么对象有方法,代表这个对?

象能干什么

面向对象编程拿解决现实世界中问题的方法来解决计算机问题一个系统是由若?

干功能简单的对象拼装而成,各司其职,各尽所能,专才能做到精对象与对象之间?

有弱耦合的关系,提高代码可重用性

类类是我们人脑中的一种主观认识类不是对象,却是用来创建它们的模型

类是对象的蓝图

创建你的第一个对象

控制Dog对象对象控制

d是一个引用类型的变量,你无法是一个引用类型的变量,将对象装进这个变?

量中

对象的引用事实上没有对象变量这样的东西存在只有引用(reference)到对?

象的变量(我们一般把这个变量直接叫引用)引用并不是对象的容器,而是类似指?

向对象的指针

对象的引用

还是会有东西放进杯子里,只是引用所放进去的是遥控器还是会有东西放进杯?

子里,

对象的声明、创建、赋值有个步骤对象的声明、创建、赋值有3个步骤

基本数据类型和引用数据类型

基本数据类型的变量

代表数值7的字节被放进变量中(00000111)

引用类型的变量

代表取得Dog对象的引用以字节形式放进变量中对象本身并没有放进变量中!?

对象本身并没有放进变量中!

在垃圾收集堆上的生活

在垃圾收集堆上的生活

Book d = c;

C与d引用到同一对象与引用到同一对象

相同值的两份拷贝,相同值的两份拷贝,一台电视两个遥控器

在垃圾收集堆上的生活

c = b;

把变量b的值赋给c,变量b的字节组拷贝了一份给c B和c两者都引用相同的对?象

堆上的生与死Book b = new Book(); Book c = new Book();

堆上的生与死b = c;

对象1被抛弃并可作为垃圾收集的对象

堆上的生与死c = null;

将null赋值给c,它代表它不再引用任何对象。

第四章:对象的行为第四章:

状态影响行为,行为影响状态状态影响行为,

对象的状态和行为实例变量(状态)方法(行为)

你可以传值给方法你可能会告诉Dog对象叫几声:

void bark(int num){ while(num>0){ System.out.println(“Wa~Wa~”); num?

--; } }

你可以从方法中取返回值void 代表方法并没有返回任何东西一个方法可以回?

传给调用方指定的类型值,如:

page 8 int giveSecret(){ return 42; }

说好了要返回,就一定要返回,值返回的类型必须相符Java并不要求你一定处?

理返回值

你可以向方法中传入一个以上的参数方法可以有多个参数如果方法有参数,你?一定要以正确的数量、类型、和顺序传递参数你以可以将变量当作参数传入,只要?类型相符就可以

值传递或引用传递在java里,调用传递参数时都是值传递,或者叫拷贝传递,?

不管理参数的类型是基本数据类型还是引用在型

声明与初始化实例变量实例变量是在类定义的实例变量永远都会有默认值,即?使你没有明确地赋值给它

实例变量与局部变量之间的差别实例变量是声明有类内而不是方法内局部变量?是声明在方法内的局部变量在使用前必需初始化局部变量没有默认值!如果在变量?使用被初始化前就使用,编译会报错方法的参数基本上与局部变量相同,但你不需?要直接初始化它,编译器会确保方法调用时会有与声明相符的参数传进来,且参数?会自动被赋值

局部变量和实例变量的寿命局部变量只存活在声明该变量的方法中实例变量的?寿命与对象相同,如果对象还活着,则实例变量也会是活的。那引用变量呢?

只要有活着的引用,对象也就会活着当最后一个引用消失时,对象就会变成可?

回收的

方法的重载(方法的重载(overload))方法名相同参数列表不同返回类?

型可以不同,也可以相同

重载的方法只是刚好有相同名字的不同方法

第五章:数组第五章:

什么是数组数组也是对象数组中保存着多个相同类型的元素数组中的每一个?

元素都是变量

创建一个int型的数组对象创建一个型的数组对象

1. 声明一个int数组变量,数组变量是数组对象的遥控器int[] nums;

2. 创建?

大小为7的数组,并将它赋值给变量nums nums = new int[7]; 3. 赋于int数组每一个?

元素一个int值nums[0] = 6; nums[1] = 34; 这个数字我们称为数组的nums[2] = ?

23; 下标,数组的下标从0开下标,nums[3] = 4; 始nums[4] = 15; nums[5] = 0?

; nums[6] = 57;

7个int类型的变量

创建数组对象的另外几种方式Int[] nums = {6,34,23,4,15,0, 57}; Int[] n?

ums = new int[] {6,34,23,4,15,0, 57}; []可以换换位置,如:

Int nums[];

数组犹如杯架

元素本身是基本类型的,元素本身是基本类型的,但数组却是个对象

创建Dog数组数组创建1. 声明一个Dog数组变量pets 2. 创建大小为7的Dog数?组对象,并赋给变量pets 3. 创建新Dog对象并将它赋值给数组元素Dog[] pets; pe?

ts = new Dog[7]; pets[0] = new Dog(); pets[1] = new Dog(); …

创建Dog数组数组创建Dog[] pets; pets = new Dog[7];

创建Dog数组数组创建pets[0] = new Dog(); pets[1] = new Dog();

Java注重类型注重类型一旦数组被声明出来,你就只能装入所声明类型的元素?

你不能将Cat放进Dog数组中

数组元素的默认值byte short int long 为0 float double 为0.0 char 为…?

\0’boolean 为false 引用类型为null

数组的一个属性--length 数组的一个属性所有java数组都有一个length属性,?

表示数组的长度长度的意思是指这个数组最多能保存的元素个数length属性只能被?

读取,不能被修改

多维数组

1. 定义方式:type 维数arrayName;定义方式:;例如:例如:int [][?

] intArray;int[][][] a2;;;2. 分配内存空间有两种方法:分配内存空间?

page 9,有两种方法有两种方法:直接为每一维分配空间: int[][] a = new int[2][3];?

直接为每一维分配空间;分别为每一维分配空间int[][] a = new int[2][ ];?

;a[0] = new int[3]; a[1] = new int[3]; 可以为每行设置为空间大小不同的数组?

。可以为每行设置为空间大小不同的数组。a[0] = new int[3]; a[1] = new int[?

5];

多维数组数组的数组初始化,有两种方式:先定义数组,分配空间,然后直接?

对每个元素进行赋值在定义数组的同时进行初始化。如:int a[][] = {{2,3}, {?

1,5}, {3,4}};

数组的拷贝System.arraycopy();

arraycopy(Object src, int srcPos, Object dest, int destPos, int lengt?

h)

src - 源数组。srcPos - 源数组中的起始位置。dest - 目标数组。destPo?

s - 目标数据中的起始位置。length - 要复制的数组元素的数量。

练习

1.定义一个定义一个int型的一维数组,包含个元素,分别赋一些随机整数,?

然后求出所型的一维数组,个元素,定义一个型的一维数组包含10个元素分别?

赋一些随机整数,有元素的最大值,最小值,平均值,和值,并输出出来。有元素?

的最大值,最小值,平均值,和值,并输出出来。2.定义一个定义一个int型的一维?

数组,包含个元素,分别赋值为型的一维数组,个元素,定义一个型的一维数组?

包含10个元素分别赋值为1~10,然后将数组中,的元素都向前移一个位置,即,?a[0]=a[1],a[1]=a[2],…最后一个元素的值是的元素都向前移一个位置,最后一个?

元素的值是原来第一个元素的值,然后输出这个数组。原来第一个元素的值,然后?

输出这个数组。3. 定义一个定义一个int型的一维数组,包含40个元素,用来存储?

每个学员的成绩,循环产型的一维数组,包含个元素用来存储每个学员的成绩,?

个元素,型的一维数组之间的随机整数,生40个0~100之间的随机整数,将它们存?储到一维数组中,然后统计成绩低于平均个之间的随机整数将它们存储到一维数组?中,分的学员的人数,并输出出来。分的学员的人数,并输出出来。 4. (选做)?

承上题,将这40个成绩按照从高到低的顺序输出出来。个成绩按照从高到低的顺序输?出出来。选做)承上题,将这个成绩按照从高到低的顺序输出出来5,(选做)编写?

程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,(选做)编写程序?,将一个数组中的元素倒排过来。例如原数组为,,,,5;则倒排后数组中的?

值为5,4,3,2,1。;则倒排后数组中的值为,,,,。

练习

6,要求定义一个要求定义一个int型数组包含型数组a,包含个元素,保存个?

随机的4位数要求定义一个型数组包含100个元素保存个元素保存100个随机的?位数。再定义一个个随机的位数。int型数组,包含个元素。统计数组中的元素?

对求余等于的个数,保存型数组b,包含10个元素统计a数组中的元素对求余等于?0的个数个元素。数组中的元素对10求余等于的个数,型数组求余等于1的个数?依此类推。到b[0]中;对10求余等于的个数,保存到中求余等于的个数,保存到?b[1]中,……依此类推。中依此类推7,定义一个定义一个20*5的二维数组,用来?

存储某班级位学员的门课的成绩;这5门课的二维数组,位学员的5门课的成绩定?义一个的二维数组用来存储某班级20位学员的门课的成绩;门课按存储顺序依次?为:按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。,,,和?

。之间的随机整数。(1)循环给二维数组的每一个元素赋)循环给二维数组的每?

一个元素赋0~100之间的随机整数。之间的随机整数(2)按照列表的方式输出这些?

学员的每门课程的成绩。)按照列表的方式输出这些学员的每门课程的成绩。(3)?

要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。)要求编写程序?

求每个学员的总分,将其保留在另外一个一维数组中。(4)要求编写程序求所有学?

员的某门课程的平均分。)要求编写程序求所有学员的某门课程的平均分。8,完成?

九宫格程序完成九宫格程序? 完成九宫格程序9,求一个求一个3*3矩阵对角线元素?

之和求一个矩阵对角线元素之和10,打印杨辉三角打印杨辉三角

第六章:构造方法第六章:封装、继承、封装、继承、多态

page 10 哪里来的构造方法Dog d = new Dog();

看起来像是调用Dog()方法

是的,只不过是Dog的构造方法

哪里来的构造方法,哪里来的构造方法,我们没写啊

关于构造方法构造方法必须和类同名构造方法没有返回值类型,连void也没有?

构造方法让你有机会介入new的过程

一个对象的创建过程为对象分配内存空间为实例变量赋初始值调用构造方法?

使用构造方法来初始化对象的状态把初始化代码放到构造方法中,并且把构造?

方法设定成需要参数的编译器一定会帮你写出没有参数的构造方法吗?不会如果你已经写了一个有参数的构造方法,并且你需要一个没有参数的构造方法?

,则你必须自己动手写如果类有一个以上的构造方法,则参数一定要不一样,我们?

可以认为这几个构造方法形成重载关系

this this指当前对象构造方法可以通过this调用另外一个构造方法

封装(封装(Encapsulation))将你的实例变量标记为私有:private 提供?public的getter和setter方法来控制存取动作封装后的代码更具有安全性、可扩展性?

和可维护性

继承(继承(Inheritance))我们把一些类的共性再抽取出来,放到一个类?

中,那么此类就是这一些类的父类,我们就可以说这些子类继承自父类继承意味着?

子类继承了父类的成员,成员的意思就是实例变量和方法单继承和多继承Java是单?继承

设计一个动物仿真程序的继承树

设计一个动物仿真程序的继承树

设计一个动物仿真程序的继承树

我吃素,可脾气我吃素,不太好……

在狗群中,吠叫声是个在狗群中,很重要的事情,该声音很重要的事情,必?

须有代表性和独一无二性

设计一个动物仿真程序的继承树

狼和狗之间也可以共享某些东西对呀,Lion、Tiger 对呀,Lion、和Cat之间?

有共同的部分Cat之间有共同的部分

设计一个动物仿真程序的继承树

它们都是猫科动物

它们都是犬齿动物

方法的覆盖方法名相同,参数列表相同,返回值也相同访问权限不能更封闭?

抛出异常类型不能更宽泛

调用哪个方法Wolf这个类共有几个方法

Wolf w = new Wolf(); w.makeNoise(); w.roam(); w.eat(); w.sleep();

“是一个”与“有一个”是一个”有一个”是一个三角型是多边型外科?

医生是医生哈啰凯蒂是只猫澡盆是一个浴室CUP是电脑

继承有什么意义避免了重复的程序代码,提高了程序的可重用性定义出共同的?

协议

super 代表指向父类的引用super.age super.addAge() 代表调用父类的构造方?

法super(); super(“wangcai”,8);

再看一个对象的创建过程当构造一个对象的时候,系统先构造父类对象,再构?

造子类对象。构造一个对象的顺序:(注意:构造父类对象的时候也是这几步)?

递归地构造父类对象;顺序地调用本类成员属性赋初值语句;本类的构造方法。

练习

某公司的雇员分为以下若干类:某公司的雇员分为以下若干类:Employee:这?

是所有员工总的父类,属性:员工的姓名和生日月份。:这是所有员工总的父类,属?性:员工的姓名和生日月份。方法:根据参数月份来确定工资,如果该月员工过生?日,方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日?

,则公司会额外奖励100元。则公司会额外奖励元SalariedEmployee:Employee的?page 11子类,拿固定工资的员工。属性:月薪的子类,:的子类拿固定工资的员工。属?

性:HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出的子?类,:的子类按小时拿工资的员工,每月工作超出160 小时的部分按照1.5倍工资?发放小时的部分按照倍工资发放属性:每小时的工资、属性:每小时的工资、每?

月工作的小时数SalesEmployee:Employee的子类,销售人员,工资由月销售额和提?

成率决定的子类,:的子类销售人员,属性:月销售额、属性:月销售额、提?成率BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,的?

子类,:的子类有固定底薪的销售人员,属性:底薪。工资由底薪加上销售提成?部分属性:底薪。

多态(polymiorphism) 多态引用与对象可以是不同的类型引用类型可以是实际?

对象类型的父类参数和返回类型也可以多态

为什么要多态通过多态,你可以编写出引进新型子类时也不必修改的程序如?果你没有办法看到类的源程序,但又想改变该类的方法时,可以覆盖掉它的方法…?instanceof和类型转换和类型转换使用instanceof 运算符确定对象的类型?

子类对象可以隐含扩展为父类型父类型必须明确声明转化为子类型不是所有的父类?型对象都能转化为子类型

第七章:package、import以及第七章:、以及访问权限

访问权限控制Modifiers public protected Default (no modifier) private?

Inside class Yes Yes Yes Yes The same Subclass package Yes Yes Yes No Yes?

Yes No No other Yes No No No

第八章:高级语言特性第八章:

静态变量

一个类只有一份,一个类只有一份,被类的所有实例共享能在没有生成任何?类的实例时就被访问到在某种意义上类似于全局变量直接使用类名来访问public class Animal { private int serialNumber; private String name; ?

private static int counter = 0; public Animal (String name) { counter++; s?

erialNumber = counter; https://www.doczj.com/doc/574347787.html,=name; } public static void main(String[] ?

args) { Animal a1=new Animal(“xiaoqiang”); Animal a2=new Animal(“wangca?

i”); Animal a3=new Animal(“a huang”); System.out.println("counter " + c?

ounter); System.out.println(https://www.doczj.com/doc/574347787.html,+ “:”+a1.serialNumber); System.out.pr?

intln(https://www.doczj.com/doc/574347787.html,+ “:”+a2.serialNumber); System.out.println(https://www.doczj.com/doc/574347787.html,+ “:”+a?

3.serialNumber); } }

静态方法

可以在没有任何实例时调用不能在static方法内部访问非static成员不能被非?static方法覆盖

public class StaticTest { int x; public static void main(String[] arg?

s){ System.out.println(Algorithm.add(2 , 3)); //x = Algorithm.add(4,5); //?

illegal } } class Algorithm { public static int add(int a, int b) { return?

a + b; } }

再看我们的HelloWorld程序程序再看我们的static main方法的参数

public class MainMethodParameter{ public static void main(String[] ar?

gs){ for(int i=0;i

final 关键字

final用来修饰一个类, 方法,属性或局部变量final 类不能被继承final 方法?

不能被覆盖final 变量的值不能被改变

package sample; public final class FinalTest { final int i = 10; /** ?

Creates a new instance of FinalTest */ public FinalTest() { } public final?

int getNumber() { i = 20; //illegal return i; } } class FinalSub extends ?

FinalTest {} //illegal class FinalDemo { final int getNumber() { return 10?

; } } class FinalDemoSub extends FinalDemo { int getNumber() { //illegal r?

eturn 20; } }

page 12 抽象类Animal对象应该长什么样子?

有些类是不应该被初始化的

abstract

编译器是不会让你初始化抽象类的抽象类除了被继承之外,是没有用途的

抽象与具体

抽象方法抽象的方法没有实体

如果一个类中有抽象方法,就必须把类也标记为抽象的抽象方法的意义在于,?就算无法实现出方法的内容,但还是可以定义出一组子类型共同的协议有抽象方法的好处是?

多态…

你必须实现所有的抽象方法,除非子类也是抽象的

实现抽象方法就如同覆盖方法一样

接口接口是一种特殊的抽象类接口中所有的方法都是抽象方法一个类可以实?现多个接口接口中的所有属性都会自动声明为public final static 接口与接口之间?

可以多重继承接口中没有构造方法当我们用类去实现接口时,如果不希望实现类是?抽象类的话,那么就要实现接口中定义的所有的方法一个类在继承另外一个类的同?时,还可以实现多个接口

接口作用1. 多继承

不会破坏类和类之间的树状关系,接口是对类关系的补充,附加类型信息,不?影响类的主干继承关系区分类的主类型和副类型,可以对类再抽象,抽象出附加类?型(接口)

2. 解耦合的工具

把制定标准,使用标准和实现标准三者分开,标准的使用者和标准的实现者通?过标准间接发生联系,耦合度减弱

接口的回调

先有接口的使用者,后有接口的实现者时,一般我们把使用这种接口的方式叫?做回调

Object类类所有类的源头,所有类的父类没有继承过其他类的类会隐含在继?承Object类你可以用Object的引用指向任何对象(多态?)

Object类中的两个方法类中的两个方法equals

==运算符用来判断两个引用值是否相等(是否指向同一个对象)equals(Objec?

t o) 方法一般在定义类时被覆盖(改写),该方法用来判断两个对象值是否相同。?toString

返回描述某个对象的字符串当直接输出一个对象时,这个方法被隐含的调用

包装类(包装类(Wrapper Class))

Primitive Type boolean byte short char int long float double

Wrapper Class Boolean Byte Short Character Integer Long Float Double

练习

1,定义一个接口定义一个接口Assaultable(可攻击的,该接口有一个抽象方法?

可攻击的),该接口有一个抽象方法attack()。定义一个接口可攻击的。2,定义?

一个接口定义一个接口Mobile(可移动的),该接口有一个抽象方法该接口有一个抽?象方法move()。定义一个接口(可移动的)该接口有一个抽象方法。3,定义一个?

抽象类定义一个抽象类Weapon,实现实现Assaultable接口和接口和Mobile接口,但?并没有给出具体的接口,定义一个抽象类实现接口和接口实现方法。实现方法?。4,定义个类:Tank,Flighter,WarShip都继承自定义3个类都继承自Weapon,分别?

用不同的方式实现分别用不同的方式实现Weapon 定义个类:都继承自分别用不同?的方式实现类中的抽象方法。类中的抽象方法。5,写一个类写一个类Army,代表一?支军队,这个类有一个属性是写一个类代表一支军队,数组w(代表一支军队这?个类有一个属性是Weapon数组(用来存储该军队数组所拥有的所有武器);该类还?提供一个构造方法,在构造方法里通过传一个所拥有的所有武器);该类还提供一个?

构造方法,在构造方法里通过传一个int类型的);该类还提供一个构造方法类型的?page 13 参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组。参数来限?

定该类所能拥有的最大武器数量并用这一大小来初始化数组w。该类还提供并用这一?大小来初始化数组一个方法addWeapon(Weapon wa),表示把参数所代表的武器加入到?数组中。表示把参数wa所代表的武器加入到数组一个方法表示把参数所代表的武?器加入到数组w中在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的?所有武器攻击和移动和在这个类中还定义两个方法,数组中的所有武器攻击和移?

动6,写一个主方法去测试以上程序。,写一个主方法去测试以上程序。

练习

1,写一个类写一个类Student,包含两个属性写一个类,包含两个属性Strin?

g name和int 和age;要求覆盖toString() ;要求覆盖

equals()方法,使得直接输出Student对象时输出的是对象的方法,使得直接输?

出对象时输出的是对象的name和age;并且当两个和;方法对象时输出的是对象?的对象的name和age都相同时认为它们相等;然后写一个主方法测试以上定义。和?都相同时认为它们相等;对象的都相同时认为它们相等然后写一个主方法测试以上?定义。2,写一个程序,要求运行时从命令行输入不同的值打印不同的结果,若输入:?male 写一个程序,要求运行时从命令行输入不同的值打印不同的结果,若输入:写?

一个程序则输出“you are wrong!!”。则输出“。3,写一个程序,要求运行程序?

时从命令行输入两个整形的数值,程序将他们的和值输出。写一个程序,要求运行程?序时从命令行输入两个整形的数值,程序将他们的和值输出。写一个程序则输出“则输出“you are a boy!”;若输入:female,则输出“you are a ?

girl!”;若输入其;若输入:,则输出“;

第九章:内部类第九章:

成员内部类(实例内部类)成员内部类(实例内部类)

四个访问权限修饰符都可以修饰成员内部类。在创建成员内部类的实例时,外?

部类的实例必须存在。成员内部类的实例自动持有外部类的实例的引用。外部类实?

例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而?一个外部类实例对应零个或多个内部类实例。在外部类中不能直接访问内部类的成员?,必须通过内部类的实例去访问。成员内部类中不能定义静态成员,而只能定义实例?成员。如果实例内部类B与外部类A包含同名的成员(比如成员变量v),那第在类B?中,this.v表示类B的成员,A.this.v表示类A的成员。内部类和外部类在编译时时不?同的两个类,内部类对外部类没有任何依赖。内部类是一种编译时语法,在编译时?

生成的各自的字节码文件,内部类和外部类没有关系。

静态内部类静态内部类的实例不会自动持有外部类的特定实例的引用,在创建?

内部类的实例时,不必创建外部类的实例。静态内部类可以直接访问外部类的静态成?

员,如果访问外部类的实例成员,就必须通过外部类的实例去访问。在静态内部类?

中可以定义静态成员和实例成员。客户类可以通过完整的类名直接访问静态内部类的?静态成员。注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此?时必须使用内部类来实现。用接口不能完全地实现多继承,用接口配合内部类才能实?现真正的多继承。

局部内部类局部内部类只能在当前方法中使用。和实例内部类一样,不能包含?

静态成员。在局部内部类中定义的内部类不能被public、protected、private访问?

控制修饰符。局部内部类和实例内部类样,可以访问外部类的所有成员,此外,局?

部内部类还可以访问所在方法中的final类型的参数和变量。

匿名内部类

匿名类是一种特殊的内部类,这种类没有名字。匿名类本身没有构造方法,但?

是会调用父类的构造方法。匿名类尽管没有构造方法,但是可以在类中提供一段实例?初始化代码,JVM会在调用父类的构造方法后,执行这段代码。除了可以在外部类的?方法内定义匿名类以外,还可以在声明一个成员变量时定义匿名类。匿名类除了可?

以继承外,还可以实现接口匿名类和局部内部类一样,可以访问外部类的所有成员,?如果匿名类位于一个方法中,还能访问所在方法中的final类型的变量和参数。局部?

内部类的名字在方法外是不可见的,因此与匿名类一样,能够起到封装类型名字的作?用。

page 14 匿名类和局部内部类的区别匿名类的程序代码比较简短。一个局部内部类可以?

有多个重载构造方法,并且客户类可以多次创建局部内部类的实例,而匿名类没有构?造方法,就算用初始化代码块实现,也不能重载,并且只能创建一次实例。

从内部类继承class Outer{ private int a; public Outer(int a){this.a=a?

;} class Inner{ public Inner(){} //访问外部类的实例变量a public void print?

(){System.out.println("a="+a);} } }

从内部类继承

public class Sample extends Outer.Inner{ //public Sample(){} //编译错?

误public Sample(Outer o){ o.super(); } public static void main(String arg?

s[]){ Outer outer1=new Outer(1); Outer outer2=new Outer(2); Outer.Inner in?

=outer1.new Inner(); in.print(); Sample s1=new Sample(outer1); Sample s2=n?

ew Sample(outer2); s1.print(); //打印a=1 s2.print(); //打印a=2 } }

从内部类继承由于直接构造实例内部类时,JVM会自动使内部类实例引用它的?

外部类实例。但如果上面Sample类通过以下方式构造对象时:Sample s = new Samp?

le();JVM无法决定Sample实例引用哪个Outer实例,为了避免这种错误的发生,?在编译阶段,java编译器会要求Sample类的构造方法必须通过参数传递一个Outer实?例的引用,然后在构造方法中调用super语句来建立Sample实例与Outer实例的关联关?系。

内部接口在一个类中也可以定义内部接口在接口中可以定义静态内部类,此时?

静态内部类位于接口的命名空间中。在接口中还可以定义接口,这种接口默认也是?public static 的,如Map.Entry就是这种接口

内部类的用途封装类型

把标准公开,把标准的实现者作为内部类隐藏起来,强制要求使用者通过标准?

访问标准的实现者,从而强制做到弱耦合!

直接访问外部类的成员配合接口,实现多继承,当父类和接口方法定义发生冲?

突的时候,就必须借助内部类来区分模板回调

第十章:异常(Exception) 第十章:异常

这当然很危险,但是我可以在出问题时把它处理掉

调用有风险的方法(或许不是你写的时调用有风险的方法或许不是你写的)时?

或许不是你写的假设你调用了一个不是你自己写的方法该方法执行某些有风险的任?务,可能会在运行期间出现问题你必须认识到该方法是有风险的你得写出可以在发?生问题时加以处理的程序代码,未雨绸缪

异常/例外(异常例外(Exception)例外)

Java使用异常来告诉调用方法:“有问题,我不行了”Java的异常处理机制是?

个简洁、轻量化的的执行期间异常情况的处理方式,这让你能够将处理错误状况的程?序代码摆在一个容易阅读的位置。但这依赖于你已经知道所调用的方法是有风险的(?

也就是方法会产生异常) 如何才能得知方法会抛出异常呢?那就得看方法的声明是否?

有throws 语句就知道了编译器要确定你了解所调用的方法是有风险的如果你把有风?险的程序代码包含在try/catch块中,那么编译器就会放心许多try/catch块会告诉?

编译器你确实知道所调用的方法会有风险,并且也已经准备好要处理它,它只会注意?你有没有表示你会注意到异常

异常也是对象异常是一种Exception类型的对象,它的类继承关系如下:

是谁抛出了异常在编写可能会抛出异常的方法时,它们都必须声明有异常

会抛出异常的方法必须要声明它有可能会这么做

方法可以抓住其他方法所抛出的异常,异常总是会丢回给的异常,调用方

RunTimeException

一般情况下,编译器保证:如果你有抛出异常,则你一定要使用throws来声明?

这件事如果你调用会抛出异常的方法,你必须得确认你知道异常的可能性。将调用?

包在try/catch块中是一种满足编译器的方法(当然还有另外的方法) 不不不,我见过?

异常,但我没有try/catch,编译器还是通过了编译,比如:NullPointerExceptio?

n ArrayIndexOutOfBoundsException ,虽然它名字很长是的,RuntimeException除?

外检查异常(Checked Exception) 不检查异常(Unchecked Exception)

page 15 为什么不管RuntimeException 为什么不管为什么编译器不管那些运行时异常呢?

?它们不也会让整个程序跟着死掉吗?

大部分的RuntimeException都是因为程序逻辑的问题,而不是以你所无法预测?

或防止的方法出现的执行期失败状况,你无法保证文件一直都在,你无法保证服务器?不会死机。但是你可以确保程序不会运行不合理的逻辑,例如只有5个元素的数组取?第八个元素的值try/catch是用来处理真正的异常,而不是你程序的逻辑错误,该块?

要做的是恢复的尝试,或者至少会优雅的列出错误信息

异常类继承图

Review

方法可以在运行期间遇到问题时抛出异常异常是Exception类型的对象编译器?

不会注意RuntimeException类型的异常,RuntimeException不需要声明或包在try/c?atch的块中(当然你还是可以这样做) 编译器所关心的是称为检查异常(Checked Exce?ption)的异常,程序必须要认识有异常可能的存在方法可以用throw关键字抛出异常?

对象:Throw new Exception(); 会抛出异常的方法必须声明成throws …Exception?

如果要处理异常状况,就把调用包在try/catch块中,并将异常处理/恢复程序放在?catch块中

try/catch块的流程控制块的流程控制

finally:无论如何都要执行的部分:

如果你要煮东西吃,如果你要煮东西吃,得先把炉子打开如果你的烹饪失败?了,必如果你的烹饪失败了,须把炉子关上如果你成功了,如果你成功了,必须?

把炉子关上不管怎么样,不管怎么样,你都得把炉子关上

finally块是用来存放不管有没有异常都得执行的程序try{

turnOverOn(); x.bake(); }catch(BakingException e){ e.printStackTrace(?

) }finally{ turnOverOff(); }

有finally的try/catch流程的流程如果try块失败了,抛出异常,程序会马上?

转移到catch块,当catch块完成后,会执行finally块,finally完成后,继续执行?

其余部分如果try块成功,程序会跳过catch块并移动到finally块,当finally块完?

成后,继续执行其余部分如果try或catch块有return语句,finally还是会执行,程?

序会跳到finally块然后再回到return语句

一个方法可以抛出多个异常多重异常

void doLaundry() throws PantsException, LingerieExcepiton{}

处理多个异常

try{ doLaundry(); } catch(PantsException e1){ //处理代码}catch(Linge?

rieExcepiton e2){ //处理代码}

异常的多态异常也是对象,所以也可以用多态的方式来引用

异常的多态以异常的父类声明会抛出的异常

void doLaundry() throws ClothingException()

声明成ClothingException 可让你抛出任何ClothingException 及其子类,?

及其子类,这代表此方法可以抛出PantsException,Lin gerieExcepiton等异等异?

常而不用加别的声明

以所抛出的异常父类型来catch异常

try{ doLaundry(); }catch(ClothingException e){ //… }

异常的多态

可以用父类来处理所有异常,可以用父类来处理所有异常,但这并不代表应该?

这么做try{ doLaundry(); }catch(Exception e){ //处理处理…处理} 为每个需?

要单独处理的异常编写不同的catch块为每个需要单独处理的异常编写不同的块Tr?

y{ doLaundry(); }catch(TeeShirtException e1){ //处理处理1… 处理}catch(L?ingerieException e2){ //处理处理2… 处理}catch(ClothingExcepiton e3){ //?

处理处理3…处理}

多个catch块时的顺序块时的顺序多个大小很重要,要从小到大地放置要捕获?

的异常如果你把继承层次较高的异常放在前面,那么编译器是不会让你通过编译的?

。处于同一层次的异常顺序可以是任意的

page 16 不想处理异常时…不想处理异常时当你调用有危险的方法时,编译器需要你对?

这件事有所表示,一般情况下,我们会用try/catch处理这种情况。但是,你还可以?

选择另外一种处理方式,让你的方法直接抛出它,而不用try/catch 异常不停地向上?

级调用者抛出,形成了异常栈早晚还是得有人来处理这件事,但若是连main()也抛出?异常呢?我们总结一下,对待异常的两种方式:处理或者声明

异常处理的几个小规则catch与finally不能没有try try与catch之间不能有程?

序try一定要有catch或finally 只有finally的try必须要声明异常

Error 指示合理的应用程序不应该试图捕获的严重问题一般不应该捕获错误,?因为错误是不可恢复的

第十一章:java中的数据结构第十一章:中的数据结构

连排序都不会,将来怎么卖鸡排呢,连排序都不会,将来怎么卖鸡排呢,还是?专攻数学好了…还是专攻数学好了

数组与集合使用一个Object类型的数组,看看增删改查如何实现

一般数组在创建时就必须确定大小存放对象给一般数组时必须指定位置一般数?组使用特殊的语法[]

写一个大小可变的数组类集合

用一个对象来管理多个对象,那么这个对象就是集合对象

ArrayList类类使用add()来新增元素使用remove()来删除元素要寻找某项元?素的位置,使用indexOf() 使用isEmpty()来判断是否为空使用size()方法来取得大?小ArrayList会自动调整大小ArrayList中只能保存对象而不是基本数据类型…

集合框架

Collection

Set

List

Map

SortedSet

SortedMap

List: 有序存放,允许重复有序存放,Set: 随机存放,不允许重复的对象,?

随机存放,不允许重复的对象,SortedSet: 自动排序存放Map: 存储键--值(ke?

y--value)对,要求所有的键必须唯一值)SortedMap: 按照键的大小来排序集合框架的继承关系和实现类

Collection

HashSet (Set)

LinkedList Vector,ArrayList (List)

Hashtable Hashmap (Map)

TreeSet (SortedSet)

TreeMap (SortedMap)

迭代器iterator 迭代器iterator是个接口用来用遍历集合对象没有iterato?

r不行吗?为什么非得用iterator呢?

几个集合实现类的特点HashSet

防止重复的集合,可快速地找寻相符的元素

TreeSet

以有序状态保持并可防止重复

LinkedList

针对经常插入或删除中间元素所设计的高效率集合

HashMap

可用成对的key/value来保存与取出

LinkedHashMap

类似HashMap,但可记住元素插入的顺序

HashSet 注重独一无二的性质对象怎样才算相等?

引用相等性(堆上同一个对象的两个引用)对象相等性(堆上的两个对象在意?

Java基础知识总结(超级经典)

Java基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。demo 4,该技术什么时候用?test。 ----------------------------------------------------------------------------------------------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它

两者的基础; JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\ 2):临时配置方式:set classpath=.;c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运

Java基础知识

一、填空题(每题1分,共50分) 1.Java程序可以分为两种基本的类型,分别是_________________和_________________。 2.如果一个类不显示地写上其继承的父类,则它的默认的直接父类是系统类_______________。 3.Java对内存的释放是采用____________________机制。 4.接口的所有成员方法都具有________________和________________属性。 5.设有一个Java应用程序,其源程序文件名为Test.java,则编译该源程序的命令是_________________________,运行该应用程序的命令为_________________________。 6.如果线程类A需要继承类B,而类B不是线程类,则需要通过接口类Runnable构造线程类A,类A的具体定义为 ___________________________________________________。 7.Java系统提供了方法____________________来强制立即回收垃圾。 8.运行以下语句后b的值是__________________。 String s1=“1234”; String s2=new String(“1234”); Boolean b=(s1 = = s2); 9.通过Connection实例对象的_____________________方法可以创建出Statement的实例对象。 10.JAVA小应用程序一般是_____________的子类。 11.JAVA语言通过____________机制简化了程序的内存管理。 12.JAVA字符(char)采用的是___________字符集。 13.面向对象的计算机语言一般应具有3个基本特性:____________、____________和______________。 14.JAVA语言中,捕获异常是通过________________语句结构来实现的。 15.编写线程程序主要是构造线程类,而构造线程类的方式主要有以下两种:(1)____________________________________________ (2)____________________________________________ 16.假设用JAVA语言为清华大学(网址为https://www.doczj.com/doc/574347787.html,)编写了图像处理包image,那么按照SUN公司的建议,这个包的名称最好为_________________。 17.JAVA数据类型中,具体包括哪三种引用数据类型:___________、____________、______________。 18.JAVA程序以________为单位进行组织的。 19.如果没有显式的定义类的构造方法,则系统会为该类定义一个默认的构造方法,这个默认的构造方法的作用是_____________________________________。

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

《Java编程基础知识点汇总及习题集》--答案

目录 第一章 Java入门 (2) 第二章 Java基础 (5) 第三章条件转移 (16) 第四章循环语句 (22) 第五章方法 (28) 第六章数组 (35) 第七章面向对象 (44) 第八章异常 (65)

第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个平台中最核心 的部分,包含Java最核心的类库。 ?JavaEE:(J2EE,Java 2 Platform, Enterprise Edition,企业版),开发、装 配、部署企业级应用,包含Servlet、JSP、 JavaBean、JDBC、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platform Micro Edition,微型版),用于小型电子设备 上的软件开发。 2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径, JVM在运行时通过classpath加载需要 的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将编 写好的Java文件(.java)编译成Java 字节码文件(.class); ?java.exe:Java运行工具,启动Java虚 拟机进程,运行编译器生成的字节码 文件(.class) 5、一切程序运行的入口 public static void main(String args []){ System.out.println(“Hello World!”); } 课堂笔记

java基础知识分析

Java 思路 1写代码 1)明确需求,我要做什么? 2)分析思路。要怎么做?1 2 3。 3)确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4)代码实现。用具体的java语言代码把思路体现出来 2学习新技术的四点 1)该技术是什么? 2)该技术有什么特点(使用注意) 3)该技术怎么使用。Demo 4)该技术什么时候使用?test。 一Java 概述: 1991年San公司的JamesGosilng(詹姆斯·高斯林) 等人开始开发名称为Oak的语言,希望用于控制嵌入在有线电视交换盒,PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构; JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对wep程序的开发 JAVASE: Java Platform Enterprise Edition, 完成桌面应用程序的开发是其他两者的基础; JAVAME: Java DevelopmentKit, java的开发和运行环境,java的开发工具jre;

JDK, JRE: 1JDK:java DevelopmentKit , java的开发和运行环境,java的开发工具和jre。 2JRE:java Runtime Environment, java程序的运行环境,java运行的所需的类库+JVM(java 虚拟机)。 3配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 1) 永久配置方式: JAVA_HOME=%安装路径%\Java\jbk Path=%JAVA_HOME%\bin 2) 配置临时方式: setpath=%path%C:\ProgramFiles\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置路径下找。 classpath的配置: 1)永久配置方式:classpath=.;c:\;e:\ 2)临时配置方式:setclasspath=.c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况: 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件。如果指定了classpath,那么会在指定的目录下查找要运行的类文件。 还会在当前目录找吗?两种情况: 1)如果classpath的值结果有分号,在具体路径中没有找到运行的类,会默认在前目录 在找一次。 2)如果classpath的值结果处没有分号,在具体路径中没有找到运行的类,不会再当前 目录找。 一般不指定分号,如果没有在指定目录下找到想运行的类文件,就报错,这样可以调试程序4javac命令和java命令做什么事情呢? 要知道java是分两部分的: 一个人是编译,一个是运行。 Javac: 负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java 文件进行编译。生成了jvm可以识别的字节码文件。也就是class文件也就是java的运行程序。 Java: 负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行. 一个文件要被执行,必须要有一个执行的起始点就是main函数(也叫方法)。

Java基础知识总结

基础预备:低级基础 1.1 java基本类型 byte(字节) short(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char(字符型) boolean(布尔型) 1.2值传递和引用传递的区别 值传递:实参初始化形参,两个存储单元不同,不影响实参的值 引用传递:实际参数与形式参数指向同一个地址,形式参数的改变将会影响实际参数1.3当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。方法调用该对象引用的参数,参数被改变,但是引用不会改变 1.4 &和&&的区别。 &和&&都是逻辑「与」,&&只要第一个表达式是false就不会计算第二个表达式 &也可以作为运算符 2.1使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 引用变量不能变,引用变量所指向的对象中的内容可以改变 2.2final类型可不可以不初始化,如果没有初始化的final类型应该在哪里初始化? final一定有初始值,没有初始化叫空白final 如果没有需要声明之后在其构造器中赋值 2.3 "=="和equals方法究竟有什么区别? 「==」是看两个对象引用是否指向同一个对象 「 equals() 」是比较两个对象的内容是否相等 3.1静态变量和实例变量的区别 静态变量的变量前加了static 的修饰,其中一个对象将它值改变,其他对象得到的就是改变后的结果; 实例变量的变量前没加static 的修饰,某一个对象将其值改变,不影响其他对象

3.2是否可以从一个static方法内部发出对非static方法的调用?为什么? 不可以。使用非static方法需要先创建对象,而使用static方法则不用 4.1 java中什么是自动装箱与拆箱呢? 自动装箱是某地方需要Integer类型,你传int类型会自动生成Integer, 反之Integer变int,就是自动拆箱 4.2 int 和 Integer 有什么区别 Int是基本数据类型,Integer是int的封装类。 原始类型封装类 Boolean Boolean Char Character Byte Byte Short Short Int Integer Long Long Float Float Double Double 5.1请说出作用域public, protected,以及不写时的区别 不写是表示friendly。 作用域当前类同一package 子孙类其他package public √√√√ protected √√√× friendly √√×× private √××× 6.1能不能自己写个类,也叫https://www.doczj.com/doc/574347787.html,ng.String? 可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个https://www.doczj.com/doc/574347787.html,ng.String。 7.1 排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 冒泡,选择,插入,快速 冒泡排序:

java基础知识点

第一天课程(2012-7-10) JAVA常用的名词 JVM java 虚拟机 Application 应用程序必须有一个入口的方法叫做public static void main(String[] args){} Applet 小应用程序该程序必须要内嵌在一个容器中运行,它有自己的生命周期 重点: JAVA的开发环境 JDK: java 开发工具集 JDK版本问题1.4不支持泛型5.0 泛型 6.0枚举 默认安装路径C:\Program Files\Java\ JRE: JAVA运行时环境 环境变量的配置 (1)Path:window寻找可执行应用程序的一个查找路径不同的路径之间使用; 来分隔 配置一个路径C:\Program Files\Java\jdk1.6.0_26\bin (2)CLASSPATH 告诉系统到那些目录下面去查找对应的要执行的文件 .;D:\3020\j2se\cx\chapter1 .表示当前目录 预习作业: 常用的DOS命令 切换目录查询文件拷贝文件重命名移动文件 *表示通配符*.java *.* 常用java命令 Javac 编译命令主要将以.java结尾的Java文件编译生成以.Class结尾的二进制字节码文件。 Javac java文件名.java Java 运行命令java 类名 Javadoc生成帮助文档命令 javadoc java文件 面向对象的基本概念

类 (属性方法构造方法 ) 对象对象创建传递销毁 面向对象的三大基本特性:封装、继承、多态 OOP AOP 类 是由客观事物经过大脑抽象而形成概念,是对一类事物的描述 使用class 关键字来描述类 类中有属性和方法: 属性对应的是事物的静态特性(可以叫做成员变量) 方法对应的是事物的动态特性 对象:是类的一个具体的实例化 创建对象对象的方法: 类名对象名= new 类名(); 调用类的构造方法来创建对象构造方法是特殊的方法:方法名=类名 注意: 类中属性和方法必须在创建对象之后才能使用 对象.属性对象.方法.表示引用 第二天课程 (2012-7-11) JAVA语言描述 类的声明 语法格式: [< modifiers>] class < class_name> { [] [] } 修饰词class类名{ 属性定义部分<可选> 构造方法 <可选> 普通方法 <可选> } 用于修饰class的关键字有两种:(1) public 公共的 (2)缺省不写表示当前类只能在同一个包中使用 注意点:(1)一个java文件中最多只能有一个类被public 修饰,并且要求使用public

java基础知识速成教程

数据类型 (1) 基本数据类型 (1) 引用类型 (3) 控制语句 (3) 顺序结构 (3) 选择结构 (3) 循环结构 (4) 面向对象 (5) 面向过程和面向对象的区别 (5) 类和对象 (5) 成员变量 (5) 方法 (5) 方法的重载(overload) .................................................................... 错误!未定义书签。 构造方法 (7) 内存分析 (7) package (9) import (10) this (10) static (11) super (11) 面向对象的三大特征 (11) 封装 (11) 继承 (12) 方法的重写(override) (12) 多态 (12) 抽象类 (14) 接口 (14) 面向接口编程......................................................................................... 错误!未定义书签。 本站已经对文档保护进行限制了,取消文档保护密码为:https://www.doczj.com/doc/574347787.html, 步骤:进入word 工具---》取消文档保护 数据类型 基本数据类型 a)数值型 i.整型 1.byte 1个字节(256) -128-127 2.short 2个字节(65536) 正负3万 3.int 4个字节正负21亿 4.long 8个字节

ii.浮点型 1.float 4个字节 2.double 8个字节 注: 类型的自动转换 b)字符型2个字节65536 unicode字符集 c)布尔型

java基础知识点总结

Created by AIwen on 2017/5/14、 java就是面向对象的程序设计语言;类可被认为就是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都就是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则就是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、与多态。java提供了private、protected、与public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量与与方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承就是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)与对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、与方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器就是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总就是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以就是public、protected、private其中之一,或者省略构造器名:构造器名必须与类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再就是构造器。 实际上类的构造器就是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总就是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值就是隐式的。 java类名必须就是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其她字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再与后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其她字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以就是java语言允许的任何数据类型,包括基本类型与引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static与final最多只能出现其中的一个,与abstract组合起来使用。也可省略。 返回值类型:可以就是java语言的允许的任何数据类型,包括基本类型与引用类型。 方法名:与成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总就是后执行。

java基础知识练习

1.Java语言特点是什么? Java语言具有如下特性:简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。 2.什么叫Java虚拟机?什么叫Java平台?Java虚拟机与Java平台的关系如何? Java虚拟机(Java Virtual Machine) 简称JVM 。Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 3.Java程序是由什么组成的?一个程序中必须有public类吗?Java源文件的命名规则是怎样的? 一个Java源程序是由若干个类组成。一个Java程序不一定需要有public类:如果源文件中有多个类时,则只能有一个类是public类;如果源文件中只有一个类,则不将该类写成public 也将默认它为主类。源文件命名时要求源文件主名应与主类(即用public修饰的类)的类名相同,扩展名为.java。如果没有定义public类,则可以任何一个类名为主文件名,当然这是不主张的,因为它将无法进行被继承使用。另外,对Applet小应用程序来说,其主类必须为public,否则虽然在一些编译编译平台下可以通过(在BlueJ下无法通过)但运行时无法显示结果。 4.开发与运行Java程序需要经过哪些主要步骤和过程? (1) 下载、安装J2SDK; (2) 设置运行环境参数:JA V A_HOME、PATH、CLASSPATH; (3) 使用文本编辑器编写原代码如HelloWorld.java; (4) 运行命令“javac HelloWorld.java”编译HelloWorld.java为HelloWorld.class; (5) 运行“java HelloWorld”生成HelloWorld.exe。 5.怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用public修饰吗? Java Application是完整的程序,需要独立的解释器来解释运行;而Java Applet则是嵌在HTML编写的Web页面中的非独立运行程序,由Web浏览器内部包含的Java解释器来解释运行。 两者的主要区别是:任何一个Java Application应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extends Applet结尾。 应用程序的主类当源文件中只有一个类时不必用public修饰,但当有多于一个类时则主类必须用public修饰。小应用程序的主类在任何时候都需要用public来修饰。 6.安装JDK之后如何设置JDK系统的PATH,CLASSPATH?他们的作用是什么? (1)PATH环境变量。设置环境变量path是因为window xp是多用户操作系统,支持不同用户的个性化系统定制,这里设置的信息只影响当前用户,而不会影响其他用户。假如只有一个用户,只是运行.class文件,则也不需要设置path环境,因为JDK安装之后会把java.exe 等几个关键文件复制到c:\windows\system32目录中,而此目录已经存在于path变量,所以说用户变量path随不同用户而设置的,设置路径:“D:\jdk1.5\bin ”。PATH环境变量作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PA TH变

JAVA基础知识考核(含答案)

JAVA基础知识考核题 班级:姓名:成绩:一、选择题(80分,每题2分) 1.J ava编译器的命令是( D ) A.java B. appletviewer C. jdb D. javac 2. Java解释器的命令是( A ) A.java B. appletviewer C. jdb D. javac 3. Java开发人员使用的开发工具包是( C ) A.JVM B. JRE C. JDK D. Eclipse 4. 下列说法正确的是( B ) A. 使用Java语言开发的程序可以在任何平台下运行,且不需要JRE B. 使用Java语言开发的程序可以在任何平台下运行,但需要JRE C. Java虚拟机是独立的,JDK中不包含虚拟机 D. Java语言编译后是字节码文件,操作系统可直接执行 5. 下列全部是合法的Java标识符的是( B ) A. 09stu teacher $money B _salary post123 name C case abstract final D #ID list today 6. 程序中有如下语句 final float PI = 3.14f; 下列说法正确的是( C ) A PI 是一个变量,初始化的值是3.14. B 定义有错误,PI 是float类型3.14后不能加f C PI 是一个常量,其值是3.14 D 对PI可以重新赋值,如PI = 3.1415926; 7 下列初始化值正确的是(B ) A float score = 90.5; B boolean flag = false; C char name = "张三"; D boolean num = 1; 8. 有如下代码

Java基础知识

实验一Java基础知识 (以下作业输入输出要求采用控制台和对话框二种方式。) 1、输入一个以秒为单位的时间量,计算所包含的小时数、分钟数和剩余的秒数,并输出。 2、编程:从键盘输入坐标图中一个点的坐标,判断它属于哪个象限。 3、中国有句俗语“三天打鱼两天晒网”,某人从2012年1月1日起三天打鱼两天晒网,编 程计算这月某日,他在打鱼还是在晒网。某日从键盘输入,打鱼则输出Y,晒网则输出N。例如3日,输入为3,输出为Y。 4、编程猜数:计算机随机产生一个[10,20]区间的整数,由人来猜。输出猜测结果是大还是 小或是正确。 5、编程:输入某年某月后,输出该月的天数。 6、输入一个double型数代表美元和美分的总钱数,然后输出与总值等价的dollar(1元)、 quarter(2角5分)、dime(1角)、nickel(5分)、和penny(1分)的数目。 7、小学生学习减法的程序。程序随机产生二个一位整数number1和number2,且满足 number1>number2。程序显示数学算式,在学生输入答案后,程序输出答案是否正确。 8、编程从键盘输入某月第一天是星期几和该月的天数,打印该月月历。 9、编制猜数字游戏程序。每次运行程序时,先用随机函数产生一个整数,范围在100以内, 然后从键盘反复输入整数进行猜数,当未猜中时,提示所猜之数过大或过小,猜中时,指出猜的次数。最多允许猜6次。 10、输入某年某月某日,判断这一天是这一年的第几天? 11、如果一个整数的各位数之和能被9整除,则这个数也能被9整除。编程判断一个整数n是否能被9整除。其中,n由键盘输入。 12、阅读并分析程序,写出其输出结果,并上机验证。 public class BreakLabelDemo{ public static void main(String args[]){ int i,j; one: for(i=1;i<=10;i++){ System.out.print("Pass"+i+":"); for(j=1;j<=100;j++){ if(j==5)break one; System.out.print(j+"");; } } } } 13、编写一个石头剪刀布的小程序,可以使用户跟系统进行猜拳游戏。 游戏要求是:首先提示用户在石头剪刀布中间选择一个,确定后系统随机在石头剪刀布中间选择一个然后判断用户和系统哪个获胜。一局进行完后用户可以选择是否继续游戏,如果用户选择退出游戏则游戏结束。用户连续三次获胜系统提示“运气不错”后退出程序。如果连续失败三次,则提示“太倒霉了”退出程序。

Java基础知识整理

Java知识点总结 1环境搭建与开发 1.1 环境变量 JA V A_HOME:Java的安装目录; CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件); PATH:指定一个路径列表,用于搜索可执行文件。 1.2 Java SDK应用 编译:Javac 类名.class; 运行:Java 类名; 打包:jar cf test.jar test (把当前目录下的test目录下的所有文件压缩到test.jar文件中)。 2变量与常量 Java中的常量用保留字final来实现。 变量:局部变量(local variable)、实例变量(instance variable)、类变量(class variable);任何变量在使用前都必须初始化,局部变量必须显示初始化,实例变量在类的构造方法被调用时初始化(分配默认值),类变量在类被加载时被初始化。 3标识符 3.1 命名 在Java语言中,标识符的定义规则是以字母、下划线、美元符开始,后面可以跟字母、下划线、美元符、数字。 因为Java语言使用Unicode字符集,所以对字母不仅限于英文,还可以是日文、韩文、阿拉伯文、中文等。 区分大小写,没有字数限制。

3.2 关键字 3.2.1static static方法中不能有this和super关键字(static方法不是“面向对象”的,而是“面向类”的)。 static方法中只能访问所属类的static方法和变量。 static数据成员的初始化:在第一次生成该类的对象时初始化。 3.2.2final 1)final数据 a)static final ●更加典型的定义方式是public static final; ●占用一段不能改变的存储空间; ●代表编译时常量,即在编译器就能知道其值(如果只声明为final或 者static,是在运行时才知道值)。 ●全部用大写字母命名,单词之间用下划线隔开。 b)final数据与final引用 ●final数据的值不能被改变; ●final引用是指无法将其指向一个新的对象(数组也是一种引用),对 象本身的值是可以改变的。 c)空白final(声明为final却未赋初始值) ●可以做到根据对象有所不同,又保持恒定不变的特性; ●必须保证使用前已经初始化:在定义处赋值或者在构造器中赋值。 2)final参数 ●无法在方法中更改引用所指向的对象。 3)final方法 ●禁止覆盖,防止任何继承类修改它的定义; ●private方法都是final的,因此private方法无法覆盖。 4)final类 ●不允许继承该类; ●final类中的所有方法都隐式指定为final的。

java基础知识大全(必看经典)

第一讲 Java语言入门 1.1 Java的特点 1.1.1面向对象: ?与C++相比,JAVA是纯的面向对象的语言 C++为了向下兼容C,保留了很多C里面的特性,而C,众所周知是面向过程的语言,这就使 C++成为一个"混血儿"。而JAVA语法中取消了C++里为兼容C所保留的特性,如取消了头文件、指针算法、结构、单元等。 1.1.2可移植(平台无关性): ?生成中间字节码指令 与其他编程语言不同,Java并不生成可执行文件(.exe文件),而是生成一种中间字节码文件(.class文件)。任何操作系统,只要装有Java虚拟机(JVM),就可以解释并执行这个中间字节码文件。这正是Java实现可移植的机制。 ?原始数据类型存储方法固定,避开移植时的问题 Java的原始数据类型的大小是固定的。比如,在任何机器上,整型都是32位,而C++里整型是依赖于目标机器的,对16位处理器(比如8086),整数用两个字节表示;在像Sun SPARC这样的32位处理器中,整数用4个字节表示。在Intel Pentium处理器上,整数类型由具体的操作系统决定:对于DOS和Win32来说,整数是2个字节;对于Windows 9x 、NT和2000,整数是4个字节。当然,使整数类型平台无关之后,性能必然有所下降,但就Java来说,这个代价是值得的。Java的字符串,则采用标准的Unicode格式保存。可以说,没有这个特性,Java的可移植性也不可能实现。 1.1.3简单 ?JAVA在语法上与C++类似 JAVA的语法与C++很接近,有过C或者C++编程经验的程序员很容易就可以学会JAVA语法; ?取消了C++的一些复杂而低效的特性比如:用接口技术代替了C++的多重继承。C++中,一个类允许有多个超类,这个特性叫做"多重继承",多重继承使得编译器非常复杂且效率不高;JAVA 的类只允许有一个超类,而用接口(Interface)技术实现与C++的多继承相类似的功能 其它被取消的特性包括:虚拟基础类、运算符过载等 ?JAVA的基本解释器和类支持模块大概仅40K 即使加入基本的标准库和支持线程的模块,也才220K左右。与GUI(图形用户界面)相比,

Java基础知识整理

Java知识点总结 1环境搭建及开发 1.1 环境变量 JA V A_HOME:Java的安装目录; CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件); PATH:指定一个路径列表,用于搜索可执行文件。 1.2 Java SDK应用 编译:Javac 类名.class; 运行:Java 类名; 打包:jar cf test.jar test (把当前目录下的test目录下的所有文件压缩到test.jar文件中)。 2变量及常量 Java中的常量用保留字final来实现。 变量:局部变量(local variable)、实例变量(instance variable)、类变量(class variable);任何变量在使用前都必须初始化,局部变量必须显示初始化,实例变量在类的构造方法被调用时初始化(分配默认值),类变量在类被加载时被初始化。 3标识符 3.1 命名 在Java语言中,标识符的定义规则是以字母、下划线、美元符开始,后面可以跟字母、下划线、美元符、数字。 因为Java语言使用Unicode字符集,所以对字母不仅限于英文,还可以是日文、韩文、阿拉伯文、中文等。 区分大小写,没有字数限制。

3.2 关键字 3.2.1static static方法中不能有this和super关键字(static方法不是“面向对象”的,而是“面向类”的)。 static方法中只能访问所属类的static方法和变量。 static数据成员的初始化:在第一次生成该类的对象时初始化。 3.2.2final 1)final数据 a)static final ●更加典型的定义方式是public static final; ●占用一段不能改变的存储空间; ●代表编译时常量,即在编译器就能知道其值(如果只声明为final或 者static,是在运行时才知道值)。 ●全部用大写字母命名,单词之间用下划线隔开。 b)final数据及final引用 ●final数据的值不能被改变; ●final引用是指无法将其指向一个新的对象(数组也是一种引用),对 象本身的值是可以改变的。 c)空白final(声明为final却未赋初始值) ●可以做到根据对象有所不同,又保持恒定不变的特性; ●必须保证使用前已经初始化:在定义处赋值或者在构造器中赋值。 2)final参数 ●无法在方法中更改引用所指向的对象。 3)final方法 ●禁止覆盖,防止任何继承类修改它的定义; ●private方法都是final的,因此private方法无法覆盖。 4)final类 ●不允许继承该类; ●final类中的所有方法都隐式指定为final的。

Java基础知识点答案

、12、类的执行路径。作用是指定Java设置为set classpath=“绝对路径”。classpath的设置及作用:文件的。寻找class是用来 javajavac命令在执行的设置及作用:是内部命令。在编译Java的时候需要用到3、path所以我们使用的时候windows自带的命令,java命令,这两个命令不时的时候要用到要设置好环境变量,这样就可以在任何目录下使用了。型点)、浮(整型(byte.short.int.long值类型:基本数据类型(数型JA4、VA数据。数组、接口)、布尔型(boolean))、引用数据类型(class.、字符型(float.double))(char)基本运算符号:赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运AJA V5、 算符、括号运算符。程序基本控制语句:VA6、JA) 判断条件、if (1{ 1;语句2;语句} if(判断条件)2、{ 1;语句} else { 2;语句} (表达式)3、switch { ;;语句主体11 case 选择值;break 2;语句主体;case 选择值2 break; 3;选择值3;语句主体case ;break :语句主体;default} (赋初始值;判断条件;赋值增减量)、for 4{ 语句;} 5、while(判断条件) { 语句1; 语句2; } do 、6. { ;语句1 语句2; } ;while(判断条件)跳出本次循环进入到下次循环。break跳出循环。continue 数组的概念及使用:数组是由一组相同类型的变量所组成的数据类型,它们以一个共7、同的名称来表示。[] 数组名格式一:数据类型] [个数=new 数组名数据类型 i[] int 例:

java基础知识考试

Java基础测试题 一、选择题(每题2分) 1、在JA V A编程中,Java编译器会将java程序转换为()。 A. 字节码; B. 可执行代码; C. 机器代码; D. 以上所有选项都不正确。 2、下列那些不是合法的标识符?() A. Tel_num B. 8ABc C. Emp_1 D. b123.6 E. NULL F. Hello World 3、以下字符常量中不合法的是( )。 A. '|' B. '\'' C."\n" D.'我' 4、下列语句编译没有错误的是:() A. float a=1.5; B.byte a=129; C.byte a=5; D.byte a=(byte)200; 5、java中int数据类型在内存中表示为() A. 2个字节 B.4个字节 C. 由程序员指定 D. 以上都不正确 6、下列程序段执行后t5的结果是( )。 int t1 = 9, t2 = 11, t3=8; int t4,t5; t4 = t1 > t2 ? t1 : t2+ t1; t5 = t4 > t3 ? t4 : t3; A. 8 B.20 C.11 D.9 7、若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( )。 A. 0 B. 4 C. 8 D.–4 8、设a, b, c, d 均为int 型的变量,并已赋值,下列表达式的结果属于非逻辑值的是( ) A. a!=b & c%d < a B.a++ = =a+b+c+d C.++a*b--+d D.a+b>=c+d 9、以下代码段执行后的输出结果为() int x=3;int y=10; System.out.println(y%x); A.0 B.1 C.2 D.3 10、下列语句序列执行后,k 的值是( )。 int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A. 31 B. 32 C. 2 D.33 11、假定有变量定义: int k=7,x=12; 则能使值为3的表达式是()。 A. x%=(k%=5) B.x%=(k-k%5) C. x%=k-k%5 D. (x%=k)-(k%=5) 12、设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是()。 A. 把x和y按从大到小排列 B. 把x和y按从小到大排列

相关主题
文本预览
相关文档 最新文档