Java读书笔记

Java读书笔记
Java读书笔记

Java读书笔记之CoreJava

第一章:Java语言基础

1、JAVA的特性

Simple简单(去掉了C++中许多奇怪的语法)

Object-Oriented面向对象(OOP)

Network-Savvy网络通信(支持HTTP,FTP,TCP/IP等多种网络协议)

Robust健壮性(健壮性主要体现在Java在编译是就能发现某些存在的问题,且优化了C 和C++中的指针,不会造成内存泄露。)

Secure安全性

Architecture Neutral体系结构中立

Portable可移植性(Java固定了数据类型的大小)

Interpreted解释型语言(存在争议,可能介于编译和解释之间)

High Performance高性能

Multithreaded多线程

Dynamic动态性

Java和C++的区别:Java去掉了C++中的头文件,指针运算,结构体,联合体以及运算符重载等语法,且Java以接口替代了C++中的多重继承。

JIT(Just In Time)virtual machines have the option of translating the most frequently executed bytecodes sequences into machine code, a process called just-in-time compilation。

2、JAVA运行的环境

(1)、环境变量配置

在Windows下(XP):

--下载Windows版本的JDK,双击进行安装,建议安装目录C:\java\jdk1.6.0_06 --设置环境变量:

JAVA_HOME c:\java\jdk1.6.0_06(java安装目录)

PATH 添加到原有路径的最前方,%JAVA_HOME%\bin(不要删除原来的)

CLASSPATH .;%JAVA_HOME%\lib

在Linux下:

--下载一个Linux Platform的JDK,建议下载RPM自解压格式的(RPM in self- extracting file,jdk1.6.0_06-linux-i586-rpm.bin);

--在shell下执行命令:

chmod 755 jdk1.6.0_06-linux-i586-rpm.bin

./jdk1.6.0_06-linux-i586-rpm.bin

--设置环境变量:

在Linux系统的用户主目录下新建终端vi .bash_profile在其中添加如下参数:JAVA_HOME = /opt/jdk1.6.0_06

PATH = $JAVA_HOME/bin:.

CLASSPATH = .

export PATH

export CLASSPATH

上述配置完成后在命令提示行(Windows)或终端(Liunx)运行java –version如果可以查看JDK的版本信息,则证明配置环境变量成功。

(2)、编译、执行JAVA文件

javac filename.java编译程序

java filename执行程序

注意:当使用java –classpath 执行程序的时候,这个classpath的优先级高于系统设置的classpath。

3、JAVA中的基础知识点

(1)、JAVA语言大小写敏感(case sensitive)

(2)、JAVA合法标识符的原则:字母、下划线、美元符为首字母,后面可以是任意长度的字母、数字、下划线和美元符的字符序列(但不能是JAVA的保留字)(3)、JAVA语言的一般命名原则:(见文知意)

★对于类、接口:每个单词的首字母大写,一般不使用缩写。(名词)

★对于变量:首个单词小写,其后的每一个单词的首字母大写。(名词)

★对于方法:首个单词小写,其后的每一个单词的首字母大写。(动词)

★对于常量:全部大写。使用_进行连接(名词)

★对于包:全部小写,一般为公司组织域名的逆序。(名词)

(4)、JAVA的文件名必须和文件内的公有类名相同(一个源文件只能有一个public类)。

注意:当文件中不存在公有类的时候:则源文件可以随意命名,只要符合JAVA语言的标识符规范即可。

(5)、JAVA的注释:

// 单行注释,可用于源文件的任何位置。

/*……*/ 多行注释,可用于源文件的任何位置。

/**……*/ JAVA注释,使用javadoc命令可以生成HTML注释,可用于源文件的任何位置。

方法注释的参数有@param、@return、@throws

文档注释一般参数有@author、@version、@since、@deprecated

@see

将文档生成在指定目录javadoc -d docDirectory packageName

如果要生成的文档在多个包中javadoc -d docDirectory *.java (6)、一个JAVA源文件可以不包含任何代码定义,即使它是一个空文件,编译也不会产生异常。(这里的空指的是类体内不包含任何代码)

(7)、关于main方法,完整定义为public static void main(String[]args) public不是必须的,但是如果没有public修饰的话,编译不会出错,但是

该程序因为JVM找不到执行入口而无法被执行。

static是必须的,它可以在不构造实例的情况下调用main方法。

返回值必须是void,不能定义为其他,定义为其他尽管不会产生编译错误,

但是无法运行。

args是一个字符串类型的数组,用于接收命令行参数。(可以不叫args)

args数组即使不接收任何参数,也会创建一个长度为0的数组。

Main方法的另一种形式public static void main(String...args);(8)、这个例子值得注意,假设有两个类Employee和EmployeeTest,后者负责测试前者,如果两个类在两个文件中,javac Employee*.java可以同时编译两

个文件,但是如果是javac EmployeeTest.java呢?答案是也可以编译通

过,这里要说明的是,当JVM在编译EmployeeTest时,发现其中有Employee

类,于是就去找Employee.class,如果找不到,JVM则会找Employee.java

这个文件,找到后对其进行编译,然后再编译EmployeeTest。特别说明的是,

如果找到的Employee.java时间戳早于Employee.class,那么JVM会重

新编译Employee.java。

(9)JAVA语言的程序结构

★包语句(package):公司域名逆序。(除了注释的第一行)

编译时:javac com/suki/PayrollApp.java

运行时:java com.suki.PayrollApp

★导入语句(import)(包语句之后,类声明之前)

注意:import java.util.*;

import java.sql.*;

当使用Date date = new Date(long time);时编译会出错。

解决方法import java.util.Date;

如果同时想要使用这两个包中的Date类怎么办呢?

java.util.Date today = new java.util.Date(...);

java.sql.Date today = new java.sql.Date(...);

静态导入:静态导入实现无需在使用其他类的静态成员时前缀的类名,使代码更为简洁,import static

如:import static https://www.360docs.net/doc/e29143092.html,ng.Math;(针对静态方法)

import static https://www.360docs.net/doc/e29143092.html,ng.Math.*(针对静态属性)

Import static https://www.360docs.net/doc/e29143092.html,ng.Math.PI; (针对静态属性)

这样在类中就能直接应用PI这个属性了。

不推荐使用静态导入,引起代码费解。(Math类比较适合使用静态导入)★类声明语句(class declaration)

(10)、classpath问题

Classpath包含三方面的内容:

根目录(base directory);

当前目录(.)

需要使用到的class的path(一般为jar)

在Windows系统以;为分隔符,unix系统以:为分隔符。

JAVASE6可以使用*来将jar文件放入classpath中。

4、JAVA中的的数据类型

(1)、JAVA数据类型分为基本类型(primitive)和引用类型(reference)

其中基本类型包括:

★整型byte(1字节)、short(2字节)、int(4字节)、long(8字节)

★布尔型boolean(1个字节)

★浮点型float(4个字节)、double(8个字节)

★字符型char(2个字节)一个char可保存一个汉字。

注意:

★整型数据默认为 int 类型,如果使用long类型,则必须加后缀l或L,建议用L。

★浮点型数据默认为double类型,如果使用float类型,则必须加后缀f或F。当然也可以在double类型后添加后缀D或d。

★整型数据可以有三种,十进制,八进制(0为前缀),十六进制(0x为前缀)。

★整型数据、浮点型数据除零的问题(见后的除法运算)

★浮点型数据运算不精确的问题(如2.0-1.1不等于0.9)见后的BigDecimal类。

★特殊字符 \b退格 \n换行 \t制表符 \r回车 \\反斜杠等。

★boolean类型的取值只有true和false。

★在赋值语句中,默认类型为整型的无小数点整型文字值作为右操作数时,可以将其赋值给取值范围比整型小的变量,如byte,前提是文字值对应的实际型数值在变量类型的取值范围内。而默认的double型的数据文字值不能赋给float类型。

(2)strictfp关键字

对于浮点型数据参与的运算,有可能由于处理器的不同而造成的结果的不同,比如Intel的处理器在处理浮点型数据的时候会把其转为80位浮点,而有些处理器则会按照64位浮点来运算,解决方法:strictfp关键字。

strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以至于得到的结果往往无法令人满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果想让浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。

可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字。

一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。

在JDK5中,有一个https://www.360docs.net/doc/e29143092.html,ng.StrictMath类来代替https://www.360docs.net/doc/e29143092.html,ng.Math类,就是因为Math的浮点运算会产生精确性问题。

(3)、JAVA中的变量初始化

★对于成员变量来说,系统会有默认的初始化:

byte 0、short 0、int 0、long 0L、

float 0.0f、double 0.0d、char \u0000

boolean false

★对于局部变量(定义在方法中的变量)则必须显式初始化,否则编译会出错;且局部变量只能在该方法体内使用,不能跨方法访问。可在不同的方法中声明同名的局部变量。★对于数组元素,不论是基本类型的数组还是引用类型的数组,其都会默认初始化(同上)(4)、JAVA中基本数据类型的转换:

自动转换:是系统根据转换规则自动完成的,在编译期完成,基本类型的自动转换在赋值、方法调用和算术运算3中情况下都会发生。

规则如下:

双操作数

★如果两个操作数中有一个是double类型的,则系统先将另一个操作数的数

值转换为double型的,然后再运算,否则

★如果两个操作数中有一个是float类型的,则系统先将另一个操作数的数值

转换为float型的,然后再运算,否则

★如果两个操作数中有一个是long类型的,则系统先将另一个操作数的数值转

换为long型的,然后再运算,否则

★两个操作数都将被转为int类型进行运算。(低于int的类型会自动提升)

★如果采用+=、*=等缩略形式的运算符,则系统会强制将运算结果转换成目标

变量类型。

单操作数

★++、--运算对于byte、short、char类型来说不会提升数据类型到int,且运算结果类型也不变。

★取正(+)、取负(-)、取反(~)时,如果是byte、short、char类型,则会先被提升为int类型,再参与算术运算。

★如果操作数为long或int型,无论何种单目操作都不会发生类型转换,且运算结果类型不变。

实箭头表示转换不会丢失精度,虚箭头表示转换会丢失精度

基本类型的造型(强制类型转换)

基本类型的造型是指程序员明确地声明,需要把取值范围宽的类型转换为取值范围窄的类型,如果没有明确使用 (类型) 造型声明,则会出现编译错误。强制类型转换(造型)发生在运行期。

注意:布尔类型数据和其他类型数据无法互相造型。

如果想转换的话可以采用条件表达式(boolean b)?1:0。

造型的结果可能引起精度的丢失。

此外还要注意超过数据类型范围的造型造成的是结果的改变。

如byte b = (byte)300;其最终的值是44。

5、JAVA中的运算

单目运算:++、--、取正+、取负-、按位取反~、逻辑取反!、造型()

其中++运算要注意:++在前,先加再赋值;++在后,先赋值再加。(--类似)

取负(-)对象最好用括号括起来。

算术运算:+加法、-减法、*乘法、/除法、%取模

★加法/减法:

当基本类型数据做运算时,如果+或-两边是byte、short、char时,会自动转换为int类型,其他情况取决于两个操作数中取值范围较宽的类型。

注意:在JAVA中 byte b += 10是可以通过编译的,但是byte b = 10 + 10是不能通过编译的,要改为byte b = (byte)(10 + 10);

当加减运算产生的结果发生数据溢出时,不会抛出ArithmeticException.只是会出现精度丢失现象。

+号的另一个功用:当加号两边至少有一个操作数为字符串时,+号起的是连接作用。

例如:1+ ”a” + 2的结果是1a2;1+2+”a”的结果是3a;”a”+1+2的结果则是a12; ★乘法:

当*号两边的数据类型为char、byte、short时,其均会自动转为int类型,除此以外运算的结果取决于两个操作数中取值范围较宽的类型。

当乘法运算产生的结果发生数据溢出时,不会抛出ArithmeticException.只是会出现精度丢失现象。

★除法:

当/号两边的数据类型均为整型时,结果为整型(不管能否除尽)。如:7/2结果为3。

当/号两边的数据有一个是浮点类型时,结果为浮点类型。

如果左操作数为整型,当/号的右操作数为0时,则会抛出算术异常。

如果左操作数是浮点型,当/号的右操作数为0时,不会抛出算术异常

对于浮点型数据,即使/号的右操作数为0,也不会抛出算术异常。

其常见的结果有三种Infinity;-Infinity;NaN

其中NaN的情况有0.0/0、0.0/0.0、0/0.0

Infinity的情况为2.0/0

-Infinity的情况为-2.0/0

★取模:

取模运算的实质是用左操作数连续减去右操作数,直到相减的结果小于有操作数,此时的结果即为余数。

当取模运算中有负数作为操作数时,取模运算结果的符号取决于左操作数的符号。

如果左操作数为整型,当%号的右操作数为0时,则会抛出算术异常。

如果左操作数是浮点型,当%号的右操作数为0时,不会抛出算术异常

对于浮点型数据,即使%号的右操作数为0,也不会抛出算术异常。

例如:2.0%0、-2.0%0、0.0%0、0%0.0、0.0%0.0的结果均为NaN

移位运算:

JAVA中提供了三种移位运算:左移(<<) 右移(>>) 无符号右移(>>>)

移位运算的操作数只能是整型char、byte、short、int、long

左移<<:在低位补零,高位舍弃,其实质相当于 *2

右移>>: 如果值为正,则在高位补零,低位舍弃,如果值为负,则在高位补1,低位舍弃,相当于 /2

无符号右移>>>:不论正负与否高位均补零,低位舍弃。

移位运算要注意:对于移动位大于该数据类型位数的时候,先取模再移位。

例如:对一个int类型的数据左移33位相当于左移1位。

比较运算:

JAVA中的比较运算有<小于、>大于、<=小于等于、>=大于等于、==等于、!=不等于字符char类型可以和其他类型进行比较,因为每一个字符都对应一个标准字符码。

此外还有一个特殊的比较运算符instanceof,用于在运行期检测对象的所属的类型,左操作数为一个对象引用表达式,通常为一个引用变量或数组元素,可以取值

为null,返回为false,不会抛出任何异常。右操作数必须为一个类、接口、

数组,但不能是https://www.360docs.net/doc/e29143092.html,ng.Class或者代表类名称的字符串对象。

例如:下述代码均返回true

JButton[] buttons = new JButton[5];

System.out.println(buttons instanceof Object);

System.out.println(buttons instanceof Component[]);

System.out.println(buttons instanceof Object[]);

位运算:

JAVA中的位运算有按位与&、按位或|、按位异或^、按位非~

★按位与&:当两个操作数的对应位均为1时,结果为1,否则为0;

★按位或|:当两个操作数的对应为均为0时,结果为0,否则为1;

★按位异或^:当两个操作数的对应为相同时结果为0,不同时结果为1;

★按位非~:一元运算,输入为0,输出为1,输入为1,输出为0;

★除了按位非~之外其余的三种运算都可以使用布尔类型。这里有个奇怪的现象,就是使用布尔类型在进行其他三种运算时,布尔值true对应位的值为1,

false对应位的值为0,

当boolean按位与时,都是true结果才为true;

当boolean按位或时,都是false结果才为false;

当boolean按位非时,相同为false,不同为true;

注意:位运算的对象只能为整型数据(实际上只能是int或long,其余的自动类型转换了)。布尔类型和其他基本类型数据间不能进行位运算。

根据计算机中二进制正负数之间的关系,按位取反运算可以采用取负减一法,即~i = (-i)-1此种变换适于计算操作数很大的情况。

逻辑运算:

JAVA中提供了&、|、&&、||、!五种逻辑运算。

★&&运算符为短路运算,只要第一个值为false就不会去做后面的运算而直接将整个表达式的结果赋值为false。

★||运算为短路运算,只要第一个值为true就不会去做后面的运算而直接将整个表达式的结果赋值为true。

条件运算:

?表达式1:表达式2

如果boolean表达式结果为true,输出表达式1的内容,否则输出表达式2的内容,相当于一个简化版本的if…else语句。

赋值运算:

JAVA中的赋值运算有=、+=、-=、*=、/=、%=、^=等,只需注意一点:左操作数必须是个变量。

赋值运算的核心在于数据类型转换。

运算符优先级

6、JAVA中的流程控制

(1)、顺序结构:按照语句出现的先后顺序依次执行的程序结构。

(2)、分支结构:

★if……else结构,标准形式如下:

if(boolean_condition_expression){

Statement_block;

}else{

Statement_block;

}

if……else结构可以是最简单的if形式,

也可以是复杂的嵌套形式if……else if……else形式。

注意:在多个if存在的情况下,else和最近的一个if配对。(建议使用{})

★switch结构,标准形式如下:

switch(n){

case 0: statement;break;

case 1: statement;break;

……

Default:statement;

☆n为选择因子,如果和后面的某个case匹配成功,就执行其后的语句,直

到遇到break退出,如果一个case语句后没有break语句,那么意味着它

会继续按顺序执行之后的每一个case语句直到遇到break退出或所有的

case语句执行完毕为止。

☆JAVA中n的类型只能为byte、short、char、int和Enum类型。

☆case语句后与选择因子n匹配的数必须是常量。

☆default语句不是必须的,其也可以放在switch结构的任意位置,一般

放于尾部。按照JAVA的约定,如果switch语句中的选择因子n和所有的

case均不匹配时会执行default语句,要注意的是,如果default语句不

是放在整个结构的最后,那么执行完default语句后,后面的case语句还

是会被执行。

(3)、循环结构

JAVA中提供了三种循环结构:while、do…while、for

其中JDK5.0提供了增强的for循环,用于遍历数组和集合。

★while(boolean_condition_expression){

repeated_statements_block;

}

★do{

repeated_statements_block;

}while(boolean_condition_expression);此处的分号要小心

对于do…while循环来说,其至少会执行一次。

★for(init_statement;condition_expression;span_statement) { repeated_statements_block};

for循环执行时,首先执行init_statement,然后进行条件判断,条件为true

时执行repeated_statements_block,然后执行span_statement语句。

之后判断条件是否满足,满足的话继续执行repeated_statements_block

代码,然后再执行span_statement语句,如此循环下去,直到条件不满足停

止循环。

在init_statement部分可以同时初始化多个变量,其声明格式为:

DataType var1 = value1,var2 = value2……(严格遵守)注意:for(double x = 0; x != 10; x += 0.1)这样的循环是无限循环。

★foreach结构

for(declaration : expression)前面的声明是一个变量,其类型与

数组或集合内元素的类型兼容,表达式是将要遍历的数组或集合。

JAVA中使用break和continue来代替C/C++中goto的作用。

★break:单独使用break语句时,表示跳出当前循环,继续执行其他语句。

配合标签使用(标签的格式为Label:只能放于循环体之前)时,跳到

标签位置继续执行其他语句。

★continue:单独使用continue语句时,跳出外层循环起始处,从外层循环

开始循环。

配合标签使用时,表示调到标签之后,从标签处开始执行循环。

对于for循环来说,continue语句其实直接跳到了span_statement处。

(单一循环)

break和continue 的用法

7、数组

(1)、JAVA中的数组是一个具有相同类型元素的有序集合,数组中每个元素的类型相同,并且与数组声明的类型一致。

(2)、使用一个数组必须采取三个步骤:声明数组、创建数组、初始化数组。

(3)、声明数组的方式:Datatype[] arrayName或者Datatype arrayName[] 需要注意的是:声明数组的时候并没有给数组分配内存空间。

(4)、创建一个数组就是根据数组的大小为数组分配内存空间,JAVA中规定在构造数组的时候必须指定数组的长度,语法为new Datatype[size];

(5)、指定一个数组大小可以有两种方式:采用变量指定,采用明确的数字指定,由于数组长度直到运行期才被使用所以采用第一种方式优于第二种方式。但是要注意,采用变量指定数组大小之后,数组的length不能再改变。

(6)、JAVA中数组的长度只能是byte、short或int类型,不能为long和浮点型。(7)、数组的初始化方式有两种:

静态初始化,如int[] array = {1, 2, 3};(此种初始化必须将其元素全部初始化,不能出现这样的情况int array = {1,,3};否则编译会出错)。

动态初始化:如int[] array = new int[2];int[0]=1;int[1]=2; (8)、数组也可以默认初始化,初始化的值和成员变量初始化完全相同,而且不论数组是成员变量还是局部变量,数组均可默认初始化。

(9)、数组拥有属性length,length可以为0,数组的下标为[0,lenth-1]。(10)、虽然数组长度不能改变,但是可以改变数组的内容(改为同类型的)。

(11)、匿名数组(Anonymous Array):new int[] {17, 19, 23, 29, 31, 37 }; 第二章:面向对象编程(OOP)

1、面向对象基础

(1)、面向对象强调数据结构第一,算法第二,而面向过程强调算法第一,数据结构第二。(2)、封装(Encapsulation)就是对属性和方法的载体类的访问只能通过其提供的接口(方法)来访问,把实现细节隐藏起来。也就是说,具体实现对程序员来说是透明的。

★封装的好处在于对类内部的改变不会影响到其他代码。

★封装的实现:将成员变量定义为private,而访问这些变量的方法定义为public。

★封装是程序重用(reuse)和可靠 (reliability)的关键。

(3)、继承(Inheritance)

★当继承一个类的时候,不仅可以继承行为(方法),还可以继承数据(成员变量)。

私有的数据成员和方法不能被继承。

★JAVA中所有的类都是Object类的子类。

★虽然子类继承了父类的成员变量,但是对于父类私有的成员变量,子类并不能直接访问。

(4)、多态(polymorphism):指子类和父类具有同名的重写方法,并且允许父类引用指向子类对象,即允许把一个子类对象赋予一个父类的引用型变量。在运行期由系统自动判定应该调用子类的方法还是父类的方法。多态是运行期行为。

动态绑定:Automatically selecting the appropriate method at runtime is called dynamic binding

动态绑定的执行过程:

编译器首先会找到子类与父类中所有的和被调用方法的方法签名相同的方法。

注意,父类中只找public的。

编译器会自动进行重载方法判断(如果存在重载方法)。

JVM在运行时根据实际的对象类型调用其方法。

静态绑定:If the method is private, static, final, or a

constructor, then the compiler knows exactly which method to call. This is called static binding.

注意:多态性只存在于方法之上,如果父类对象的引用指向子类,调用方法时调用的是子类的重写方法,调用属性时调用的是父类的属性(指的是父类与子类存在

同名的属性时,不过这样的可能性不大,因为只有属性为public时才能测试通过)。

注意:当父类对象指向子类引用时,只能调用父类中已有的方法,不能调用子类中新添加的方法,虽然其实际类型是子类。

这里有个经典的例子:

假设有Employee类,其有子类Manager类。

Manager[] manangers = new Manager[2];

Employee[] employees = manangers;

Employees[1] = new Employee();

编译通过,运行时会抛ArrayStroeException。因为多态是运行期行为。

但这样是正确的:

Employee[] employees = new Employee[2];

Employees[0] = new Manager();

因为两个数组其实指向的都是同一个Manager数组,这个数组中存放的是

Manager对象。

(5)、对象(Objects):对象具有三个特征——行为、状态和特性。

注意:Date date = new Date();这里的date不是对象,而只是对象的引用。(6)、类(Classes)

★类之间的关系:

依赖关系Dependence (”us es–a”):如果一个类的某个方法使用了另一个类的对象,我们称前者依赖后者,那么这两个类之间存在依赖关系。如Person

类中有一个transport方法要求传入一个Car类的对象,即Person要

使用Car运输,那么Person类就依赖于Car类

聚集关系Aggregation (”has–a”) :指的是一个类中包含有另一个类的对象,如Book类里面包含有Date类。聚集是通过把一个类定义为另一个类的

属性来实现的。

继承关系Inheritance (”is–a”):指的两个类存在继承关系,如Student类和Person类之间就是继承关系。

(7)、内聚(cohesion)和耦合(coupling)

内聚和耦合是OOD的两个概念。具备良好质量的OOD应该达到高内聚、低耦合的要求。高耦合、低内聚会降低软件系统的稳定性、可扩展性、可复用性。

★内聚——一个类内部组成具有单一、明确目标的程度。高内聚是一种理想的状态,其中类成员支持单一、明确的角色或职责。

★耦合——一个类和另一个类联系的紧密程度。低耦合是一种理想的状态,通过设计良好封装的类,把类与类之间的相互吸引减至最低,一个类内部的改变不会波及到其他类的变动。

UML中关于类关系的描述

(8)、JavaBean组件

JavaBean组件是具有属性的JAVA类,其属性一般为private的。因为属性是私有的,因此从类外访问属性的唯一方法就是通过类提供的非私有方法。JavaBean

组件中更改属性值的方法成为setter方法,获取属性的方法成为getter方法。

命名原则:public void set+属性名首字母大写(参数)。

public (set方法参数的类型) get+属性名首字母大写()。

布尔类型,可设置为is+属性名首字母大写。

Public是必须的。

扩展:对于JAVA中Listener的命名规则:

对于添加Listener addXXXListener(XXX监听器);

对于删除Listener removeXXXListener(XXX监听器类型);

(9)、构造方法(Constructors)

★构造方法和类名相同。

★构造方法在一个类中可以有一个或多个(即使不写构造方法,系统会有默认的无参构造方法,但如果自定义了带有参数的构造方法,系统不会再创建无参构造器。)★构造方法可以包含0个或多个参数。

★构造方法没有返回类型。

★构造方法只有new关键字能调用。

★构造方法的修饰符只能由public和private修饰。

★构造方法不能被继承。

★构造器可以抛出异常,如果父类的默认无参构造器抛出了异常,那么子类的默认无参构造方法必须处理父类抛出的异常。

★对于子类的构造方法,如果没有调用子类的其他构造方法,那么其必须调用父类的构造方法,默认会调用父类的无参构造方法,如果父类没有无参构造方法,那么

子类必须显式调用父类的其他构造方法(super),否则编译出错。

★构造方法的执行过程为:构造器直接调用其父类构造器,其父类的构造器再调用它的父类的构造器,直到调用Object类的构造器为止。

★接口没有构造器,抽象类的构造器在其实现类实例化时被调用。

(10)、接口(interface)[抽象类见后的abstract关键字]

★接口是一个纯的抽象类。接口的语法为interface interfaceName{}。

★接口默认的声明为public abstract,因为其必须要由实现类实现。

★接口中包含的方法全部为public abstract修饰的方法,其均没有方法体。

★接口中定义的属性全部为public static final修饰的属性,其均为常量。

★接口实现通过implements关键字。实现类必须重写接口中所有的方法,否则只能将接口的实现类必须声明为抽象类。

★接口可以继承接口,通过extends关键字实现,且可以继承多个接口,逗号分开。

★接口中的方法不能被static、native、strictfp、final关键字修饰。

★接口不能继承其他的类。

注意:接口中的方法和常量可以有下面的声明方式(全部合法)

常量声明:(常量一旦声明不能重新赋值)

public static final int x = 1; public int x = 1; int x = 1; static int x = 1;

final int x = 1; public static int x = 1;

public final int x = 1; static final int x = 1;

方法声明:

void method();

public void method1();

abstract void method1();

public abstract void method1();

abstract public void method1();

(11)、引用类型的转换

★自动转换

引用类型的转换是由系统根据转换规则自动完成,不需要程序员显式声明不同类型数据之间的转换。转换在编译期完成。‘

引用类型自动转换在赋值、方法调用以及方法返回三种情况下均会发生。

合法的引用类型转换原则是指一个子类的对象可以被父类的引用变量所引用,其实质是继承概念的延伸,表达的是子类向父类的上溯转换。

类可以被转换为类和接口,不能被转换为数组。如果转换为类,则转换的目标必须是被转换类的父类;如果转换为接口,则被转换类必须使该接口的实现类。

接口可以被转换为类和接口,不能被转换为数组。如果转换为类,则转换的目标类必须是Object类;如果转换的是接口,则转换的目标接口必须使被转换接口继承的接口。

数组可以被转换为类,接口或数组。如果转换为类。则转换的目标类必须是Object 类;如果转换为接口,则接口必须是Cloneable或Serializable;如果转换为数组,则被转换数组元素类型必须是可被转换为目标数组的元素类型。

★强制造型(cast)

强制类型转换是指程序员根据造型规则明确地进行不同引用类型数据之间的转换。

如果没有造型语句(类型),则编译会出错。引用类型的强制造型分两步:编译期的语法检查和运行期的实际类型转换。因此可能出现编译通过而运行抛异

常的情况(ClassCastException)。

final类造型:final类可以被造型为非final类、final类和接口,但不能

被造型为数组。如果造型为非final类,则造型的目标非final类必须是被

造型final类的父类;如果造型为final类,则造型的目标final类和

被造型的final类必须是一个类,如果造型为接口,则被造型的final类总

是实现这个接口。

非final可以被造型为非final类、接口或数组。如果造型为非final类,则

被造型的非final类和目标非final类必须存在继承关系,但不要求造型顺

序;如果造型为接口,则被造型的非final类实现了该接口,如果造型为数

组,则目标数组必须是Object类。

接口可以被造型为非final类,final类和接口。如果造型为final类和非

final类,则目标类必须实现了此接口或Serializable接口,如果造型为

接口,则两个接口存在继承关系。

数组可以被造型为非final类或数组。如果造型为非final类,则被造型的数组必须是Object类;如果造型为数组,则被造型数组的元素必须可以造型为目标数组的元素类型。

注意一点:为了避免出现造型失败,造型前使用instanceof关键字进行检查(12)、方法重写(override)和方法重载(overload)

★重写:所谓方法重写是指父类中的一个方法在子类中获得重新定义,方法名、参数列表、返回类型均不改变。

规则:

重写方法必须和被重写方法具有相同的方法名、参数列表和返回值类型。

参数列表中要求数目、类型、顺序必须完全一致。

只有继承存在的情况下才能重写方法。

JAVASE5开始允许协变返回类型,即重写方法返回的类型是可以是被重

写方法返回类型的子类。

重写方法的访问控制修饰符的范围不能小于被重写方法。

重写方法抛出的异常必须和被重写方法一致或是其子类,或着不抛出。

注意:对于接口中的方法重写,其修饰符只能是public的。

注意:普通的成员方法的重写是一种多态行为,而静态方法实在类编译的时候就确定了,也就是说静态方法绑定到类,成员方法绑定到对象,即静态方法不能重写。

对于父类私有的方法来说,子类中如果有同样的方法不会构成重写。(即私有方法不

能被重写,因为重写依赖于继承,而私有方法不能被继承。)

★重载:所谓方法重载是指一个类中定义多个方法名相同,参数列表不同的方法,所谓参数列表不同指的是参数的类型、数目不同(二者之间有一个符合即

构成方法重载)。

规则:

重载方法必须拥有不同的参数列表,数目、类型、排列顺序三者有一即可。

重载方法在同一个类中定义。

重载方法的返回类型、访问修饰符以及抛出的异常均不能作为重载的判断

标准。

重载方法之间可以相互调用(指的是参数类型相同、数目不同的重载方法)。 Static关键字不能作为方法重载判定的标准。

(13)、Object类

★Object类是所有JAVA类的父类,如果一个类没有使用关键字extends继承一个类,其默认继承了Object类。

★equals()方法。equals()方法默认执行的是==的比较,参看Object类的源

码可知。因此要想实现自定义类的比较需要重写此方法自定义比较的规则。

在API中有几个类已重写了equals()方法,如String、Date和封装类。

equals()方法遵循一些原则:

自反性如果x不为null,x.equals(x)为true。

对称性 x.equals(y)为true,那y.equals(x)为true。

传递性 x.equals(y)为true,y.equals(z)为true,那x.equals(z) 返回值也为true。

一致性多次调用x.equals(y)结果均为true。

非空性如果x取值不为null,那么x.equals(null)为false。

equals()方法的一般写法:(以 Person类为例)

public boolean equals(Object object){参数只能是Object类if(this == object)return true;

if(object == null)return false;

if(this.getClass() != object.getClass())return false;

Person person = (Person)Object;

return ((https://www.360docs.net/doc/e29143092.html,).equals(https://www.360docs.net/doc/e29143092.html,))

&& (this.age == person.age);

}

上面代码中的getClass()可以用instanceof测试。但不推荐使用instanceof。

假设有一个Employee类和一个Manager类,后者继承自前者,分别有两个类的

对象e和m,假设他们有相同的名字、薪水和入职日期。现在有e.equals(m),

如果使用(m instanceof e)来判断,肯定为true,但是根据equals对称性

原则,要求m.equals(e)的返回结果为true,这时的(e instanceof m)返

回的要么是false要么抛出异常。

如果子有自己判断equals相等的原则,那么对称性原则要求强制使用getClass();

如果子类使用父类判断equals相等的原则,那么为了使不同子类之间的equals比较能够进行,可以使用instanceof来判定。instanceof superclass。

public boolean equals(Person person)这个不叫方法重写。

★hashCode()方法,其主要作用是配合equals()方法来使用。

重写equals()方法是必须重写hashCode()方法。因为两个对象如果用

equals()方法比较相等的话,那么他们的hashCode()方法返回值也

必须相等。

如果两个对象的hashCode(()方法返回值不相等,则两个对象的equals()

方法比较返回false,即两个对象一定不相等,

如果两个对象equal()方法返回值为false,则两个对象的hashCode()

方法返回值并不一定要求一定不相等(即其hashCode可以相等)。

hashCode()方法遵循原则:

多次调用x.hashCode()的返回值均是相等整数。

hashCode()方法在重写是根据equals()方法比较的内容重写:

如Person的hashCode方法重写为:

public int hashCode(){

return 7 * name.hashCode() +

13 * new Integer(age).hashCode();}

★toString()方法:返回的是该对象的字符串表示。

只要对象和一个字符串通过 + 号进行连接的话,会自动调用该对象的toString()方法。★对于一维数组对象,调用的是Arrays.toString(arrayName)方法进行打印。

★对于多维数组对象,调用的是Arrays.deepToString(arrayName)方法进行打印。

子类中对于父类的equals()、hashCode()、toString()方法的重写是通过super 调用父类中的equals()、hashCode()、toString()方法再加上子类自己添加的内容(这里假设父类已重写了Object的equals()hashCode()和toString()方法)。

★clone()方法:protected修饰,用于拷贝对象,所有使用clone()方法的

类都应该实现Cloneable接口(数组除外)。

浅克隆:如果一个类中不包含引用类型的属性(如Date类型的属性),那么使用

super.clone()方法可以实现该类对象的拷贝。

深克隆:如果一个类中包含引用类型的属性,那么该类的每个引用类型的属性也必须分别调用clone()方法才能保证对该类对象实现正确的拷贝。

假如有一个员工类:其有String类型的name属性和Date类型的hireDate

属性。那么如何对其进行clone呢?首先Employee类必须实现Cloneable

接口,然后重写里面的clone方法。

public Employee clone(){

Employee cloned = null;

try{

cloned = (Employee) super.clone();

cloned.hireDay = (Date) hireDay.clone();

}catch(CloneNotSupportedException e){

e.printStackTrace();

}

return cloned;

}

对于任何数组对象,其clone方法都是public的。

int[] luckyNumbers = { 2, 3, 5, 7, 11, 13 };

int[] cloned = (int[]) luckyNumbers.clone();

cloned[5] = 12; // doesn't change luckyNumbers[5]

2、JAVA关键字

(1)、this关键字

★this关键字代表了当前对象,即this关键字引用的是当前创建的类实例对象的句柄。如this.方法名,this.属性名。

★this关键字可以用在构造器中,表示调用该类的其他构造器,以避免代码重复。语法形式为this(...)。其必须在构造器的第一行。但是不能调用自身。

★this关键字用于构造方法时,不能同时使用super关键字。

★this关键字也可以用于调用本类的其他方法。this.方法名。

★this关键字不能用于static方法内。

(2)、super关键字

★Super关键字代表了父类对象,即super关键字引用的是房钱创建的类实例对

象的父类的句柄。

★super关键字可以用在构造器中,表示调用父类的构造器(如果子类没有调用其他的构造器,也没有显式调用父类的构造器,其默认调用的是父类的无参构造

器,如果父类没有无参构造,那么编译出错)。语法形式为super(...)。其

必须位于构造器的第一行。

★super关键字用于构造方法时,不能同时使用this关键字。

★super关键字也可以用于调用父类的普通方法。super.方法名。

(3)、abstract关键字

★abstract关键字只能修饰类和方法,不能修饰变量,因为该关键字表明的是未

实现的含义,而属性不存在未实现。

★abstract关键字修饰的方法为抽象方法,其不包含方法体。

★abstract关键字修饰的类为抽象类。抽象类可以不包含抽象方法,但是含有抽

象方法类一定要声明为抽象类,抽象类也可以包含非抽象方法。

★子类继承抽象类,必须完全实现其所有的抽象方法,否则子类只能声明为抽象

类。当一个类实现一个接口时,必须完全实现接口内所有的抽象方法,否则也

必须声明为抽象类。

★抽象类有构造方法,但是不能直接调用,否则编译出错。抽象类不能被实例化。

根据多态性,抽象类可以指向其实现类。

★抽象类不能被final修饰符修饰,因为抽象类需要子类继承实现,而final修

饰的类是不能被继承的。

★抽象方法不能被声明为final的,也不能被private修饰符修饰,因为抽象方

法需要被子类继承而实现,而final修饰的方法和private修饰的方法是不能被继承的。

(4)、final关键字

★final关键字可以修饰类、属性、方法,表示该修饰的对象具有不可变性。

★final修饰基本数据类型的变量为一个常量,其值是只读的。Final修饰的变量必须在使用前被初始化,三种初始化方法:声明后直接赋值;构造方法中赋值;

静态语句块中赋值。

★final修饰引用变量,表示该变量一旦分配给一个值就不能再改变,即该变量一旦引用了一个对象后,再也不能引用其他对象,更不能将其他对象的句柄赋值

给它。但是可以改变final变量所引用对象的内容。

★final修饰符位于方法前,表示该方法不能被子类重写,但是可以被重载。

★final修饰符位于类前,表示该类不能被继承,声明为final的类,其所有的

方法默认为final的,但是属性不是final的。

★final修饰符是唯一可以用于方法局部变量的修饰符。

(5)、native关键字

★native关键字只能用于修饰方法。一个在方法名前加上native关键字的方法

为本地方法,其目的是利用本地资源来扩展JAVA功能,与JAVA的机制无关。

★本地方法如同抽象方法,没有方法体,因为对本地方法的实现,不是JAVA语言,而是采用依赖于本地平台的其他语言编写的代码来实现的,它们位于JVM之外,可以通过System.loadLibrary()方法载入,其通常放在静态代码块

中来装入本地方法,如果System.loadLibrary()方法没有载入成功,会

抛出UnsatisfiedLinkError。

★Object类中的clone和notify方法都是本地方法。

★本地方法可以被private修饰符修饰。

(6)、static关键字

★static关键字不能修饰顶层类,可以修饰内部类。可以修饰属性、方法、代码块。

该修饰符表明所修饰的对象属于类范畴,而非类实例。

★static关键字修饰的类属性有两种引用方式,类名.属性名;或者对象名.属性名。

推荐使用前者,因为后者可读性不好。

★类的静态属性被整个类所共享,因此,任何一个类实例改变了属性的值,所有类的实例拥有的这个属性值都会同步改变,其不能被序列化。

★方法中声明的变量不能是静态的,因为方法中声明的变量是局部的。

★static修饰的方法除了可以访问其内部定义的变量外,只能访问被static修饰符所修饰的静态变量。如果需要访问非静态的属性,则必须通过对象.属性

的方式。

★对于静态方法和非静态方法的调用方式是不同的。对于非静态方法的调用是在运行期决定的,而对静态方法的调用是在编译期决定的。

★静态代码块主要用于初始化,该代码块只被执行一次,即首次装载类时被执行,如果存在多个静态代码块,那么按照出现的先后顺序被执行。相反,非静态代码

块每次创建新对象时均会执行。

辨析:静态方法和非静态方法

静态方法:可以直接访问本类的静态属性,其他的静态方法,可以在其内部声明非静态变量,但不能声明静态变量,静态方法中不能使用this和super关键字。

非静态方法:不能声明静态变量,可以声明非静态变量,可以调用本类的所有方法(包括静态和非静态),可以调用本类的所有属性(包括静态和非静态)。

经典代码:

public class Hello{

static{

System.out.println("Hello, World");

}

}不写main方法的HelloWorld,但是在输出之后会报错。晕死~~~

(7)、transient关键字

★transient关键字只能修饰属性,表示该变量不能被序列化。

★一个变量一旦被transient修饰,表明其不再是对象持久状态的一部分,该变

量的内容在序列化后,无法获得访问。

★transient关键字的作用是保证变量的安全性,即使是private变量,在序列化的时候可以通过读取文件或拦截网络传输来得到。

(8)、访问权限修饰符(public、protected、default、private)[不考虑内部类]★访问权限修饰符不能修饰局部变量,只有final可以修饰局部变量。

★一个属性或类只能有一个访问权限修饰符。

★public修饰符可以修饰类、属性、方法、构造方法。

★public修饰符访问权限最大,其修饰的类、属性、方法可以在任意位置被访问。

★protected修饰符可以修饰属性、方法、构造方法。

★protected修饰符修饰的属性、方法只能被本类或本类的子类访问,即使子类在不同的包中。(同一个包中的类也可以访问)

★default修饰符(默认没有修饰符)可以修饰类、属性、方法、构造方法、代码块。

★default修饰符修饰的类、属性、方法等只能在本包中被访问。

★private修饰符可以修饰属性、方法、构造方法。

★private修饰的属性、方法只能被本类访问

注意:访问范围控制从类到成员,如果类不可见,其成员不管被任何访问修饰符所修饰,均不可见。即要确定成员的可见性,首先要确定类的可见性。

如果类A和类B在不同的包中且访问修饰符均为default,假设A是B的

父类,即使导入了A,编译依然不会通过。而且也不能声明返回类型为A

的方法或A类型的变量(A和B无继承时也成立)。

关于protected的奇怪之处:

package parent

public class Parent{

protected int x = 3;

}

package child

public class Child extends Parent{

public void test(){

System.out.println("x is " + x);--->正确

Parent parent = new Parent();--->正确

System.out.println("parent's x is" + p.x);-->不正确

}

}

结论:protected访问权限只允许子类跨包访问,在子类中不允许使用父类的引用调用父类中的protected修饰的变量或方法。即子类可跨包访问,而父类

遵守的是default访问权限(即从包外访问protected修饰的变量和方法

只能通过继承实现)。此外,如果有一个类(Other)和子类处于同一个包中,

其中有子类对象的引用,子类对象的引用也不能访问父类中protected修饰

的变量或方法,这时的protected权限在子类中其实变成了private权限,

因此类外是不能访问的。

★protected = package + subclass

3、JAVA编程的几点建议

(1)、对于属性(数据)应该总是设置为private。

(2)、初始化所有的数据,包括成员变量和局部变量(尽可能不要依赖于默认初始化)。(3)、不是所有的属性都要求有setter和getter方法,如出生日期不需要setter。(4)、类内部的标准定义顺序

Public 属性---> default属性--->private属性

普通方法--->静态方法

(5)、对于方法、属性的命名要见文知意。

4、内部类(inner class)

(1)、内部类又称嵌套类,是指定义在一个类内部的类,内部类所在的类为外部类。内部类可以分为四种:静态内部类、普通内部类、局部内部类和匿名内部类。

(2)、对于内部类的引用:

如果是非静态的内部类,在外部类的外面引用的语法为

Outer.Inner in = new Outer().new Inner();或者是

Outer ounterObject = new Outer();

Outer.Inner in = outerObject.new Inner();

在外部类的内部引用的语法为:Inner in = new Inner();

如果是静态内部类,语法为:

Outer.Inner in = new Outer.Inner();

(3)、内部类的文件名:OuterClass$InnerClass.class;匿名内部类比较特殊,其文

件名为OuterClass$数字。

(4)、在JAVA中,对内部类的继承没有任何限制,满足单继承即可。也可以实现接口。

(5)、在JAVA中,对内部类的嵌套层次没有限制。

(6)、对于内部类,其如同类的其他成员一样,对整个类具有访问权限,可以访问所在类的

所有属性、包括私有属性。即使是定义在一个方法中的内部类,也可以访问这些类

的成员属性。一个内部类附属于外部类的。

(7)、静态内部类(static inner class):只能访问所属外部类中静态的成员变量。

静态内部类实际上是外部类的静态成员。

《被压迫者教育学》读书笔记

被压迫者教育学》读书笔记 丁然职业技术教育学 作者简介:保罗?弗莱雷是20 世纪批判教育理论与实践方面最重要、最有影响的作家之一,世界著名的教育家、哲学家。1994 年至1995 年,联合国教科文组织主办的国际刊物《教育展望》以四期特刊的形式,介绍了从孔子、亚里士多德到当代的100位具有国际影响的教育家,弗莱雷是其中四位在世的教育家之一,被誉为“活着时就成为传奇”的人物。他也曾被美洲和欧洲29 所大学授予名誉学位并在多个国家和国际组织中获得过荣誉和奖励。他是自赫尔巴特、杜威以来,教育理论史的“第三次革命”的开创者和实施者,毕生致力于教育实践和教育理论的研究,一生笔耕不辍,著述颇丰。 选择这本书来当教育哲学的书籍来读,是因为这本书最开始的题目吸引了我,并且在读的过程中发现本书和其他教育学专著不一样,通篇没有纯粹的教育学体系和教育学概念系统,而是从对处于不利境地的人的关怀出发,提出了教育的政治性问题,提出了教育服务于统 治阶级对人民施行压迫的现象,试图引导这些人被解放,自我解放, 最后改变他们的命运。袁振国老师是这样评价它的:这本冠以教育 学的著作并没有我们熟悉的教育学体系和概念系统,它不是一本一般 意义上的学科著作。这是一本关于平等和正义的书,是对处于社会不 利处境的人们的悲天悯人的关注,是平等和尊重地对待每一个人的生命呼唤和勇气奉献。” 本书第一章提到了“对自由的恐惧” ,这种恐惧是被压迫者会更 向往成为压迫着,但是是被压迫者摆脱不了被压迫的境地。自由要靠征服得来的,而不是靠恩赐。被压迫者想要获得自由,要经过持之以 恒的努力和敢于挑战的决心并尽心尽全力的追求才能获得。要解决压迫问题,首先就是要用批判的眼光来寻找压迫的根源,通过改造,创造一个新的环境。这么想是理想的,但是为什么压迫与被压迫这种现象在各个领域持续多年,并有可能一直持续下去。可能的原因有可能是被压迫者已经习惯了他们所处的统治结构,并且已变得顺从这种结构,只要他们觉得不能去冒需要冒的风险,他们便会停止争取自由的斗争。再者说,他们获取自由所做的斗争不仅仅对压迫着造成威胁, 也会威胁到与自已同样处于压迫下的同伴,

java初学者学习心得

学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了。开始学习任何一门课(包括java),兴趣最重要。一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,于是趁学校开设这门课,并且有自己的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。 还记得我编写的第一个经典程序“hello W ord”。从那时起我已开始走进Java的世界。当时自己不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?问了好多同学,他们告诉我的答案是一样的“java本身要求就是这样子的”,但我自己不甘心,就进行了下面的好多操作:把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。结果把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。接着在以后的学习中我也采用这样的方法解决问题,却发现自己的速度比别人慢了好多,我就把自己的课余时间也分一部分给了java。因为基

础是最重要的,只有基础牢固才有可能对后面的学习有更加深刻的认识! 学习一门新的语言,参考书是离不开的。听老师说订的教材偏难,不适合我们初学者,于是我在图书馆借了参考书(一本篇幅较短的入门书来学习那些最简单、最基本的东西,包括学习Java语法等)。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。 在学习Java的语法时,Java的语法是类似c语言的,所以学习的比较轻松。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,和同学一起讨论了好久才得以解决。 在学习Java的面向对象的编程语言的特性。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C语言的经验,花了很长时间,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了很多遍,才彻底领悟了。 开始熟悉Java的类库。基础类库里面的类非常非常多。据说有3000多个。但是我真正使用的只有几个,比如说java.io.*; java.util.*; java.sql.*;等。

《java语言及其程序设计》读书笔记

java是1990年james.gosling主持的一项研究计划的产品,他们在计划的初期是想设计 出一个能够使用最少的系统资源,而且能够有效、安全地传递应用程序的语言。进一步的要求是这个语言有一定的延伸性,而且可以应用在不同的硬件和操作系统上面。 他们最开始是想在c++的基础上修改,但是一段时间后,他们觉得应该自己编写一个小的语言。在他们的努力下,这个程序终于开发出来了,这个新语言适用于开发安全、分散式、网络式的的应用程序。最主要的特性就是安全性,java语言不是超文本标识语言(HTML) 的替代品,也不是专门用来书写信息网主页的。虽然java基本上类似c++,有逻辑的流程设计、数据结构、数据处理以及演算的功能,所以本质上是一种面向对象的语言,但是,java 不是另一种c++,它的特点之一就是可以提供直接在信息网主页上传递交互的功能,及时地展现声音、影像及动画,这是c++望尘莫及的。 java程序语言是介于直译语言(Basic)和编译语言(c/c++)的,是想在两者之间求得 一种平衡。 java的另一个特点就是打破电脑执行程序的传统观念:以往用于电脑运算的程序和数据都必须放在使用者了电脑上才能执行。而java则自行解体,它的应用程序的执行码、浏览器、编译器、直译器、原始程序等可被分散在国际电脑网络上的任何地点存放,任何网络上的使用者在任何时间皆可由哪些据点将它们载入自己的电脑进行执行。“网络即电脑”这个口号从java开发出来一直被sun公司推崇,而且被更多的人认可了。 根据程序的写法以及执行方法的不同,可以将java程序分成两种: java小程序(java Applet); 单独式java应用程序(Stand_alone java application); java Applet需要依附于信息主页上的一个小面板内(Tablet),适用于java的浏览器会依据java Applet所描述的存放地点及名称,及时将它的执行码载入,而且可以在小面板里面显示执行结果。java Application则不需要浏览器的支持,只要电脑上有JVM(java virtual machine)就可以执行。 java可以很轻松实现人机交互,什么是交互的概念呢?当你把鼠标放入俄罗斯方块画面 的时候,这个应用程序的接口能够马上探测到,并能够根据你的输入而迅速做出反应,这就是交互的概念。在java进入全球信息网之前,绝大部分的主页设计都只是拘泥于静态设计 的范畴,即如果你摆放一张照片或图像在主页里,它既不会动也不会发出音效。 由于java具有这么强大的功能,因此对各种操作系统以及软件业(Microsoft)来说是一种很大的冲击。java不同于c++最大的地方可能就是java语言是适用于网络的编程语言,这一点是c++无法达到的。 java程序在定义类的时候,可以加入异常处理方法,能够使得例外情况下,程序能够正常运行。所谓的例外情况就是:程序在正常执行时,因为一些没有预期的运算错误而导致程序中断。 在java里面,print()和println()函数的区别在于前者在输出数据以后不会自动换行,而 后面一个方法在输出数据以后能够自动换行。 java语言同c/c++语言的区别: (1)我们知道,c语言最大的不足就是它的程序在软件维护方面花费太高,所谓的维 护成本是指一种程序无论它的功能有多么强大,如果是因为语法定义、或者设计结构方面的因素,使得程序内容不易被了解或者容易产生错误,以致于在修改的时候很是花费时间。 (2)为了能够适应国际电脑网络上的TCP/IP协议通信规则,包括HTTP以及FTP等通 信方法,java提供了很完备的网络类型程序包(类似于一个标准程序库)

教育学基础读书笔记.doc

《当代教育学》读后感

教书育人是时代永恒的的主题,随着时代的发展,教育的概念、形式、目的等等都发生了改变。 学校的教育渐渐发展成为根据计划性、目的性、条理性、全面性的,多种的教育形式,教育种类,相结合,随着时代社会的进步而不断完善发展。比如现今教育除了传统的学校教育,更是应时代和社会经济的需求而衍生出了教育机构、培训机构等等。中共领导提出“科教兴国”,而如现的教育的发展却已经无法离开社会、政治、经济、文化等的发展,社会的发展,人们日益追求知识及社会对教育程度的需求促进了教育的多样发展;国家的政策也是促进教育发展的另一重要原因,“科教兴国”,“九年义务教育”等等提出都有利于教育的发展;经济文化也分别在不同程度上影响着教育的发展。 但在这之中也存在的发展上的不利因素,比如说:恶性竞争、教育舞弊等等,避免和解决在教育发展过程中产生的这些问题,是很值得去探索和思考的,也是正在极力解决当中的。 教育是每个国家都非常重视的一个问题。尽管各国的社会制度、经济形态等各不相同,但是教育作为一个全球共同存在的问题,她的发展形势和发展趋势都具有共同的特征和趋势。 教育的规模、内涵不断的增长,体制结构不断的变化,在不断随社会发展的过程中所表现出的教育缺陷,如教育不平等,发达地区与贫困地区,非洲地区与其他地区等。这些发展变化告诉了我们:教育的内容和形式等都是需要不断发展更新的,古时的“六艺”,现在的“九门功课同步学”,还有兴趣班的“遍地开花”等等,无一不在印证着教育的快速发展。但是在这发展之中,我们也不能忽视教育不足的存在,大范围内的教育不平等、小范围内的恶性竞争,随新科技产生的考试舞弊……如何正确的对待和解决这些问题,是值得深入思考和深入探究的。 教育渐渐的普及,普通民众有了更多的机会接受教育,同样随着社会的发展,人们逐步追求精神生活的满足,于是追求终身教育的呼声也就越来越高,“活到老,学到老”这一社会文明进步发展的重要标志,正在不断的壮大和发展之中。 做许多事,都会存在着目的,教育也不另外。 教育的目的在于需求,但随着社会渐渐的发展,更多的上升到了精神提升、知识丰富的领域。古时只有男子才有受教育的机会,而且是较为富贵的男子,他们为了成为状元、为了做大官光耀门楣、为了成为大家敬仰的“文曲星”,他们努力学习四书五经,女子只能以“女子无才便是德”而失去受教育的权利,因为女子不需做官,只需相夫教子;现实,男女均有接受教育的权利,现今每个人他们接受教育的目的会有不一样,但大多数,都是为了在社会中更好的生存。国家提出的教育目的河大程度上也影响着个人的受教育目的的方向。 教育与人的发展: 个体发展与教育的主导作用:个体发展呈现历史性与社会性、顺序性与阶段性、共同性与差异性等特征。个体发展既是现实地展开,又具有无限的发展可能性。 遗传素质与环境对个体发展的作用均是与教育分不开的。教育的主导作用既表现为对个体的作用,也表现为对种族遗传、对环境形成的重要影响作用。 个体的发展离不开其能动的实践,个体主观能动性的发挥,对人的发展经常有着决定性的意义。 发展个性是教育长期追求的目标:个性是人性在个体上的具体表现。它既反映人性的共同性,也反映其差别性。从广义看,个性是由生理、心理、社会性诸

java的心得体会[工作范文]

java的心得体会 篇一:java初学者学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了。开始学习任何一门课,兴趣最重要。一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,于是趁学校开设这门课,并且有自己的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。 还记得我编写的第一个经典程序“hello Word”。从那时起我已开始走进Java的世界。当时自己不是很理解为什么main方法一定要这样来定义public static void main,能不能不这样写?问了好多同学,他们告诉我的答案是一样的“java本身要求就是这样子的”,但我自己不甘心,就进行了下面的好多操作:把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public 取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,

看看运行结果如何。结果把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。接着在以后的学习中我也采用这样的方法解决问题,却发现自己的速度比别人慢了好多,我就把自己的课余时间也分一部分给了java。 因为基础是最重要的,只有基础牢固才有可能对后面的学习有更加深刻的认识! 学习一门新的语言,参考书是离不开的。听老师说订的教材偏难,不适合我们初学者,于是我在图书馆借了参考书(一本篇幅较短的入门书来学习那些最简单、最基本的东西,包括学习Java语法等)。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。 在学习Java的语法时,Java的语法是类似c语言的,所以学习的比较轻松。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,和同学一起讨论了好久才得以解决。 在学习Java的面向对象的编程语言的特性。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,

java编程思想读书心得

竭诚为您提供优质文档/双击可除java编程思想读书心得 篇一:Java编程思想第四版读书笔记 Java编程思想第四版读书笔记 一基础知识点 1.面向对象程序设计 (object-orientedprogrammingoop), umL(unitiedmodellingLanguage统一建模语言)。将对象想像成“服务提供者”,它们看起来像什么?能够提供哪些服务?需要哪些对象? 2.Java中动态绑定是默认行为。Java采用动态内存分配方式,通过new操作在堆(heap)的内存池中动态创建对象。 Java存储结构类型:1)寄存器2)堆栈,主要存储对象引用3)堆,主要用于存放所有的Java对象4)常量存储,也就是程序代码区5)非RAm存储,如流对象和持久化对象。基本类型不用new来创建变量,而且这个变量直接存储”值”,并置于堆栈中。 3.bigInteger和bigDecimal的使用。当变量作为类的

成员使用时当变量作为类的成员使用时,Java才确保给定其默认初当变量作为类的成员使用时始值,但是在方法中定义的变量,它有可能是任意值。面向对象的程序设计可以归纳为“向对象发送消息”。关键字static。 4.Javadoc只能为public和protected成员进行文档注释,但是也可以通过-private进行标记注释。 Javadoc常用方法: @see引用其他类,linkpackage.class#memberlabel},{@{@docRoot},{@inheritDoc},@version,@author, @since,@param,@return,@throws,@deprecated。 5.整数除法会直接去掉结果的小数位。基本类型的对象如果直接对它们赋值,对象指向同一个常量存储区,但是如果通过对象来初始化则会指向不同的堆的存储区。如: stringst1=newstring("A");stringst2=newstring("A");s t1==st2falsestringst1="A";stringst2="A";st1==st2tru e 6.逻辑操作符:与 (Leafincrement(){i++;returnthis;}} 10.回答一个新技术的问题大概思路和步骤是: 我们想干什么,怎么干,干的过程中遇到了什么问题,现在用什么方式来解决。

《普通教育学》读书笔记

《普通教育学》读书笔记 《普通教育学》全书共分三编,三编之前加有一个“绪论”。第一编得标题就是“教育得一般目得”,本编主要论述了管理与教育得一般目得问题。第二编得标题就是“兴趣得多方面性”,本编主要论述了兴趣得多方面性问题,并以此为基本原理来解释学校得教学计划与学科设置,阐述了教学得过程,环节等一系列教学论问题。第三编得标题就是“性格得道德力量”, 下面就《普通教育学》中得教育思想作一简要述评。 (一)五道念与以之为基础得教育目得论 五道念构成了赫尔巴特教育目得论得理论基础。五道念即自由、完善、仁慈、正义与公平等五种道德观念。第一种为“自由”得观念。亦译作“内心自由”得观念。“自由”得观念要求个人得意志与行为能摆脱一切外在影响得束缚而只受制于人得内在判断,归之于人得内在自律,归之于人得理性自觉,从而使人得意志、理性与外在行为完全协调起来。第二种为“完善”得观念。赫尔巴特认识到,在实际得道德实践中,人得由意志、理性所作出得内心判断往往难于与外在行为完全协调起来,人之理性判断外发之为道德行为,往往受客观条件与人得其她心理品质得影响。当内外发生矛盾且这一矛盾不能调与之时,即需依靠“完善”得观念去加以解决,即用多方面得意志力与坚强而紧张得毅力加以“内部得协调”。第三种为“仁慈”得观念。亦即“绝对得善”得观念。“完善”得观念得以发生作用得法宝就是人得意志等理智能力。如果借助人得内部得理智能力还无法协调意志与行为之间得矛盾时,就要用“仁慈”得观念来控制自己得行为,从而使人不与任何人发生那种危险得恶意得冲动。“仁慈”得观念发生于两种意志得相互关系之间,通过这一观念使自己得意志处处与别得意志相协调,具有无私地为她人谋福利得强烈愿望,这样,社会冲突就不可能发生,社会秩序就会得以安定。第四种为、“正义”得观念“正义”得观念就就是“守法”得观念。如果“仁慈”得观念还不足以遏制人得与她人发生冲突得恶意

java工作心得体会

java工作心得体会 java工作心得体会1 通过本学期对JAVA这门专业课的学习,我获益良多。JAVA作为一种比较流行的编程语言,占据了85%的市场,大约有450万程序员在都使用这种编程工具,足可见其重要性。 Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。 Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 发布后,Java 的执行速度有了大幅提. Java与其他语言也有很大的不同。Java提供了一个功

能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但C和C++被大家接受,所以Java设计成C++形式,让大家很容易学习。Java去掉了C++语言中的指针运算、结构、typedefs、#define、需要释放内存等功能,减少了平常出错的50%,让Java的语言功能很精炼。Java与C和C++直接相关.Java继承了C的语法,Java 的对象模型是从C++改编而来的.现代程序设计始于C,而后过渡到C++,现在则是JAVA.通过大量的继承,JAVA提供了一个强大的,可以更好地利用已有成果的,逻辑一致的程序设计环境,并且增加了在线环境需求的新功能.或许最重要的一点在于,由于它们的相似性,C,C++和JAVA为专业程序员定义了一个统一的概念架构.程序员从其中的一种语言转到另一种语言时,不会遇到太大的困难,同时JAVA优化了C++语言中一些令人难以理解的特性,增加了诸如垃圾自动回收机制的内容,方便了初学者的学习和使用。 JAVA对于我们的生活起着十分重要的作用。举例来说,电子商务是当今的热门话题,然而传统的编程语言难以胜任电子商务系统,电子商务要求程序代码具有基本的要求:安全、可靠、同时要求能与运行于不同平台的机器的全世界客户开展业务。Java以其强安全性、平台无关性、硬件结构无关性、语言简洁同时面向对象,在网络编程语言中占据无可比拟的优势,成为实现电子商务系统的首选语言。

教育学之读书笔记十篇

一、《陶行知教育名著教师读本》读书笔记 在教育实践的过程中,我们逐渐意识到所进行的教育探索,有不少地方是和陶行知先生提出的“生活即教育”的教育理念相吻合的。从本学期开始,我们明确提出要在教育教学活动中“践行陶行知先生‘生活教育’的理念”。要践行这一教育理念,首先要对这一理念有正确地认识,不能“挂羊头卖狗肉”,这就要求我认真研读有关陶行知的教育理论。《陶行知教育名著教师读本》就是我选择研读的第一本书。 这本书重点阐释了陶行知先生对与生活教育的三大原理,有着很重要的影响。 原理之一:“生活即教育” 陶行知指出:“生活教育是生活所原有,生活所自营,生活所必须的教育”,“生活教育是以生活为中心的教育。……过什么生活便是受什么教育。”其主要精神有:第一,生活决定教育,教育是满足人生需要,为生活向前向上的需要服务的。第二,实际生活是教育的中心,教育只有通过生活才能产生力量而成为真正的教育。第三,教育的意义是生活的变化,因而生活教育的内容是伴随人类生活的变化而发展的。第四,生活教育是一种终身的与人生相始终的教育。 原理之二:“社会即学校” 陶行知认为,“不运用社会的力量,便是无能教育;不了解社会的需要,便是盲目的教育。” 他指出,传统教育在“学校与社会中间造了一道高墙”,学校好比是一个“大鸟笼”。提倡“社会即学校”,就是要拆除学校与社会之间的“高墙”,冲破鸟笼式的学校束缚,把笼中的小鸟放到天空中任其自由翱翔,把学校中的一切伸张到大自然中去。 原理之三:“教学做合一” 按照陶行知的解释,教学做合一是生活现象之说明,即教育现象之说明。“在生活里,对事说是做,对己之长进说是学,对人之影响说是教,教学做又是一种生活之三个方面,不是三个各不相谋的过程。” “教的方法要根据学的方法;学的方法根据做的方法,事怎么做就怎么学,怎么学就怎么教。” 陶行知对教学做合一的效用作了归纳阐释:要想营利人类全体的经验必须教学做合一方为最有效力;生活教育就是教学做合一;教学做合一不但不忽视精神上的自动,而且因为有了在劳力上劳心,脚踏实地的“做”为它的中心,精神便随“做”而愈加奋发。 除此之外,陶先生在《传统教育与生活教育有什么区别》一文中,非常精辟地对传统教育和生活教育进行了比较。 传统教育以文化为中心,偏重传授文化知识,死读书、读死书、读书死;而生活教育重在运用、发明、创造,提倡活读书、读活书、读书活;传统教育使学校与社会脱节,生活教育则要求把整个的社会当作学校;传统教育只讲“天理”与“礼教”不讲“人欲”和“自由”,而生活教育却追求“天理”与“人欲”“打成一片”;传统教育是以教师为中心,以书本为中心,而生活教育却主张以儿童为中心,以儿童的生活为中心;传统教育坚持的维持性教育,而生活教育提倡的却是开放、发展、创造的教育…… 读这本书,反思今天的教育,不难发现,尽管陶行知先生所倡导的生活教育理念已经有70多年的历史,尽管我们的教育改革已经推进了那么多年,但我们真实的课堂教学还是那样像陶先生所描述的“传统教育”,离他倡导的“生活教育”还差的很远! 二、《探究式科学教育教学指导》作者:韦钰 读了一书。我认为,《探究式科学教育教学指导》一书,无论是促进我的课题研究还是提升我对科学教育的理解都有很大的作用,因此,我摘录了书中的一些观点。

最新javaweb学习心得

javaweb学习心得 第1篇第2篇第3篇第4篇第5篇更多顶部 目录 第一篇:javal,css,javacript,xml,dtd/scheam,以及java ee 中的jsp,servlet,过滤器,监听器,jstl,el,jquery,ajax。 下面就各个模块进行总结:在学习html时,我是对这个没太在意的,因为里面全部是标签,没有需要理解的内容,全部是属于识记的,所以在学习时相对轻松,对于html常用的标签都是非常清楚的form中的十一种类型,常用的有text,passit,button,radio,checkbox,等其他的标签如div,table,span,select都是重要的标签. css的学习:虽然说在标签中也可以定义样式,但是这么做看起来不是那么明智,我在学css时还是比较努力的,所有的样式效果都测试过,并且写了相应的案例,只是过了不到3个月就忘了一大半,很多时候都是查文档才能写出来的,虽然css对于我们来说不必要非常精通,但是我觉得掌握的东西越多,以后的工作就越轻松,所以在中级结束后也会去看看前面的笔记和案例。

javascript:js 我认为是最重要的,甚至于超过servlet,jsp,在上课期间,讲的内容还是比较少的,就javascript中创建对象来说吧,应该只讲过3中方法,虽然在一般的情况下是用不上的,但是我觉得还是有必要学习的,这样有助于看懂别人写的框架,在javascript这部分学习中讲的最多的还是dom操作,不过我觉得用dom操作太繁琐了,写的代码太多,而且效率看起来也不高,后面就是讲的事件,事件也算是简单的,只是对触发的事件进行相应的响应。除了这些就是javascript流程控制,对象一些基本语法,这些和java类似,所以在上课时没有讲得太多。 xml: extensible markup language可扩展标记语言。它是由sgml(standard gerneralized markup language)发展而来的,允许开发者自定标签,可以将标签和内容有效的分离。在xml技术里,可以编写一个文档来约束xml文档的书写规范,称之为xml约束。本文主要介绍dtd与schema两种约束,在这里学习了dtd,scheama,定义xml约束,这部分的学习是我感觉最累的一部分,dtd还算好,scheama里面的内容,现在都忘了,没有任何记忆,只知道在xml约束中有着两中方式,还好这些在刚开始工作时是用不上的,因此我也没有用很多时(敬请期待更好文章:cat,了解tomcat下的目录,以及操作更是方便。我在学习完ajax,json后就发现,即使是没有jsp,也能做出一个动态页面

个人读书方法总结(..

{读书}个人读书方法总结(看Jun Yang兄的读书文章后有感而写) 看了Jun Yang的文章,我也想写我自己的读书总结了,呵呵。 不过看这个的前提是:每个人的读书习惯都是不同的,不要随便“全盘”拿别人的习惯来培养自己的习惯,找到合适自己的才是最重要的。“全盘”二字重点,不要全盘接受别人的习惯。我下面所说的也不一定是读到我文章的人所需要的。 我的读书方法,一些是我爸爸培养的,一些是我以后总结的。 1、挑选合适的时间连续阅读。 我也一样不推荐计划阅读。看了Jun Yang的文章,在这一点有些共鸣。 C专家编程的作者Peter Van Der Linden曾经玩笑的解释“什么时候数组与指针相同”这个标题的时候说: The C Programming Language,第二版(K&R)99页的底部是: 作为函数定义的形式参数, 然后翻到第100页,紧接前一句, char s[]和char* s是一样的。 呜呼,真是不幸,这么重要的一句话竟然在K&R第二版种被分别印在两页上。 嗯,如果按计划看这样的书,恰巧看到99页,而不看100页,那么100页的关键部位岂不是看不到?呵呵,玩笑。 毕竟连续阅读头脑才有印象。看书不是锻炼,看书不是锻炼记忆力,获取书本知识不能“量化”。 2、快速浏览,然后多看几遍。 这个是我爸爸在我小时候就给我提的,我接受了这个建议到现在。他给我说:书你一遍看完就掌握其中重要的内容是不现实的。但是在掌握之前要有个大概的印象,掌握这个印象的方法就是快速浏览,不要知道某些条目是为什么,需要研究的重点就记下来,第二次看的时候再去仔细看,能理解多少就是多少,第一次要以看完为目的。而真正掌握,是随后的通读,有了第一遍的基础,随着看这本书的次数增加,看书速度会越来越快,因为头脑里早已经知道那些是没有掌握的,已经掌握的就会快速略过,但是会加深印象。此后可以带着实际问题从新来翻阅该书,会有更深的理解。《C++Primer第三版》潘爱民老师翻译的版本,我在2002年购买到现在看了不知道多少遍了。从最初的花了近3个月的浏览第一遍,到现在的可以花一天就可以通读一遍。期间给我带来了不少好处。 曾经非常非常不待见这种方法,自从亲身使用过好感到确实是好方法。特别是一些技术书籍,尽管你第一遍看的很仔细,你仍然不能记住对你来说第一次接触到的概念,读多了(可能跟艾宾浩斯曲线有关吧),记住的概念多了,也就更好理解了。 3、学会记忆也要学会忘记。 记住重点,尽量忘记细节。甚至记住哪本书可以找到这个概念就够了,然后忘记它。每个人对待书的态度不同的,或许与自己的成长经历有关。我的习惯是,记住重点,想了解细节再去查。学会记住很难,其实学会忘记也很难。有时候记忆是一种负担,日积月累会很沉重,不用的知识会越来越多,而且书承载的是作者他的想法,看书在吸收知识的时候,无形中也在被作者所“干涉”思想。但模仿的过程是学习的重要过程,但脱离不了模仿就不能成为自己的思想和知识。学会查是一种重要的手段,还是《C++Primer》,前几天我还就构造函数和析构函数的细节,特别对多继承的析构函数作为重点仔细看了一下,有时候一些类似常用的概念,有很多种形式,平时也就用最常用的,那些不常用换言之特殊的概念,能查就可以了。嗯,看了Jun Yang的第二点,他说“知识存储机器”,呵呵有些夸张了。不过也可以理解他这么说,上面我已经提到书本给我们带来的负面影响了。 “看书”而不是“读书”,读书也是中国常用词语。英语就是read book。很多人都喜欢用嘴去“读”书,或者边看书边自言自语。这是不太好的一个习惯,读是一种干扰人思维的方式。语言虽然能加深记忆,但会影响思考。 4、不要“太”强迫自己。 不喜欢就不要看,看不进去可以极端的选择干脆不看,或者隔一段时间再看,或者静下心来的时候再看,或者换一本同类的书,按照自己需要的知识点来寻找书籍。曾经和朋友交流过,他说《编译原理》也就是那本经典的“龙书”,虽然他也知道很好,可怎么也看不进去,不知道为什么。但是看《编译原理与实践》,他很容易的就看进去了,之后,他根据掌握的编译原理写了一个汇编语言的代码着色器,可以生成UBB代码和HTML代码。 我为什么要突出不要“太”强迫自己这个“太”呢?有时候也需要强迫一下自己,不能太随性,也得掌握一个度。有时候很重要的概念书籍,看起来是很枯燥的,朋友建议看的书,可能有他受益过的地方。比如我看《Structure and Interpretation of Computer Programs(SICP)》,就是那位只能看《编译原理与实践》的朋友推荐我看的,北大裘宗燕老师已经翻译为中文版。经典的SICP是用Lisp描述的,一本古老的介绍functional编程的书。看一点就感觉很乏味,但稍微强迫一下自己,就知道这本书的优异之处。我就是看了求解费波那契数列的使用递归,以及递归优化那一章,对我以后写任何语言递归的分析,受益那是一辈子的。比如C++之父写的书,就被公认的哲学味太浓,不适合绝大多数人阅读,但我就很喜欢看,书本就是这样,因人而宜,就像配偶一样,自然有适合自己的

教育学书籍读书笔记

教育学书籍读书笔记 多读书、乐读书、会读书、读好书,感受文字之美,尽享读书之乐。与经典同行,为生命阅读,下面给大家分享教育学书籍的,欢迎参考! 《家庭教育》这本书,看过后,我明白了家长在很多方面都应该较正自己,给孩子做个好榜样,也教会了我怎样更好的与孩子沟通,怎样才能更好的教育好孩子。 一、在各个方面严格要求自己,给孩子做个好榜样。早睡早起多运动、多看书,在潜移默化中影响孩子。尤其要注意时常保持健康、快乐、自信的状态,让孩子处在和谐融洽、开心向上的家庭氛围里。 二、端正的学习目标 首先,学习是一件要伴随人一生的事情,而不仅仅是在学校里才需要完成的任务。也许对我们成年人来说,可以很轻易地理解这个道理,因为不管我们拿到硕士还是博士学位,在我们工作的时候,依然会遇到棘手的问题和挑战,不学习不突破,就永远不会有进步和发展。因此,我们要让孩子也理解这一点:学习不是为了拿好成绩,也不是为了考好大学,学习的目的是让你们掌握发现和解决问题的能力,是为了让你们能在未来的社会中承担起责任,是为了改变这个还有很多缺陷和问题的世界。 在学校里,孩子们学习的不只是知识,更重要的还有做人的道理。第一次走进东升一小的校园时,美丽的校园不仅让人心旷神怡,操场边上那句“做有中国灵魂知礼明礼受礼的现代人”更让人深思和感动。当学校能把“德行”和“礼”作为办学的宗旨,是一种何等的高瞻远瞩的姿态。教育本身的目的是育才,唯有

德能兼备才能称之为“才”。在这个略显浮躁的社会中,我们要清楚地看到,中国的未来仰仗的不是经济增长或者GDP排名,只有和谐的社会才能更具有可持续性,而这就需要更多有德行的人来承担责任。因此,我们不能把孩子教育成读书机器或者考试达人,而是要教他们如何做一个有完整人格的人,懂得如何与人相处,如何爱护环境和保护弱者等等。简短的说,我们和学校的一致目标是要让孩子们将来成为对社会“有用”的人。 三、因材施教 看过后,我意识到,孩子和小树一样,有不同的个性和特点,也需要有不同的培育策略,要不断修枝剪叶,让她经历风雨,才能让她长成一棵有担当、有能力福荫社会的参天大树。 我的孩子是一个懂事、乖巧、善良而且会替别人着想的好孩子,比如说:今天碰到某某同学的妈妈,说你很可爱哦。慢慢地,孩子从开始抗拒上学,变得喜欢去上学了,从开始总是在课间时坐在教室里,到后来开始去操场、图书馆“探索”她的新天地。这一点一滴的进步对别的孩子来说也许不算什么,但却让我很欣喜地看到她逐渐开朗和勇敢的迹象。书中那一句“仔细诊断,对症下药”的确是非常管用。上学路漫漫,将来孩子的路还很长,一定还会遇到更多的问题,并不厚,但却很全面地针对很多问题提出了解决办法,希望在今后的日子里还会继续帮助我们克服困难。 最后,因为非常喜欢龙应台说过的一段话,所以借来这里跟诸位分享:“孩子,我要去你读书用功,不是因为我要你跟别人比成绩,而是因为,我希望你将来会拥有选择的权力,选择有意义、有时间的工作,而不是被迫谋生。当你的工作在你心中有意义,你就有成就感,当你的工作给你时间,不剥夺你的生活,你

javaweb学习心得范文

javaweb学习心得范文 时间过得真快,转眼间,在××实训基地短短20天的实训生活 已悄然过去几天了,然而实训的过程还历历在目。 经过几天的JAVAwebOA办公系统开发的实训,我对JAVA软件开 发平台有了更深一步的了解与深入,对MyEclipse认识与使用也有 了大大的提高。开发这个OA办公系统用到知识几乎都是以前课本上 所没有学到这,很多都是现学现卖,所以用起来遇到很多的阻力。 我做的模块是考勤的请假管理,要用到DAO,和MVC设计思想模式。听课的时候不太明白这是怎样的一种设计模式,随着慢慢的深入开发,通过解决各种问题,体会到了这两个设计模式的一些要领。虽 然后面和数据库连接时成功,但是却没有在数据库看到应该增加进 去的内容,调试了很久还是没有成功,由于时间问题最后只好作罢。但是我有决心会去弄明白它。 这次实训也让我深刻了解到,不管在工作中还是在生活中要和老师,同学保持良好的关系是很重要的。做事首先要学做人,要明白 做人的道理,如何与人相处是现代社会的做人的一个最基本的问题。对于自己这样一个即将步入社会的人来说,需要学习的东西很多, 他们就是最好的老师,正所谓“三人行,必有我师”,我们可以向 他们学习很多知识、道理。突然想起鲁迅先生的一句话:这里本来 没有路,只是走的人多了,也便成了路。生活的路呢?生活的路也是 人走出来的,每个人一生总要去很多陌生的地方,然后熟悉,而接 着又要启程去另一个陌生的地方。在不久就要踏上人生另一旅程的 时候,有时不免会感到有些茫然,感到无助,但生活的路谁都无法 预设,只能一步一步摸索,但只要方向正确,不要走入歧途,走哪 条路都走向光明。 此次只实训了短短的三周。虽说时间很短,但其中的每一天都使我收获很大、受益匪浅,它不但极大地加深了我对一些理论知识的 理解,不仅使我在理论上对Java有了全新的认识,在实践能力上也

赫尔巴特 普通教育学读后感

赫尔巴特《普通教育学》读后感 “教育史上的经典著作永远是教育工作者的最佳启蒙”。通过对赫尔巴特《普通教育学》的阅读,我体会到了赫尔巴特所构建的科学教育学体系的历史价值及其对现实教育问题的借鉴意义。 下面就几个方面,结合现实谈谈自己的一些粗浅的拙见。 1、课程改革一定要从实际出发,以培养新型人才为目的是方法的先导。首先应该从各地的实际出发,确定切实可行的人才培养目标。在现代教育理念的指导下,结合本地、本校的实际,有计划、有组织去设计、去实施。一定要强调其可行性和可操作性,注重改革的实效和教育目的的达成度。 2、赫尔巴特论证的教学法往往被人认为是教师的“教法”,而不包括学生的“学法”,这就是忽视了他的“教法”是建立在学生心理发展规律之上的。根据学生兴趣活动的四个阶段:注意、期望、要求、行动来规定教师不同教学阶段的教学活动和方法,以促进学生统觉团的形成和扩大,他没有否认学生的主动性,而是更多地论述了教师如何去做,以促进学生的最大发展;而杜威也忧虑,“迎合学生的任性和兴趣”会有危险,需要有成人的指导来发展学生的民主,他没有否认教师要进行必要的指导和规范。 3、如何构建我们自己的教学法,首先,无论采用哪一种教学方法,都不可能孤立的发展知识或能力,二者之间的对立也就没有那么绝对。其次,对于赫尔巴特和杜威教学法,不能一切“拿来”,更不能一概否定,要辩证分析,取长补短。第三,现在各种教学法如雨后春笋,更要汲取各家之长,为我所用,切不可今日学习“魏书生”,明日又学“洋思经验”,一定要学其思想的内核,而非形式。如同今日我们仍然要研究赫尔巴特一样,主要是研究和学习其教育思想。

4、赫尔巴特的眼里,教育目的之间存在着统一性,这种统一性表现为相互联系的三重目的。首先,培养学生对知识的浓厚兴趣是实现最高教育目的的首要条件。没有兴趣,就不可能有真正的道德教育。兴趣必须是多方面、均衡的。教学中如果只有单一的兴趣,或者某个方面兴趣过度,会出现与完全缺乏兴趣相同的结果:破坏完善道德的培养。因此,兴趣必须向多方面发展,多方面的兴趣应该构成一个匀称的统一体。其次,多方面兴趣的培养就是个性多方面发展的教育。赫尔巴特提出,教师应该使个性向多方面性发展,使个性、品格、多方面性融为一体。他所说的个性与多方面性实质上是资产阶级个人发展的要求与社会需要的反映。个性愈益同多方面性相融合,品格即愈益易于驾御个人。三者结合起来既为实现教育的最高目的——道德的完善奠定基础,又为实现可能的目的创造了条件。他有时把教学放在第一位,有时又把训育放在第一位,原因也就在这里。他说:“假如道德在多方面性中没有根基的话,那么,我们自然可以有理由撇开教学来探讨训育了;那样的话,教育者就必须直接控制个人,激发他,驱使他,使善在他的身上有力地生长起来,使恶劣的习性销声匿迹。教育者可以自问,这样一种人为的、被强调的单纯的训育至今是否有可能? 假如不可能,那么,教育者必须有一切理由假定,人们首先应通过扩展了的兴趣来改变个性,必须使其接近一般形式,然后才可以设想个性有对普遍适用的道德规律发生应变的可能;同时在对付过去业已变坏了的儿童时,除了应考虑他现存的个性以外,还应着重估量他对新的和较好的思想范围的可接受性与他接受它们的时机。”因此,教育目的的三个部分是可以合并起来的。赫尔巴特把多方面兴趣、道德、个性联合起来作为培养目标,反映了资本主义政治和经济发展对教育的需要,具有历史进步意义。即使在今天对我们也不无启迪作用。 笔者认为在理解赫尔巴特的儿童管理思想时,应该同他的培养儿童个性的教育起点联系起来,且不可以点带

2019年java学习心得总结

2019年java学习心得总结 大学生java学习心得总结要怎样写?以下是提供的java学习心得总结范文参考阅读。 学习java的心得总结【1】 学习任何语言(包括英语),基础一定要打好,没有学会走路跑步不可能快吧,学习java的心得体会。 所以学习JAVA一定要先把JAVA的几个基本组成元素学好。 以下是我总结出来的学习顺序和注意事项: 1、数据类型JAVA是一种强类型语言,各种类型不会自动转换,使用前必须先定义。 2、方法方法相当于定义一个"宏"、一个"函数",方法的定义格式为: "说明符修饰符返回值方法名(参数){方法体}。"

在学习方法的时候要注意"说明符、"修饰符"、"返回值"这三样东西。 我们在调用JAVA的自带的"类"里面的"方法"的时候,我们一开始是不用看懂这些方法里面写什么(当然,你能看懂是最好)。 我们只要知道,使用了这个方法后,"返回值"的"类型"说明 3、类在JAVA中最经常听到词,也是最麻烦的东西,类的定义格式为: 说明符class类名extends超类名implements接口名{主体} 4、变量常量JAVA的常量名一般用全大写字母表示,并且为了节省内存,一般定义为静态(JAVA程序中的名字我们经常有个默认的规则,类名所有单词第一个字母大写,方法名第二个单词开始第一个字母大写,变量名小写,这样我们一看程序就非常清楚了,从小养成良好的习惯嘛,呵呵),变量的定义格式为: "修饰符数据类型变量名"

变量在类中定义(不在方法体中的部分称为域)和在方法体中定义是不同的(在方法体中定义不需要修饰符)。 学习变量的时候要注意两个特殊的东西"this"和"super"。 同时我们就要学习什么叫"覆盖"、"重载"。 5、控制流所有的编程语言的控制语句无非就是几个ifelseforwhiledoswitch。 6、接口:一个抽象的东西,接口可以多继承,解决了类只能单继承的问题。 接口的定义格式为: 说明符interface接口名{主体}, 接口内的方法都是没有主体的,只有常量或变量。 当类使用接口的时候,一定要"覆盖"接口的方法。

相关文档
最新文档