Java语言基础、学习笔记

阅读:487 2019-03-19 14:43:01 来源:新网

第一、二章:

一、java开发入门

1.①下载压缩包,②将解压文件粘贴到新建项目的根,③右键构建路径,添加到新的路径。

2.加载游戏背景图,参数是图片文件的全名(包含后缀名)。图片放到src的images包

3.音乐必须放在src的sounds文件夹下,只支持mp3格式文件

5.false表示只播放一次,true表示一直重复播放

6.①注意各处的大小写,②注意数据类型(字符串用双引号[英])

二、变量和数据类型

ⅰ、变量

1.程序由指令和数据组成。

2.变量定义不能“重名”,也就是不能重复“定义”。

3.在一定范围内,“变量”可以重复使用,但不可以重复定义。

4.变量指向新的数据只会影响之后指令的执行效果。

5.保留字:goto、const。(无意义)

ⅱ、标识符

1.标识符是用来给类、方法、变量等命名用的。

命名规则:1)由字母、中文(不推荐)、数字、下划线_、$组成;2)不能以数字开头;3)不能是关键字。

2.注意:大小写如:demo和demo

3.驼峰命名法:每个单词第一个字母大写,例:ageofbaby

4.潜规则”:类名:大写开头;变量名、方法名:小写开头。

ⅲ、变量类型、初始化

1.定义一个变量的格式:变量类型变量名=初始值;

2.局部变量使用前必须赋给初值。声明时赋值或者使用前赋值都可以

3.整数常量默认是int类型,小数常量默认是double类型。

选用数据类型的时候在考虑到数据的可能范围之后,选择最小范围的类型,这样节省资源。

ⅳ、类型转换

1.byteb=3;inti=b;//隐式类型转换

其实并没有把这个东西从这种类型"转换"成另一种类型,它只是根据

原来的内容创建一个新东西。

另:byteb=(byte)i;//显式类型转换

2.不能从double转换为float。小数默认是double

3.inti2=(int)d1;//显式类型转换,会丢失小数部分

4.大范围”=“小范围”:隐式转换

“小范围”=“大范围”:显式转换,编译器担保不出事

都是整数参与乘除运算,结果还是整数。整数常量参与乘除计算一般加f声明为小数类型,避免精度损失。

5.int转换为string:integer.tostring(i);string转换为int:integer.parseint("33")。显式类型转换仅限整数、小数类

型之内。

总结:①大范围=》小范围隐式转换小范围=》大范围显式转换

②注释:要显示一个,前面加一个即可;

要显示两个(即\),前面加两个\,而两个分开的(即),须在各个前加\;

要显示三个以上(即……),在各个前面加一个即可。

ⅴ、赋值运算符

1.基本数据类型是复制传递

2.通过中间变量来交换两个int变量的值。

第三章、游戏引擎

1、网页、swing、android、游戏引擎等几乎所有图形环境中,都是以屏幕左上角为原点坐标,x向右为正向,y向下为正向。

像素:图形内容都是由一个个的像素点组成的。

2、imgname为初始显示图片的文件名(必须放在src的images包下)。也可以调用voidcreateimage(intnum)创建一个什么都不显示的图片。

3、比较运算:①借助中间变量temp;②运算法

4、repeat表示是播放一次,还是重复播放。playspriteanimate是启动动画之后就结束,不会等动画播完。

5、dimensiongetspritesize(intspritenum)获得精灵的尺寸

6、生成精灵、网址:http://www.spriters-resource.com

剪切工具:spritesheets(需要.netframework)。

生成的图片必须是png格式的。

7、程序打包:①把bin和两个jar拷贝到单独的文件夹下;

②创建一个.bat文件,内容是startjrebinjavaw.exe-cp.bin-djava.ext.dirs=.main1。main1代表入口类,如果有报名则要写全名。

③压缩一下,发给对方,解压双击“bat”文件即可

第四章、逻辑运算符和if语句

1、苦记优先级表,不如直接用括号区别优先级,提高代码可读性。

2、短路运算:对于&&,一旦遇到左边的为false,那么结果一定是false了

对于||,一旦遇到左边的为true,那么结果一定是true了

因此就不计算右边的表达式了。

另:非运算(!),单目运算,没有短路运算

第五章、if和switch语句

1、if语句若只有一行代码,去掉大括号虽然可行,但不符合代码规范,所以不建议去掉大括号

2、switch只能进行离散值的判断,不能进行范围的判断;switch只能进行常量的比较,不能进行变量的比较

3、else可以不用最后的else,建议加上,更加严谨

4、如果匹配了上面的一个条件,那么即使复合下面的elseif条件,elseif也不会执行“先来后到”

5、三元运算符能够实现的,基本if都能实现;if能实现的,三元运算符不见得能够实现。所以基本是“简单的判断然后根据判断的boolean结果进行简单的赋值”才使用三元运算符

6、表达式可以是byte、short、int、char类型。(*)jdk5以后还可以是枚举类型,jdk7以后还可以是string类型。

7、break意味着switch的结束。default相当于if的else,当所有case都不匹配的时候,执行default

8、多个switch条件合并的问题:当多个case条件的代码一样的情况下,可以合并,最后加一个break;

9、①case语句不能是判断条件表达式,也不能是变量,必须得是常量

②不能有重复的case常量,但if可以有

③每条case语句后必须有一个break,但default后的可以省略

第六章、for循环

1、for(初始化;是否继续循环判断;一次循环后执行的)这三部分都可以省略,第一部分省略就没有初始化,第二部分省略则默认为true,第三部分则执行后不执行什么。

2、循环嵌套层数可以更多,但是建议不要超过两层。

3、break和continue可以用到for、while、dowhile这些循环语句中。区别是break是终止整个循环,continue是终止当次循环

4、空格弹跳:这种“一次性触发”的动作最好用后面的“事件驱动”,否则实现起来很麻烦,getpressedkeycode()只适合于“连续动作”

5、注意变量的范围(全局还是局部),不同范围起的作用不同,甚至易引起错误。

第七章、while、数组

1、对于int、double、float等数组,没有赋值的元素被初始化为0;对于string、integer等引用类型初始化为null。

2、不能动态增加数组的大小,要用linkedlist、arraylist等来增加

第八、九、十

ⅰ、二维数组:

①可以为不定长数组

②交换数组元素:第i个和第length-i-1个交换

ⅱ、方法:

1、方法就是一堆可以复用的代码段。方法执行过程中无法确定的数据以参数形式传递过来;方法的执行结果以返回值进行返回。

2、方法的声明时参数的名字和调用时候变量名字没有关系,调用的时候甚至可以不传变量

3、方法中的局部变量不能被调用的方法访问,如果真要访问只能通过参数传值,并且只是相当于变量赋值,方法内部对参数的赋值不会影响调用者。

ⅲ、重载(overload):①在同一个类中,允许存在一个以上的同名方法,只要其参数个数或者参数类型不同即可。返回值是否一样无关和参数名是否一样无关。

②方法重载可以实现“方法参数默认值的效果”

③可变参数前面还可以有其他参数,只要保证可变参数是最后一个就可以(只能有一个可变长度参数)

第十一章、面向对象基础

1、面向对象不是替代面向过程的,宏观是面向对象,微观仍然是面向过程

2、一个java文件中只能定义一个public的class,且文件名一般和public类一样。

3、new出的每个对象都是一个单独的实例,两个对象之间的成员变量是独立的两份。

4、局部变量必须初始化,成员变量声明时默认初始化,基本数值类型默认初始值为0、false,string等非基本类型初始化为null。

5、当成员变量和局部变量(函数参数也可以看做局部变量)重名的时候,被看做局部变量,因此为了避免混乱,建议访问类成员变量的时候加上“this.”,在类内部this代表当前对象。this.也可以调用当前类的成员方法。

6、栈内存(成员变量):自动释放

堆内存(局部变量):不会自动释放(system.gc回收)

7、newperson().sayhello();创建一个匿名对象,然后调用。

8、public成员可以被类内部或者外部访问,private成员只能被类内部访问(通过set、get方法访问)。这样可以保护不希望外接调用的内部成员(member,包含字段field/变量、方法)不被外界访问。封装数据、暴露行为。

9、构造函数是创建类对象,并且在创建完成前对类进行初始化的特殊函数。如果定义类时没有声明构造函数,默认会给出一个无参构造函数,如果定义了任意一个构造函数,将不会提供默认的无参构造函数。

10、①方法名必须和类名一致②没有返回值类型

11、javabean的规则:

1)必须有无参构造函数;

2)字段不能是public;

3)类的字段必须通过get和set方法来访问。set***、get***。只有get没有set则是“只读”

4)boolean类型属性名避免使用“is”开头的名称

12、包(package):①通过package定义在页面最顶部;避免类名重复的问题。

②在磁盘上的保存路径和package一致,可以单级、可以多级。

③包名小写

④“公司域名反着写.产品名.模块名”:com.rupeng.crm.user、com.sun.media.sound

13、静态static:

①static变量不需要new就可以直接通过类名调用。static变量是共享一块儿内存空间,非static变量则是各对象隔离的。

②static方法中无法使用this关键字,因为static独立于对象存在,不是任何人的唯一。

③static成员中只能访问static成员,不能直接访问非static成员。非static成员可以访问static成员。

④静态成员只会初始化一次。

14、单例模式:

①类在系统中只能有一个对象

②构造函数声明为private,这样避免外界访问

第十二章、面向对象深入

1、枚举:限定一个数据的可选值范围,比如“方向”。

2、枚举的原理:构造函数设置为private,把几个对象设置为publicstaticfina实例。

3、类的静态代码块:静态代码块在类第一次被使用的时候执行一次,在构造函数执行之前执行。只要一旦开始“接触一个类”,静态成员、static代码块就会被执行。

4、继承(inherit):①java中一个类可以“继承”自其他类。

②子类会从父类继承所有非private成员。子类还可以有子类。

③java中一个类只能有一个父类(单继承),如果没指定父类,则java内置的object为父类。

5、继承中的构造函数调用顺序:①子类的构造方法默认都去访问了父类的无参构造方法:在子类中的构造方法中都有一行默认语句:super()

②先执行父类的构造函数把父类初始化完成,再初始化子类的。

③可以通过super(参数)去访问父类中的有参构造函数。可以通过this(参数...)去访问本类中的其他构造函数。

④如果父类没有无参构造函数,那么子类必须显式调用父类的其他的构造函数。

6、public/private/protected:

①private成员无法被子类访问,子类只能通过父类的非private方法“间接”访问父类的private成员。这样保证了父类private成员的安全性。

②继承是“模子”的集成,数据不会继承。

③protected成员只能被自己以及子类(直接或者间接)以及兄弟(同package包中)访问,无法被“外姓人”访问。

另:default(什么都不写):同一个package包中可以访问。

第十三章、多态

1、多态:父类和子类中的方法的参数个数和类型都相同,只是实现体不同,父类(基类)类型变量指向子类类型对象,并调用子类类型对象的方法进行实现的现象。

另:①父类类型的变量可以指向子类的对象,但子类类型的变量不可以指向父类。

②可以调用哪些方法由变量的类型决定

2、类型转换:

()类型转换可以把“以父类类型角度观察的对象的实例”重新以“子类类型角度观察”。(显式类型转换/强制类型转换)如:chinesezgr5=(chinese)dqr1;(dqr1是父类类型)

3在父类方法中调用虚方法,指向的是子类对象,执行的也是子类对象的方法

4、如果父类中的某些方法不希望被子类override,比如kill,那么标记为final即可。

好处:①安全,可以保证父类定义的行为的执行(必须“被杀死”);

②效率高,避免了查询虚方法表(*)。

另:如果某些类不希望被继承,类也可以声明为final。

final类的好处主要是安全。string类就是final

5.抽象类:ⅰ、①抽象方法没有方法体;②一旦类中定义了抽象方法,类必须被修饰为抽象;

③抽象类无法实例化(new)。

ⅱ、抽象类的抽象方法主要用来限制子类“必须实现这些抽象方法”;子类也可以不实现,那么子类也要是抽象类,由子类的子类……去实现。

6、调试:如果修改了类结构、加了方法、改了方法、改了签名等就要重启

第十四章、游戏引擎封装

1、虚方法定义“能干什么”,子类中的方法定义具体“干什么”。

2、publicgametext(){this("");//调用重载的构造函数}

3、gametext[]txts=newgametext[words.length];//只是new了一个大小为5的txts数组,并没有元素,元素需要另外赋值

4、for(gametexttext:txts){text.moveleft();}//增强for循环

5、增强for循环只适用于读取(使用),不能赋值

6、数组的每个元素的默认值,int=0,boolean=false,string=null,类数组的每个元素的默认值都是null

第十五章、匿名类和接口

1、匿名类格式:new类名(){};//类体

这样就是相当于声明了一个这类的子类,然后并且创建这个类的对象。注意:不是创建这个父类的对象。

2、system.out.println(d2.getclass());//d2指向的对象是test1$1(编译器自动生成的)类型

3、类中this指的是匿名内部类,如果要想指外部的对象,要用“类名.this”

4、接口:ⅰ、①是一种用来声明“能力”的类型,不提供具体实现

②不提供实现方法,连{}都不能有。

③接口无法实例化,只能被类“实现”(implements)

ⅱ、①既可以使用接口类型变量又可以使用类类型变量调用speak

②接口的意义是定义“做什么”,类定义“怎么做”

③接口中只能声明static成员变量,不能声明普通成员变量。因为static可以被外界用,一个没有实现代码的接口中声明普通成员变量没意义。而且必须要是public。

ⅲ、①接口中可以定义多个方法,也可以不定义任何方法(*标识接口)。

②接口只是“能力”不是“实现”,因此不能也必要定义构造函数。

③类只能有一个父类,类可以实现多个接口。

④接口可以继承其他接口:extends。接口也有多态、类型转换。

ⅳ、不能给values参数传递int[],但是可以传递integer[]

第十六章、补充知识

1、java中==就是用来比较是否指向同一个对象,如果要进行内容的比较,则需要提供equals方法或者实现comparable接口。

2、char其实也是一个数字

3、java字符串比较方法:使用string.compareto方法:compareto()的返回值是int,它是先比较对应字符的大小(asc||码顺序)①、如果字符串相等返回值0②、如果第一个字符和参数的第一个字符不等,结束比较,返回它们之间的差值(asc||码值)//第一个字符出结果了就不较后面的了(负值前字符串的值小于后字符串,正值前字符串大于后字符串)③、如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,依次类推。④、如果比较完一个,另一个字符串还剩一点,则返回this.length()-anotherstring.length()

4、在内存中创建一个字符串对象,内容是“abc”,把s1指向这个字符串对象

发现已经有了一个“abc”字符串对象了,因此把s2直接指向之前的“abc”

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服