Java学习心得
1. 在面向对象部分的代码至少要写五遍,而且不准出任何的错误。
2. javaSE的应用部分:java的面向对象、java类集、java IO、JDBC会完整编写 3. 使用public class声明时,类名必须与文件名完全一致;但是用class声明时,类名与文
件名可以不一致,但是执行(java 类名)的时候必须一致。
4. 在一个*.Java的文件中,只能有一个public class 的声明,但是允许有多个class的声明。 5. 数据的溢出:任何一种数据都有其最大的取值:如果已经是最大的值,则加1会变成最
小值,如果是最小减1会变成最大值。
6. 一个常量在java中默认是int型;一个小数在java中默认的类型是double。 7. 数据类型的转换,如果遇到的是字符串,则所有的类型都向字符串转换。 8. 数组的声明:?声明时直接开辟内存空间:数据类型 数组名称[]=new 数据类型[长度];
数据类型[] 数组名称=new数据类型[长度]
?分步声明: 声明数组: 数据类型 数组名称[]=null;
实例化数组: 数组名称=new数组类型[长度] 9.数组开辟的内容都使用默认值
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示,如果想要为数组的元素赋值,则需要通过下标的方式进行访问。
10.栈内存只是给数组起了个名字,堆内存才真正的存放数组的内容。
11.二维数组 动态初始化:数组类型 数组名称 [][]=new 数组类型[长度][长度]
静态初始化:数组类型 数组名称[][]={{1,2,3},{1,5}„„} 12.方法就是一段可重复调用的代码段,但是现在的方法是使用主方法直接调用的,所以定义格式为: public static 返回类型 | void 方法名称(参数列表){
return 返回内容;
}
13.方法的重载就是方法的名称一样,但是方法中的参数类型和个数不一样。 实际上,System.out.println()可以接受任意类型的参数,所以此方法也属于方法的重载。 14.在方法的操作存在一种称为递归调用的形式,所谓的递归调用就是指自己调用自己。 15.一个方法可以接收一个数组或者返回一个数组,但是在接收数组的时候,一定要注意,数组是引用数据类型,所以方法中对数组所作的一切修改,最终都会被保留下来。 16.不管是接收数组还是返回数组,实际上是最终都是要以数组的形式接收和返回。 17.在java中提供了很多与数组操作有关的方法,例如排序
Java.util.Arrays.sort(数组名称);//进行排序的操作 18.从原数组中拷贝到目标数组的部分内容:
System.arraycopy(原数组名称,下标,目标数组,拷贝程度)
19.foreach输出数组
语法格式:for(数据类型 变量:数组名称)
20.在正常情况下,一个方法在调用是必须明确的指定传入的参数,而且参数的个数必须统一,但是在jdk1.5以后,在声明方法的参数时,加入了可变参数。
Public static 返回值类型 数组名称(数组类型 … 参数名称)
这样一来,在传入参数的时候就可以传递任意多个了,而且全部的参数都是以数组的形式接收的。
21.封装性:对外部不可见,保护类中的操作不被外部直接访问。
继承性
多态性:方法的重载、对象的多态性
22.在堆内存中实际上存放的是对象的各个属性,因为对象中只能依靠属性的不同来区分。
23.全部的方法保存在全局代码区之中。
24.一个栈内存只能引用一个堆内存空间,但是一个堆内存可以被多个栈内存所同时拥有。
25.在java中封装性有很多的体现,但是最简单的体现就是加入“private”关键字 封装属性:private 数据类型 属性名称 =默认值
封装方法:private 返回值类型 | void 方法名称(参数列表)
26.一个重要的概念那就是:只要是属性就必须封装,被封装的属性通过setter及getter方法设置和取得,例如name属性:setter:setName(); getter:getName(); 27.在访问类中其他方法时,为了保证此方法是本类中定义的,可以在方法前加上this关键字。 this.方法() 即为调用本类方法。
28.在类中也可以使用private关键字声明一个方法,但此方法只能在类的内部进行访问,外部是无法调用的。
29.在每个类中都存在着一个构造方法,构造方法的主要目的是为类中的属性初始化。 Person per =new Person();
实际上此“()”就表示调用的是一个方法,那么这个方法实际上就是构造方法。 构造方法的定义要求如下:构造方法的名称必须与类名称一致。
构造方法定义时没有返回值类型的声明
不能在构造方法中使用return返回一个内容 如果在一个类中没有明确声明一个构造方法的话,则会自动生成一个无参的什么都不做的构造方法。
30.当使用关键字new的时候才会调用类中的构造方法。
构造方法本身是可以进行重载的,重载的原则与普通方法一致。
31(构造方法一点是在使用关键字new的时候才进行调用的,而且一个类中允许至少存在一个构造方法。
32、匿名对象是只使用一次的对象。使用一次之后将被垃圾收集。
33.类的开发步骤:题目(7)
?根据需求定义出所要的类
?根据题目的要求划出类的属性
?所有的属性必须封装:private
?所有的属性必须通过getter或setter访问
?如果需要构造方法的话,为属性赋值
?所有的信息不要在类中直接输出,而是交给调用处输出
在类中不能出现System.out.println()语句
34.面向对象的三大特点:封装性、继承性、多态性。
35.String本身就是一个类,在String类中定义了如下的构造方法:
Public String(String original){} 可以接收一个String类的对象,并重新实例化String对象,除了此方法之外,String还可以直接采用赋值的方法进行对象的实例化。
? String str1=new String(“Hello”);
? String str2=“World”;
36.实际上,对于“==”比较的是两个对象的地址是否相等。
比较两个字符串的内容,需要使用String类中的equals()方法完成比较,此方法定义如下: public boolean equals(String str)
37(一个字符串实际上就是String的匿名对象。
一个字符串的内容使用“”括起来,那么一个字符串的常量实际上本身就是属于String的一个匿名对象。
38.可以发现,上面的程序开辟了两个内存空间,与直接赋值相比,肯定使用直接赋值的方
式方便,所以在开发中,绝对不能使用关键字new调用String类的String(String org)的构造方法。
40.字符串(String)的内容一旦声明就不可在改变。
实际上来讲,字符串变量的改变只是改变了内存空间的地址指向,而本身的字符串内容,没有任何的变化。
41.在开发中,以下的开发代码绝对是要避免的:
以上操作代码要不断的断开已有的连接,只向新连接100次,整体代码的性能极差,所以遇到此类代码绝对不要使用。
42.
43.this在java中表示以下概念:
* 调用类中的属性:this.属性名称
* 调用类中的方法:this.方法名称()
* 调用类中的构造方法:this()
* 表示当前对象:this
44.通过this关键字调用本类中的其他构造方法,调用形式为:this();的形式。 45.所有的构造方法应该是在对象操作之前最早调用的,所以使用this调用构造方法的时候this语句放在构造方法的首行。
46.在使用this调用构造方法的时候至少有一个构造方法是没有使用this()调用的,而此构造方法将作为调用的出口,一般这个出口都会使用无参构造完成的。
47.this有一个重要的概念就是表示当前的对象,当前正在调用类中方法的对象,称为当前对象。
48.一个对象在类的外部不能直接访问类中的私有成员。
* 如果现在一个对象在类的内部呢,那么他就能够访问私有成员。
49.如果要将一个属性设置成公共属性,则就需要使用static关键字声明。 50.
51.一般情况下,对于使用static声明的属性都使用类名称直接调用,形式如下: * 类名称.static 属性;
52.static除了可以声明属性之外,还可以定义方法,使用static定义的方法可以由类名称直接调用。
53(static的方法只能调用static的属性或方法,不能调用非static的属性或方法。 * 因为静态的属性和方法可以在没有实例化对象的时候调用。
* 而普通的方法和属性,肯定只有在对象实例化之后才有可能调用。 54.主方法上也存在static关键字,那么主方法的含义是什么,
* public : 表示最大的权限,所有人都可以访问。
* static :因为执行的时候执行的就是类名称,所以表示可以由类名称直接调用。 * void :因为主方法是一切的起点,所以表示没有返回值。
* main : 系统内建的方法名称。
* String args[]:表示字符串数组,用于接收参数。
55.
56.程序的内存划分为:
* 栈内存:对象名称,实际上是对象对堆的引用地址
* 堆内存:属性值
* 全局代码区:保存所有的操作方法
* 全局数据区:保存所有的static属性
57.程序的开发思路:(题目11)
* 完善基本功能
* 改善功能,加入一些验证
* 形成更好的结构,加入一些类的设计
* 主方法中不能编写过多的代码
58.对象数组:就是包含了一组对象,但是对象数组使用时需要注意以下几点: * 声明对象数组格式: 类名称 对象数组名称[]=new 类名称[长度]; *但是这样开辟之后,数组中的每个内容都是null值,需要进行单独实例化操作。 59.
60.
61.static的一些相关应用:
1(使用static可以统计一个类产生了多少个实例化对象。
*因为static的属性是所有对象共享的
2.在开发中还可以使用static进行自动的命名操作。
62.内部类:在一个类的内部还有另外的一个类
* 从代码中看,内部类的缺点就是程序的结构看起来很混乱。
* 内部类唯一的优点就是:在于方便的访问外部类中的私有成员。
如果要在外部直接使用内部类的实例化对象:
, 外部类.内部类 内部类对象=外部类对象.new 内部类(); 63.一个内部类如果使用static关键字声明的话,则此内部类就将成为外部类,可以直接通过外部类.内部类的形式访问。形式如下:
, 外部类.内部类 内部类对象=new 外部类.内部类();
64.内部类可以在任意的地方使用,例如:在方法中声明。(重点)
* 在方法中定义的内部类,可以直接访问外部中的各个成员,但是要访问方法中的参数,则在参数上要使用final关键字。
65.递归调用:就是自己调用自己。
66.继承的限制:
*在java中不允许多重继承,一个子类只能继承一个父类
*在java允许多层继承(A继承B,B继承c)
*在继承中不能直接访问父类的私有操作。
67.方法的覆写:子类定义了与父类同名的方法。
* 发生在继承的关系之中
* 在方法覆写的时候一定要注意访问权限的问题,从父类到子类被覆写的方法访问权限只能更宽松而不能更严格。
*访问权限的严格度从大到小:private、default(默认的)、public 68.只要是使用子类实例化对象,调用的方法也被子类覆写过,则永远调用的是覆写过的方法。
69.如果希望调用父类中被子类覆写过的方法,则只能通过super.方法()的形式调用。
70.final关键字
* 声明类:声明的类不能有子类
* 声明方法:声明的方法不能被子类所覆写
* 声明属性:声明的属性就成为常量,常量是不可以修改的
在java 中如果使用final声明一个常量的话,则常量的标识符必须全部大写。 在final 中也存在一个很重要的概念,全局常量:使用public static final 声明的常量称为全局常量。
71.抽象类(重点)
* 抽象类:包含一个抽象的方法的类称为抽象类。抽象的方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,所有的抽象类也需要使用abstract关键字声明。
* 对于抽象类来讲,不能直接进行实例化的操作,但是可以声明对象,如果要想使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现(也就是覆写抽象方法)抽象类中的全部抽象方法。
? 抽象类能否使用final声明呢,
, 抽象类必须被子类继承
, 被final声明的类不能有子类 所以抽象类不能使用final声明 ? 抽象类中允许有构造方法,但是此构造方法是不能直接被调用的,子类对象的实例化过
程中,永远是先调用父类中的构造方法。
? 实际上来讲,抽象类就是比普通方法多了一个抽象的方法
而已。
72.接口(重点)
* 接口是一个抽象的类,在java中接口是由抽象方法和全局常量组成的。 * 在java中使用interface 定义一个接口。
接口与抽象类一样,需要子类,那么子类此时不在称为继承类,而是实现接口,通过implements关键字实现。
, 一个类只能继承一个父类,但是一个类可以同时实现多个接口。
, 如果一个类既要实现接口又要继承抽象类的话,则必须按照以下的形式完成:
class 子类 extends 抽象类 implements 接口 A,接口 B„„{}
* 一个抽象类可以实现多个接口,但是一个接口不能继承一个抽象类
* 一个接口虽然不可以继承一个抽象类,但是一个接口可以同时继承多个接口。
接口实际上是作为一个
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
存在的。
73.对象的多态性:
因为多态性的存在,才可以让程序变得更加灵活。
, 方法的重载和方法的覆写实际上就属于多态的一种体现
, 真正的多态性还包含了一种称为对象多态性的概念。
? 对象多态性主要指的是:子类和父类对象的相互转换关系
* 向上转型:父类 父类对象=子类实例 -----自动完成 例如 A a= new B();
* 向下转型: 子类 子类对象=(子类)父类实例 -----强制完成 例如:B b=(B)a;
此异常是最容易出现的的异常,编译时不会出错,但是在解释执行时会出现以上错误,
表示类转换异常,造成的根本原因是两个没有关系的类进行相互转换
的操作。
74.抽象的应用
从对象多态性的概念上来看,子类为父类实例化是一个比较容易的操作,因为可以发
生自动向上转型的关系,那么调用的方法永远是被子类覆写过的方法。
那么此时可以利用此概念通过对象多态性为抽象类实例化。
抽象类最大的用处就在于模版的设计。
75.接口与抽象类的区别:
比较点 抽象类 接口 No
组成 抽象方法、普通方法、常量、变量、构造方法、抽象方法、全局常量 1
全局常量
定义 2 abstract Interface 子类 子类通过extends继承抽象类 子类通过implements实现接口 3
限制 一个子类只能继承一个抽象类 一个子类可以同时实现多个接口 4
关系 一个抽象类可以实现多个接口 一个接口中可以包含多个抽象类 5
一个抽象类中可以包含多个接口 一个接口中可以包含多个抽象类
设计模式 模板设计 工厂设计、代理设计 6
两个一起操作可以完成适配器设计 实例化 都是通过对象的多态性,通过子类进行对象的实例化操作 7
实现限制 存在单继承局限 不存在此类局限 8
特性 表示一个标准、一种能力 9
以上
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
中可以发现,如果抽象类和接口同时都可以使用的话,优先使用接口,因为接口可以避免单继承的局限。 75.jdk的配置(环境变量的配置)
?java_home
Jdk 路径
? Path
%java_home%\bin;
? Classpath
%java_home%\lib\dt.jar;
? 生成.class 文件是为了跨越平台
? JDk包含jvm和JDk开发工具
? Jre(java rountine environement):java的运行环境,包括
Jvm、java平台核心类。
? Jdk(java development kit):java开发工具包
? Jvm(java virtual machine):java虚拟机:用于执行java
程序
? 对一维数组的输出(比如s是其中的对象,fun是需要调用
的方法)
for(int x=0;x
、<))。
16.在需要假设的情况下,需要使用if…else
If()括号里放的是布尔表达式
17.switch语句
注意点:?switch()括号中的值只能是short、byte、int类型 ? 在每个case之后,都要写上break,当有一个符合条件之后,会一直往下执行
?在每个case之后必须是常量。
18.ArrayList(集合)—>存储大量的数据。它是系统的一个类。 19.for循环:?它是用来多次循环做同一件事
?循环的次数(i< 固定 )是固定的
20.类也是数据类型
A a=new A();
a的数据类型就是A。
21while
? 它是用来无数次的做同一件事
? 当次数不固定时,通常选while
Iterator:迭代器(类)。取出存储的值
Iterator it=l.iterator(); 1.属性的类(值对象(Value Object VO))作用就是存值,为了给方法传值。
2.如果存在继承关系的话,在声明对象时,可以用父类来声明也可以用子类来声明,但是只能使用父类的方法(用父类声明的对象) 3.父类的范围比子类的大,(相当于int,double)自动转换 4.多态:一种形态,多种表现形式。(重载、覆写、在继承中) 5属性名称(变量名称)无需加双引号,否则就需加双引号。 6(在不同的包中进行方法的调用,就需要将那方法的包导入到此包中
7.调用本类(普通方法)中的方法,只需写上方法名称在那需呀调用的方法中。
8.从控制台输出信息
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in)); 9.将内容写到文件中(硬盘)
FileWriter fw=new FileWriter(“”,true); fw.write();
fr.close();
10. 将文件中的内容读到控制台
BufferdeReader br=new BufferedReader(new
InputStreamReader(new FileInputStream(“”)));以上三个(8,9,10)都需要加在异常中,
try{
}
catch(Exception e){
e.printStacktTrace(); }
1.静态块:(为属性初始化)
static{
}
2.给对象赋值必须通过实例化类
3.给对象属性赋值通过方法。
4.String、StringBuffer、StringBuilder都是字符串 String不可以改变字符串,而StringBuffer可以改变字符串的内容,StringBuffer类有insert()方法和append()方法。 StringBuffer类 线程安全。StringBuffer效率不好。 StringBuilder类 线程不安全,但效率高。也有insert()方法和append()方法。
1. 异常(Exception)
try{} //是用来检测异常的
catch(Exception e){e.printStaceTrace} //是用来捕获异常的
两种情况?是在自己意识到程序将会出现错误时,加上try。。。catch
(2).是系统强加需要加上异常(try。。。catch
)
Finallly用法:保证资源的释放。例如: public class FinallyTest {
FileWriter fw;
public void fun(){
try{
fw=new FileWriter("f/zhao/zhao.txt");
fw.write("aaaaaaaaaaaaa");
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
fw.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
1.类的对象比较时,equals()方法比较的是地址,”==”也比较的是地址 而字符串类里的equals()方法比较的是值。
2. Object类:它是所有类的父类,此类有以下几个重要的方法
? Clone();//创建并返回此对象的一个副本,需要实现Cloneable此接口,做快照
? toString();//返回此对象的字符串(就是他的地址)
? equals();//比较的是地址
? finalize();//当对象被销毁时,由垃圾回收器来调用
3. Math类:
4. .System:
System.arraycopy()
int a[]={1,2,3,4},b[];
b=new int[3];
System.arraycopy(a, 1, b, 0, 3);//a为需要被拷贝的数组,1表示从第个开始,b
为目的数组,0表示从b的第几个开始考贝,3表示考几个元素
for(int i=0;i
Map中的key值是不能重复的,一旦重复,就会被覆盖。 Map的最大特点是用于查找操作,如果查找到了则返回内容,否则
返回null。
hashMap也属于是无序的操作。
treeMap:按key排序的子类。
Map不能直接使用iterator接口直接输出。 使用非系统类作为key。
用于Map的输出:Map.entry:Map实体
Map接口使用Iterator输出的标准操作:
1. 通过Map接口中的:Set> entrySet()方法取得Set集合
2. 通过Set接口为Iterator进行初始化操作
3. 通过Iterator取出每一个Map Entry
4. 通过Map Entry进行key 与value的分离
Statck:(了解)
Statck是在java中实现栈的一种操作。
栈的特点:先进后出,所有的内容从栈顶取出,之后每次新增的内容都保存在栈顶之中。 入栈:
出栈:
属性操作(重点)
在java中专门提供了一个属性文件的操作类:Properties public class Properties extends Hashtable