java学习日志.docx

上传人:b****3 文档编号:11086650 上传时间:2023-05-29 格式:DOCX 页数:74 大小:114.44KB
下载 相关 举报
java学习日志.docx_第1页
第1页 / 共74页
java学习日志.docx_第2页
第2页 / 共74页
java学习日志.docx_第3页
第3页 / 共74页
java学习日志.docx_第4页
第4页 / 共74页
java学习日志.docx_第5页
第5页 / 共74页
java学习日志.docx_第6页
第6页 / 共74页
java学习日志.docx_第7页
第7页 / 共74页
java学习日志.docx_第8页
第8页 / 共74页
java学习日志.docx_第9页
第9页 / 共74页
java学习日志.docx_第10页
第10页 / 共74页
java学习日志.docx_第11页
第11页 / 共74页
java学习日志.docx_第12页
第12页 / 共74页
java学习日志.docx_第13页
第13页 / 共74页
java学习日志.docx_第14页
第14页 / 共74页
java学习日志.docx_第15页
第15页 / 共74页
java学习日志.docx_第16页
第16页 / 共74页
java学习日志.docx_第17页
第17页 / 共74页
java学习日志.docx_第18页
第18页 / 共74页
java学习日志.docx_第19页
第19页 / 共74页
java学习日志.docx_第20页
第20页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java学习日志.docx

《java学习日志.docx》由会员分享,可在线阅读,更多相关《java学习日志.docx(74页珍藏版)》请在冰点文库上搜索。

java学习日志.docx

java学习日志

编码:

GBKGB2312中文编码UTF-8Unicode国际标准编码

B/s:

浏览器/服务器c/s:

客户端/服务器SVN:

公司的一台服务器,将编好并测试好的代码上传以便分享

Doc命令

dir:

列出当前目录下的文件和文件夹

md:

创建目录

rd:

删除目录

cd:

进入指定目录

cd..:

退回到上一级目录

cd/:

退回到根目录

del:

删除文件

exit:

退出dos命令

查看环境变量:

setpath

Start:

新开doc窗口

java语言具有跨平台性:

不同的系统有不同的虚拟机

Java类库组织结构

JDK:

java开发工具包包括JRE+开发工具。

给java程序开发人员使用

JRE:

(javaRuntimeRnvironment)

Java运行环境包括java虚拟机、java程序核心类库。

给java程序的运行者使用

可执行工具:

javac.exe用来把java的源代码编译成class文件

java.exe运行class文件

javadoc.exe生成帮助文档打包文件

java虚拟机(JVM):

在不同的操作系统环境下虚拟出一个与平台无关的java运行环境,使java文件可以跨平台使用

java类库:

先人写好的公用代码API帮助文档

垃圾回收器(GC):

java开发人员只需要申请内存,不需要回收垃圾。

在java程序运行期间,不再使用的内存由GC自动回收释放。

配置环境变量:

配置path为C:

\ProgramFiles(x86)\Java\jdk1.6.0_11\bin;

配置环境变量技巧:

新建系统变量:

JAVA_HOMEC:

\ProgramFiles(x86)\Java\jdk1.6.0_11

配置path为:

%JAVA_HOME%\bin

当jdk目录改变时,改变JAVA_HOME中的目录即可。

关键字必须小写

注释:

//单行注释

/**/多行注释

Java特有注释/***/文档注释

Javadoc可以提取文档注释中的所有内容,生成说明书,供程序员自己看

单行注释和多行注释可以相互嵌套,

单行注释中可以嵌套单行注释

多行注释中不可以嵌套多行注释

小技巧:

用注释调试程序

若觉得某处有错误,可以用注释将其划掉,然后编译,再逐步缩小注释范围编译

注释不编译

编代码一定要写注释

编写代码规范:

例:

/*

需求:

练习一个helloworld程序

思路:

1.定义一个类,因为java程序都是以类的形式存在的,类的形式其实就是一个字节码文件

2.定义一个主函数,为了让该类可以独立运行

3.在控制台上输出helloworld语句

步骤:

1.用class关键字来完成类的定义。

2.主函数java虚拟机认识

3.使用输出语句输出

*/

ClassDemo{

//定义一个主函数,为保证程序的独立运行

Publiacstaticvoidmain(String[]args){

System.out.println(“helloworld”);//这是输出语句,用于将括号中的数据打印在控制台上,ln可以在数据的结尾处换行

}

}

变量的声明和赋值:

变量类型变量名;//声明变量

变量名=值;//对变量进行赋值

变量类型变量名=值;//声明变量的同时对它赋值

数据类型:

基本数据类型:

1.整数型:

(默认为int型)

byte字节型:

占1字节(8位)有2的8次方种排列表示范围:

-128-127

short短整型:

占2字节(16位)-2的15次到2的15次-1

int整型:

占4字节(32位)

long长整型:

占8个字节(64位)

2.char字符型:

占2字节存放单个字符例:

charc='a';或charc='中';

3.浮点型:

(默认为double型)

float单精度浮点型:

占4字节存放数据范围比long大。

double双精度浮点型占8字节floatf=1234.5667f;(精确程度更高)

4.boolean布尔类型

引用数据类型:

类接口数组

字符串:

"a""sbbu223"Stringstr="这是字符串的值";

导入java文件:

fileimportGeneralExistingProjectsintoworkspace

数据类型之间的转换:

自动转换:

小范围到大范围

inta=10;

longlo=a;

强制转换:

大范围到小范围会出现数据溢出问题

longm=1223334;

ints=(int)m;

‘a’97

‘b’98‘A’65

‘1’49

字符串和任何数据使用+,+都是连接符,最终都会变成字符串。

标识符

1.只能由字母、数字、下划线、$符组成;

2.必须以字母、下划线、$开头;

3.不能是关键字;

4.严格区分大小写。

注:

下划线和$符用来连接两个名称

关键字

在java语言中已经被系统占用,有专门用途的字符串。

目前有48个,全部为小写。

运算符

%取余符号与被除数相同

转义字符:

通过\来转变后面字母或符号的含义

\n:

换行

\b:

退格。

相当于backspace键

\r:

按下回车键。

Windows系统,回车符是由\r\n表示的。

\t:

制表符,相当于tab键。

面试点

Shorts=4;

S=s+5;//会报错进行了两次运算因为s会被提升为int类型,运算后结果为int类型。

无法赋值给short类型。

需要进行强转。

S+=5;//不会报错进行了一次运算它在赋值时自动完成了强转操作。

^:

异或:

和或有点不一样。

^:

运算特点。

true^true=false;

true^false=true;

false^true=true;

false^false=false;

^异或的运算规律:

^符号的两边结果如果相同,结果是false。

两边的结果不同,结果是true。

面试题:

&&:

和&运算的结果是一样的。

但是运算过程有点小区别。

&:

无论左边的运算结果是什么,右边都参与运算。

&&:

当左边为false时,右边不参与运算的。

||:

和|运算的结果是一样的。

但是运算过程有点小区别。

|:

无论左边的运算结果是什么,右边都参与运算。

||:

当左边为true时,右边不参与运算的。

三目运算符:

获取两个数中的较大数

Inta;

Intb;

Intmax=a>b?

a:

b;

获取三个数中的较大数

Into,p,q;

Inttemp=o>p?

o:

p;

Intmax=q>temp?

q:

temp;

//最有效率的方式算出2乘以8等于几?

//System.out.println(2<<3);

对两个数互换:

开发时,使用第三方变量的形式

Inta,b;

Inttemp=a;

a=b;

b=temp;

/*

面试的时候用。

a=a^b;//a=3^5;

b=a^b;//b=(3^5)^5;b=3;

a=a^b;//a=(3^5)^3;a=5;

*/

System.out.println("a="+a+",b="+b);

*/

^是什么意思?

^表示异或相同时为假,不同时为真。

用十六进制

运算公式:

A^b^b=A

移位符:

m<

M>>n结果为m/2的n次幂

算术运算符:

+-*/(两个整数相除结果仍为整数)

++后缀:

inti=a++;即i=a;a=a+1;

前缀:

inti=++a;即a=a+1;i=a;

面试点:

Chara=’a’;

Charb=13;

Charc=a+b;//报错a提升为int类型

Chard=’a’+13;//int自动转换为char。

通过键盘输入:

Scannert=newScanner(System.in);

Intm=t.nextInt();

循环语句

Switch语句:

计算出表达式的值,与每个case后的值比较,若相等,就执行相应的代码段,否则执行defult后的代码段。

Switch(表达式或值(只接收byteshortintchar){

case值1:

代码段1;

break;

case值2:

代码段2;

break;

case值3:

代码段3;

break;

default:

代码段4:

break;

}

Switch和if语句的应用场景:

判断的具体数值不多,符合byteshortintchar类型时用switch语句,效率高。

判断区间,结果为boolean类型的语句的判断等用if语句

If语句的使用更广泛。

if和switch的应用:

if:

1,对具体的值进行判断。

2,对区间判断。

3,对运算结果是boolean类型的表达式进行判断。

switch:

1,对具体的值进行判断。

2,值的个数通常是固定的。

对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。

效率相对高一点。

Switchcase语句结束1,全部的case都执行完。

2.遇到break

Dowhile和while的区别:

Dowhile无论条件是否满足,循环体至少执行一次。

While先判断条件,后执行。

Dowhile先执行,后判断。

语句由;结束,所以dowhile中while的后边要加;号。

For循环

For(初始化表达式(只执行一次);布尔表达式;循环后的操作表达式){

循环体

}

While循环和for循环的区别:

(for和while完全可以互换)

若果循环语句的初始变量,只用来控制循环次数,则用for循环。

如果初始化变量想在后续的操作中使用则用while循环。

For循环中的初始变量作用域是for循环内部,循环执行开始,开辟内存,循环结束,立即销毁。

而while循环的初值还在内存中。

即变量有自己的作用域

无限循环的最简单表现形式:

for(;;){}

while(true){}

写循环语句时,要明确那些语句参与循环,那些不需要

System.out.println()换行

嵌套循环:

打印图形,外圈控制行数,内圈控制每一行元素的个数。

Break和continue

Break:

中断整个循环

Continue:

中断本个循环的本次执行,继续下一次循环

Continue和break语句单独存在时。

其后都不能再写任何语句。

面向对象

面向对象是一种思想,将功能封装进对象中,强调对象。

面向对象的三个特征:

封装、继承、多态。

以后开发:

找对象使用。

没有对象,就创建一个对象。

找对象,建对象,使用对象,维护对象之间的关系。

类和对象的关系:

类:

对现实生活中事物的抽象描述。

对象:

该类事物实际存在的个体。

类中包含:

成员变量、成员方法。

成员变量的调用:

对象.对象成员

成员变量:

堆内存中。

作用于整个类中

局部变量(localvariable):

栈内存中。

作用于方法或语句块中。

必须进行初始化。

匿名对象:

调用成员变量没有意义。

使用方式一:

当对象的方法只调用一次时,可以用匿名对象。

使用方式二:

可以将匿名对象作为实际参数进行传值。

newcar().get();

get(newcar());

compile:

编译

封装

定义:

隐藏对象的属性和实现细节,仅对外提供公共访问方式。

特点:

提高安全性;

提高复用性

通过权限修饰符将类的成员变量封装起来。

私有不是封装,仅仅是封装的一种体现

将age私有化后,类外的对象不能访问。

此时就需要在person类中提供age对应的访问方式。

即get和set方法。

对外提供访问方式,是因为可以在访问方式中加入判断语句,对访问的数据进行操作,提高代码的健壮性。

继承

如何使用继承体系中的功能:

先看父类体系的描述,因为父类中定义的是该体系的共性功能。

通过了解共性功能就知道该体系的基本功能。

在具体使用时要创建子类的对象。

1.可能父类不能创建对象

2.创建子类对象可以使用更多的功能,包括父类基本的功能和子类特有的功能。

总结:

查阅父类功能,创建子类对象使用功能。

若果子类中出现非私有的同名变量时,子类要访问本类中的同名变量时用this;

子类要访问父类中的同名变量时用super

通过继承,子类自动拥有父类所有的成员变量和成员方法

子类的引用可以访问继承的父类成员,父类的引用不能访问子类的独有成员

子类不能继承父类中用private修饰的成员

子类和父类不在同一个包时,不能继承父类中用private和默认的成员

子类实例化

1.子类所有构造方法默认访问父类无参构造方法。

而且这个过程是必须的。

父类会在其构造方法中对自己的属性进行赋值。

子类必须要继承这些变化。

2.子类构造方法中默认第一句是super();它用来调用父类中的无参构造方法。

若是父类中没有无参构造方法,则会报错,子类必须手动通过super()语句来指定要访问父类中的哪个构造函数。

3.若父类中没有定义无参构造方法,子类的构造方法就要用super表明要调用那个构造方法。

4.Super要写在构造函数的第一行,因为要先完成父类动作的初始化

5.Super和this都只能写在构造函数的第一行,所以他们不可能同时出现,

This存在时super不存在。

this调用本类的构造函数,但可以保证子类中肯定还有其它构造方法访问父类构造方法

&&&子类中至少有一个构造方法会访问子类的构造方法。

子类的构造方法

子类不能重写父类的构造方法,子类创建对象时,

先加载父类构造方法,在加载子类构造方法。

子类所有的构造方法第一行默认是super();语句。

如果父类中没有无参构造方法,子类构造方法需要手动的用super语句调用父类构造方法。

Object根类

Java代码执行顺序

创建对象时,先对成员变量进行默认初始化,然后再调用构造方法对父类变量初始化,然后子类自己的成员变量才能显示初始化

父类初始化完毕才能让子类自己的变量显现出来

方法

方法的定义:

修饰符返回值类型函数名(参数类型形参,参数类型形参){

执行语句;

Return返回值;

}

方法的特点:

1.定义方法可以将功能代码封装;

2.方法只有在调用时才会被执行,

3.提高了代码的复用性;

4.方法中只能调用方法,不能在方法内部定义方法。

5.无返回值时用void表示

定义方法需注意:

1.明确功能结果,即返回值

2.参数

构造方法:

在创建对象时调用

1.方法名和类名相同

2.无返回值

作用:

给成员变量赋值,对象的初始化

一个类中如果定义了构造方法,则默认的构造方法就没有了,否则一定存在一个默认的空参数构造方法。

构造方法和一般成员方法的区别:

1.创建对象时构造方法就已经被调用,对对象进行初始化。

而成员方法是在创建对象后需要该功能时专门调用

2.构造方法在创建对象时(一个对象),只被调用一次,成员方法在创建对象后可以调用多次

若是类中有了有参构造方法,系统不再自动生成无参构造方法。

则创建对象时需要传参,否则报错。

要想不传参,则需要再定义一个无参构造方法。

何时调用构造函数:

当某事物具备特性或者行为时

一个类中默认会有一个空参数构造方法,它的权限和所属类一致。

如果类被public修饰,则默认无参构造方法也被public修饰。

若类没有被public修饰,则默认的构造方法也没有被public修饰。

默认构造方法的权限是随着类的变化而变化的。

构造代码块:

格式:

{}

作用:

给对象进行初始化。

其中定义不同对象都具有的共性

创建对象时调用,优先于构造方法。

构造代码块和构造方法的区别:

构造代码块:

给所有对象统一进行初始化。

构造函数:

只给对应的对象初始化。

创建对象内存分析

1.主函数先执行,加载类文件

栈中:

mainp

2.执行类代码块,给类进行初始化

3.在堆内存中开辟空间创建对象分配内存地址

4.在堆内存中建立对象的特有属性,成员变量先默认初始化,初始化为该类型的0值。

5.成员变量显式初始化,

6.构造代码块初始化

7.调用构造方法初始化

8.将对象的内存地址赋值给栈内存中的引用变量p

方法放在方法区,调用方法是,方法暂时进入栈内存中,方法执行完后消失

方法的重写:

1.必须有继承

2.重写方法和被重写方法方法名相同,参数个数。

类型、顺序相同

3.返回类型协变或相同

注:

private修饰的方法不能被重写;

子类方法不能缩小父类方法的访问权限;

子类不能抛出比父类更多的异常;

非静态方法不能被静态方法重写;

静态方法不能被重写,但是静态变量和方法都可以被屏蔽。

方法的重载:

在同一个类中,方法的类名相同,参数,类型,个数,顺序至少有一个不同。

自己的想法:

在一个类中,成员变量先不赋值,系统分派内存先进行默认初始化。

然后通过构造方法对成员变量赋值。

创建对象时根据参数的类型,个数,顺序判断要调用哪个构造方法。

重载方法的调用:

根据参数的个数,类型、顺序不同来区分调用的是哪个方法。

方法的实参与形参类型相同或兼容、个数相同、顺序一致。

重写和重载的区别:

相同点:

方法名相同

不同点:

1.条件:

重写:

必须有继承,在子类中重写

重载:

在同一个类中

2.参数:

重写:

参数个数、类型、顺序相同

重载:

参数个数。

类型、顺序至少有一个不同

3.返回类型:

重写:

返回类型必须一致或协变

重载:

对返回类型无要求

4.次数:

父类的一个方法只能被一个子类重写一次

一个类中可以有一个方法的多个重载方法

5.权限和异常

重写:

对方法的访问权限不能缩小,对方法抛出的异常不能扩大

重载:

没有限制

局部变量和成员变量同名时。

屏蔽类中的成员变量。

子类中的成员变量和父类中的成员变量同名时,在子类范围内屏蔽父类的成员变量。

子类重写父类的方法后,子类范围内,屏蔽父类的成员方法。

子类某静态方法和父类方法同名时,子类范围内,屏蔽父类的方法。

 

This关键字:

This表示当前对象。

用在构造方法和成员方法中,只能放在第一行。

用于解决变量的命名冲突和不确定性问题。

1.当局部变量和成员变量同名时,局部变量屏蔽成员变量。

用this调用成员变量。

2.在构造方法中调用该类中的另一个构造方法,并传递要调用的构造方法所需的参数。

(java中,多个构造方法可能存在共同的代码)

例:

this();this(1,‘L’,48);

3.在一个成员方法内,访问当前实例的引用(作为方法的实参)

Print(this);不太明白

This的应用:

当定义类中功能时,该方法的内部用到调用该方法的对象,就用this来表示这个对象。

但凡功能内用到了本类对象,都用this表示。

Super关键字放在第一行的原因:

任何一个类在实例化时,必须先实例化父类

关于this关键字为何只能放在第一行?

自己的想法:

在构造方法中调用其它构造方法,本类中所有的构造方法中必须有一个会访问父类构造方法,然后又返回到了super上。

以下是老师解答:

假设说你在构造方法里面第一行没有写this()而是在第二行写的this()

那么第一行是不是自动的回去调用super?

然后第二行又去调用this(),那么调用的构造方法是不是还得再去调用super?

你必须在构造器的第一行放置super或者this构造方法,否则编译器会自动地放一个无参的super构造器的,其他的构造方法也可以调用super或者this,调用成一个递归的结构,最后的结果是父类的构造方法(可能有多级父类构造方法)始终在子类的构造器之前执行,递归的调用父类构造方法。

无法执行当前的类的构造器。

也就不能实例化任何对象,这个类就没作用了

 

static

Static:

关键字修饰成员变量和成员方法。

Static特点:

1.随着类的加载而加载,随着类的消失而消失,它的生命周期最长。

Stringname;成员变量实例变量随着对象的创建而存在,随着对象的消失而消失。

Staticcountry=“china”静态的成员变量类变量

2.静态变量优先于对象存在。

3.被satic修饰的内容不在堆内存中,类中所有对象共享。

4.可以直接用类名来调用。

成员变量和静态变量的区别:

1.存放位置:

类变量随着类的加载存在于方法区中

实例变量随着对象的建立而存在于堆内存中。

2.生命周期:

类变量生命周期最长,类的产生到消失

实例变量生命周期其次,对象的产生到消失。

Static使用注意事项:

1.静态方法只能访问静态成员(静态成员变量和静态成员方法)

非静态方法既可以访问静态也可以访问非静态(后来的可以访问先来的)

2.静态方法中不可以定义this,super关键字。

因为静态优先存在,所以静态方法中不可以出现this,super等代表对象的关键字。

3.主函数是静态的。

Static的优缺点:

优点:

对对象的共享数据进行单独存储,节约空间。

没必要每个对象中都存储一份。

可以直接被类名调用

缺点:

生命周期过长,访问出现局限性。

(静态虽好,只能访问静态)

Static使用的场景:

1.静态变量:

当对象中出现共享数据时,用static修饰。

对象中的特有数据定义成非静态。

2.静态方法:

当功能内部没有访问非静态数据(对象的特有数据),用static修饰

静态代码块:

Static{

}

特点:

随着类的加载而执行,只执行一次,并优先于主函数。

用于给类进行初始化。

用到了类中的内容时才会加载。

若定义过多的静态变量则太消耗内存。

对象消失后静态变量还在。

用static修饰的变量、常量、方法是定义在类中。

即这些成员是类相关的。

只属于某个类,被这个类的对象所共享。

(可以直接通过类名来调用,也可用对象来调用)而前面介绍的成员变量和成员方法是实例相关的。

(其使用必须要通过声明实例来完成)

静态变量只在类加载时初始化一次,初始化为该类型的零值;静态常量必须在定义时初始化,且只在类加载时初始化一次。

静态变量、静态常量不能定义在方法中。

静态方法中不能引用非静态成员变量、成员方法,(非静态可以调用静态的)

调用:

对象名.变量名对象名.方法名

类名.变量名类名.方法名

主函数

主函数的主要作用就是调用。

主函数:

是一个特殊的函数。

作为程序的入口,可以被jvm调用。

主函数的定义:

Public:

代表该函数的访问权限是最大的;

Static:

代表主函数随着类的加载已经存在了;

Void:

主函数没有具体的返回值;

Main:

不是关键字,但很特殊,可以被jvm识别;

(String【】args):

主函数的参数,参数是一个字符串类型的数组。

主函数是固定格式的,虚拟机识别。

Jvm在调用主函数时,传入的是长度为0的字符串类型数组,数组内没有元素。

Su

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2