Java复习知识点(概念与代码)
前情提要
知识点可能比较杂乱,觉得有用就蛮看吧。。
第一章:
API,JDK,JRE,JVM,IDE这些英文缩写的含义
API:Java应用程序接口,包含了为开发JAVA程序而预定义的类和接口。
JDK:用于开发和运行Java程序的软件
JRE:Java开发工具包,运行Java程序的程序
JVM:Java虚拟机
IDE:快速开发程序的集成开发环境
如何编写,编译,运行一个JAVA程序?
Java源程序保存为.java文件,编译为.class文件。.class文件由Java虚拟机(JVM)执行。
在执行程序之前,必须创建程序并进行编译。
Java编译器将Java源文件翻译成Java字节码文件。
如果没有错误,编译器将生成一个扩展名为.class的字节码文件,然后Java字节码被JVM解释执行。
执行Java程序就是运行程序的字节码,可以在任何一个装有JVM的平台上运行字节码,JVM就是解释器。
Javac:Java编译器,将Java源代码换成字节代;
Java:Java解释器,直接从类文件执行Java应用程序代码;
Cmd用法
第二章:
如何声明变量,常量?
声明变量:datatype variableName
如:int count;
double radious;
声明常量:final datatype CONSTANTNAME=value;
如:final double PI =3.14159;
int,float,double类型的用法,每个类型的占用多少字节?
类型 | 字符数 |
byte | 1字节 |
char | 2字节 |
short | 2字节 |
int | 4字节 |
float | 4字节 |
long | 8字节 |
double | 8字节 |
boolean | 至少1字节 |
在控制台输入:Scanner input =new Scanner(System.in);
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
在控制台输出:System.out.println(“ “+” “+ );
如何进行类型转换?
进行类型转换:自动转换和强制转换p23
第三章:
boolean数据类型声明一个具有值true或者false的变量。
Boolean lightson=true;
boolean类型数据的用法
boolean数据类型声明一个具有值true或false的变量
关系操作符:>,<,>=,<=,!=,==
将true赋值给一个变量x:boolean x=true;
不能将int类型转换为boolean类型,也不能将boolean转为int/d/f/s/long
ASCII码 0-9 48-57 A-Z 65-90 a-z 97 -122
char类型数据的用法:char ch=‘a’
- 自增和自减 System.out.println(++ch)得到‘b’
- Char类型数据可以强制转换成任一一种数据:
Float->char float->int->char
- Int i=(int)’A’ System.out.println(i)得到65
System.out.println("1"+1); 11
System.out.println("1"+1+1); 111
System.out.println(‘1’+1); 50
System.out.println('1'+1+1); 51
System.out.println(‘1’); 1
P127 指定宽度和精度的表格
会使用if语句进行分支判断,比如闰年判断,程序在书本P85.
第四章:
字符数据类型用于表示单个字符。
char类型的编码是Unicode和ASCII码,一个16位Unicode占两个字节,Unicode码包括ASCII码。
(Math.random() 使用)Java随机抽数(48人),随机抽出j个_王陈锋的博客-CSDN博客_随机抽人
产生指定范围的随机数,使用Math.random()获得0.0到1.0之间的随机数。
1+Math.random()*9 表示[1~10)
第五章
求最大公约数 书本P157
Java用辗转相除法求两个整数的最大公约数_王陈锋的博客-CSDN博客
斐波那契数列 19期中考
Java计算Fibonacci(斐波那契)序列的前n项_王陈锋的博客-CSDN博客_java求斐波那契数列前n项
回文数 书本P163
输入一串字符,判断回文字符串(2种算法)_王陈锋的博客-CSDN博客
(回文素数)编写程序,显示前100个回文素数。每行显示10个数,数字中间用一个空格隔开_王陈锋的博客-CSDN博客
素数 书本P165
Java求100以内的素数,并输出_王陈锋的博客-CSDN博客_求100以内所有素数之和并输出java
按值传参:按值传递值类型,引用类型的区别,比如在方法中修改int类型形参会影响实参吗?在方法中修改数组类型形参会影响实参吗?
Java中只有一种参数传递方法:值传递。
传递对象参数,这个值就是一个对对象的引用值。
传递基本类型值和传递引用值得差异
当传递基本数据类型的参数时,传递的是实参的值。在方法中,内容被改变,并不会影响变量的内容。
传递引用类型的参数时,传递的是对象的引用。
基本类型,按值传递
* 举例:给朋友分享你的照片,对方接收的是你的照片的一个实际的副本,
* 你和朋友分别对各自的照片进行操作,不会影响彼此的照片!
* 引用类型:按址传递
* 举例:给朋友分享你的照片,分享的是你上传网上的一个照片的Url(地址),
* 你和朋友都可以通过这个地址访问照片,并对照片进行一个操作!
* 引用类型:按址传递
* 因为数组是一个引用类型。所以传递进去的是它们的引用,故在方法中互换了它们的值,也必然影响到它们原来的值.
声明数组,初始化数组
声明:int[]array; int array[];
创建:array=new int[10];
声明+创建:int[] array=new int[10];
初始化: 1. int[] array= {1,2,3,4,5}; 2. array[0]=1,array[1]=2
int array[]; array={1,2,3,4,5};这种写法是错误的
第七章
声明数组变量的语法
elementType[] arrayRefVar ; elementType arrayRefVar[];
例:double[] myList double myList[]
数组初始化:
elementType[] arrayRefvar = {value0,value1,…,valuek};
例如:double[] mylist ={1.9,2.9,3.4,3.5};
可变长参数列表
可以把类型相同但数目可变的参数传递给方法。方法中的参数声明如下:
typeName . . . parameterName(类型名 . . .参数名)
在方法声明中,制定类型后紧跟着省略号( . . .)。只能给方法中指定一个可变长参数,同时该参数必须是最后一个参数。任何常规参数必须在它之前。
Java将可变长参数当成数组对待。
数组翻倍
编写程序实现Queue类,使之初始数组的大小为8。一旦元素个数超过了大小,数组大小将会翻倍。如果一个元素从数组的开始部分移除,你需要将数组中的所有元素往左边改变一个位置。
队列(Queue)是一种以“先进先出”的方式存放数据的数据结构。设计一个名为Queue的类用于存储整数_王陈锋的博客-CSDN博客_设计一个名为queue的队列类用于存储整数
第九章
关键字this引用对象自身,它也可以在构造方法内部用于调用同一个类的其他构造方法。关键字this是一个对象可以用来引用自身的引用名。
静态变量被类中的所有对象所共享。静态方法不能访问类中的实例成员(即实例数据域和方法)。、静态变量将变量值存储在一个公共的内存地址。要声明一个静态变量或定义一个静态方法,就要在这个变量或方法的声明中加上修饰符static.
类用来定义对象的数据域以及方法,使用通用类来定义同一类型的对象。
uml图
UML
1、- 是private 的意思,对应私有成员(变量、方法)
2、+ 是public 的意思,公开给外部访问的成员(变量、方法)
3、# 是protected的意思,只能在本类或子类访问成员(变量、方法)
4、UML 规定的属性(Attribute)表达式
5、下划线是共享的static类型
第十一章
关键字super代指父类,可以用于调用父类中的普通方法和构造方法。
调用父类构造方法的语法是:
super()或者super(arguments);
构造函数(方法)没有返回类型,甚至没有void
函数(方法)有返回类型或者void
P287 复习题 9.5.6
构造方法必须和所在类的名字相同(参数不同)
构造方法是用new调用的,用来初始化对象
引用类型的数据域默认类型是null
数值类型的数据与默认值是0
Boolean类型数据域默认值是false
静态变量、常量、方法
P294 P295复习题
实例方法可以调用实例方法、静态方法、访问实例数据域、静态数据域
静态方法只能调用静态方法,访问静态数据域
也就是说,在一个类中非静态变量、方法(没有用static修饰的)不能被静态方法调用
例如:一个类F,f为F的一个实例对象,
Class F{
Int i;
Static int s;
Public m1(){};
Public static m2(){};
Public static void main(Stirng[] args){
Int k=f.i √ f.s f.m1() f.m2() 都√
K=F.i × k=F.s √ F.m1 × F.m2 √
}
}
this
this指向的是类中的成员变量
P310 9.14.2 9.14.3
私有private 只能修饰类的成员,public可以修饰类或者类的成员
但是在局部变量上用private或者public都会导致编译错误
P298程序清单9-8 Circle类
Java子类不能重写(覆盖)父类的静态方法
面向对象 2大题单个类 和 继承类
包装类 integer Double
基本类型 int double
Double d=new Double(); × ----------Double d=new Double(1);√
Integer i=Integer.valueOf(23);//i赋值为23
Integer j=Integer.parseInt("23",8);将23转为8进制
如何创建interger 对象:
Integer i=new Integer(23);
Integer i=new Integer(“23”);
调用构造函数 利用Integer的valueOf()方法
如何获取Integer类型对象的数值:i.intValue()
java常见的标识符:public static protect default final abstract interface volatile
关键字:goto const import package byte char boolean short long double int void null
true false if else while for switch case default do break continue return
instanceof
重载:函数名相同参数不同
重写:函数名参数相同,必须发生在子类和父类中
P203 6.3 6.4
P328 程序清单10-8栈
P360 super关键字的使用方法
P363方法重写 P364 方法重载 P366 多态
P370关键字instanceof P373 11.9.3
P383表11-2
P441 接口
学习通作业
封装,继承,多态,抽象的含义,三者区别
抽象类与接口的区别
重写与重载区别
重写在继承下使用,要重写一个方法,需要在子类中使用和父类一样的签名来对该方法进行定义。
重载意味着使用同样的名字但是不同的签名来定义多个方法。
重写意味着在子类中提供一个对方法的新的实现。
方法重写发生在具有继承关系的不同类中;
方法重载可以发生在同一个类中,也可以发生在具有继承关系的不同类中。
方法重写具有同样的签名;
方法重载具有同样的名字但是不同的参数列表。
instanceof 运算符 用于:判断 该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false,
几何图形(Geometric)类,圆(Circle)类,矩形(Rectangle)类这个案例的代码。
抽象类(abstract class)和接口(interface)有什么异同?
相同点:
1.抽象类和接口都不能被实例化,但可以定义抽象类和接口类型的引用。
2.一个类如果继承了抽象类和接口,必须要对其中的抽象方法全部实现。(接口中方法默认的是public abstract修饰的)否则该类仍然需要被声明为抽象类。
不同点:
1、抽象类可以有构造方法,抽象方法和具体方法。
接口不能有构造方法,而且其中的方法全部都是抽象方法。(接口中方法默认的是public abstract修饰的)
2、抽象类中的成员可以使private、默认、protected、public的。
接口中的成员全部都是public的。
3、抽象类可以定义成员变量。
接口中定义的成员变量其实都是常量。(接口中的成员变量默认是public static final 修饰的 )
2.字符串类型如何与字节数组、字符数组的互相转换?
答:
使用字符串类型的getBytes()方法可到的字节数组、用toCharry()方法可得到字符数组。
使用字符串类型的构造方法即可将字节数组、字符数组转换成字符串类型。
3.字符串类型如何与基本数据类型互相转换?
答:
字符串类型转换为基本数据类型:调用基本数据类型对应的封装类的parseXxx()方法
基本数据类型转化为字符串类型:调用String类的valueOf()方法
4.什么是基本数据类型的封装类?自动装箱、自动坼箱的概念及举例说明。
答:就是按照面向对象的做法,将基本数据类型封装成对象。
如int的封装类是Integer
自动装箱:将基本数据类型的变量赋给对应的包装类变量
自动拆箱:将包装类对象类型直接赋给一个对应的基本数据类型变量
如 Integer num = 12;
int count = num + 1; 这里的count=13
类
1.什么是抽象类?什么是接口?试说明它们的区别和联系,使用接口有什么好处?
答:
由abstract修饰的类叫做抽象类。
接口相当于抽象类,但实质上是类类型。
接口中定义的方法都是抽象方法,定义的属性都是常量
在方法前默认加public abstract
在属性前默认加public static final
好处:接口和类不同,不具有单继承性,可以继承多个接口
2.一个类允许实现多个接口吗?允许继承多个类吗?
答:
允许实现多个接口,不允许继承多个类
4.什么是方法的重载?什么是方法的重写?可举例说明。
答:
在一个程序中定义多个名称相同,但参数的类型或个数不同的方法这就是方法的重载。
在继承关系中,子类会自动继承父类中公共的方法,但有时在子类中需要对继承的方法进行一些修改,对父类的方法进行重写,要求有相同的方法名、参数列表、返回值类型。
5.试说明“==”与equals(Object类)方法之间的关系? 子类重写equals方法在编程中有何意义?可举例说明。
答:
==比较的是地址
equals比较的是两个对象的内容
重写equals()是为了实现自己的区分逻辑。
例如:“abc”.equals(“abc”)返回true是我们要的结果,符合我们区分逻辑。而不是像Object的equals方法那样“this == obj”引用相等才相同。所以String需要重写Object的equals方法。
6.JAVA中对于字符串数据进行处理有哪些类?各有什么特点?它们有什么联系?可举例说明。
有三种类:
String、StirngBuffer、StringBuilder
String:String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer:可变字符序列、线程安全
StringBuilder:可变字符序列、线程不安全
*简述什么是方法重写
在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
*简述抽象类和接口的区别
在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量、抽象方法、静态方法和默认方法。
由于接口的特殊性,在定义时需要使用interface关键字。
*如何创建Integer类型对象
(调用构造函数可以利用Integer的valueOf方法)
*如何获取Integer类型对象的数值
intValue() int 以 int 类型返回该 Integer 的值
*怎么将一个字符串 转化int
Integer.parstInt
*Integer 类的构造方法
Integer 类中的构造方法有以下两个:
Integer(int value):构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s):构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。