文档章节

Java语言基础、学习笔记

南风末
 南风末
发布于 2017/04/16 20:03
字数 4545
阅读 16
收藏 0

第一、二章:

 

一、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. byte b=3;int i=b;//隐式类型转换

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

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

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

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

3. int i2 = (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包下)。也可以调用void createImage(int num)创建一个什么都不显示的图片。

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

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

 

5、Dimension getSpriteSize(int spriteNum)  获得精灵的尺寸

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

剪切工具:SpriteSheets(需要.Net Framework)。

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

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

② 创建一个.bat文件,内容是 start jre\bin\javaw.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、如果匹配了上面的一个条件,那么即使复合下面的else if条件,else if也不会执行“先来后到”

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、do while这些循环语句中。区别是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、new Person().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,把几个对象设置为public static fina实例。

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、类型转换:

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

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

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

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

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

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

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

 

 

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

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

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

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

 

第十四章、游戏引擎封装

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

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

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

4、for(GameText text: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”

 

 

 

 

 

 

© 著作权归作者所有

南风末
粉丝 6
博文 228
码字总数 313035
作品 0
南昌
程序员
私信 提问
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
给大家分享一个JAVA技术大牛的课程笔记

目前,Java语言已经广泛应用于生活中的各个领域,无论是网络编程还是数据库编程,甚至是web开发都有Java语言的身影 很多小伙伴想学习java却布置从何学起,现在给大家分享一个JAVA大神课程笔记...

dadaxiaoxiao
2015/12/31
304
1
【有奖书评】JAVA 7来袭,还看 Java 你就OUT了

从1995年至今,Java已经超过15个年头,经过这些年的演进,Java已不仅是个程序语言,也代表了解决问题的平台(Platform),更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。若仅以程序语...

louise
2012/08/31
12.4K
123
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
java.lang 学习笔记

java.lang 提供java语言程序设计的基础类; 不用import; java 语言的核心; Object 类 java.lang 的根类,所有类的超类(父类) 基本类型 Boolean、Character、Byte 、Short、Integer、Lon...

hellation_
03/17
0
1

没有更多内容

加载失败,请刷新页面

加载更多

使用阿里云镜像安装kubernetes

参考阿里云镜像 https://opsx.alibaba.com/mirror?lang=zh-CN 系统: CentOS / RHEL / Fedora cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https......

北漂的我
12分钟前
0
0
【HAVENT原创】前端使用 jsrsasign 进行 RSA 加密、解密、签名、验签

最近因项目需求,需要配合 JAVA 后端返回的签名,在 H5 网页中做验签功能。网上搜了一下发现了 jsrsasign 满足需求,所以顺便研究了一下 jsrsasign 。 首先去官网下载压缩包,解压后只需要引...

HAVENT
16分钟前
0
0
SpringMVC常见面试题总结【概念】

什么是Spring MVC?介绍你对SpringMVC的理解。 springmvc是一个基于java实现了mvc设计模式的轻量级web框架,通过把model,view,controller分离,将web层进行解耦,把复杂的web应用分成几部分...

薛小二
23分钟前
0
0
ucos 中断,调度,互斥 分析

实际场景: 首先有个标志位 pps_flag,是一个全局变量。有两个地方会用到这个变量,一个是pps信号触发的外部中断,一个是ucos的任务。当pps信号触发外部中断的时候pps_flag被置为2,当任务里面...

青春无极限
37分钟前
1
0
spark streaming、flink和storm区别浅析

1. 介绍 这三个计算框架常常被拿来比较。从我的角度来看,三者的比较可以分为两类(mini-batches vs. streaming)。spark streaming属于微批量的伪流式准实时计算框架(spark本身属于批处理框架...

xiaomin0322
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部