Java学习笔记
2016-06-19 21:06
295 查看
**1.**Scanner in =new Scanner(System.in);
2.级联语句if-else-if语句else要对齐。
**3.**Math.random() 这个函数可以提供[0,1)之间的一个随机浮点数值。
4.循环的选择:
如果明确了循环次数,就用for循环
如果必须执行一次,用do-while 循环
其他情况用while循环
**5.**break 跳出循环
continue 跳过循环这一轮剩下的语句,进入下一轮
6. 定义数组变量:<类型>[]<名字>= new<类型>[元素个数];
int[] grades = new int[100]; [b]*********************[/b]
元素个数必须是整数
元素个数必须给出
元素个数可以是变量
new创建的数组会得到默认的零值
**7.**for-each 循环
for(<类型><变量>:<数组>)
{
}
对于数组当中的每一个元素,把每个元素取出来,作为这个类型的一个变量; 适用于数组的遍历。
**8.**Math.sqrt(x) 计算x的平方根
9.字符串
用加号(+)可以连接两个字符串
“hello”+”world”–>”helloworld”
当这个加号(+)的一边是字符串而另一边不是时,会将另一边表达为字符串然后再做连接; “age”+1+2–>”age12” 1+2+”age”–>”age12”
10. in.next();读入一个单词,单词的标志是空格
空格包括空格、tab和换行
in.nextLine();读入一整行
11. 比较字符串内容是否相等,用 .equals
12.比较字符串大小,用 .compareTo
13.获取字符串长度,用length()函数
14.访问String里的字符,用s.charAt(index)
15.输出子串,用 .substring()
16.寻找字符
17.不可变的String
18. s.startsWith(t)
19.在switch-case中使用字符串
**20.**Math
21.函数
22.函数传值
Java语言在调用函数时,永远只能传值给函数
23.修改编码格式
注意,代码中的汉字用的是UTF-8编码。请在Eclipse里将文件的编码格式改为UTF-8:
File –> Properties –> Resource (Text file encoding) ==> Other [UTF-8]
24.我建议你在看视频时,旁边放一张白纸,随时记下要点及你脑海中突然出现的火花。
如果可能的话,我建议你使用双屏幕,一边播放视频,随时暂停,另一边直接在Visual Studio、Eclipse或Android Studio中运行示例源码,观察程序运行过程。
看完视频之后,对照着你的笔记,重温一下学到的知识。把讲课实例重新运行一遍,读懂里面的代码,但这还不够。
你需要动手!
你不仅需要读懂示例代码,还应该尝试着动手修改代码,分析输出结果,从而深入理解知识。
接着,你需要学以致用,把学到的知识应用于类似的场景,解决类似的问题,这主要是通过完成布置的编程作业和练习完成的。
第三步,你需要学会知识迁移和组合创建,把多个知识组合起来,在新的场景中解决新问题,这主要是通过你主动进行的大大小小的开发实践完成的,这门课的结课设计,要求你完成一个完整的Windows桌面或Android应用,就能帮助你完成这一任务。
**25.**serialVersionUID 用来表明类的不同版本间的兼容性
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。
如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。
26. notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法。
void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。
两者的最大区别在于:
notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。
——————————–未完————————————-
2.级联语句if-else-if语句else要对齐。
eg: int f; if(x<0){ f=-1; }else if(x==0){ f=0; }else{ f=2*x; } System.out.println(f);
**3.**Math.random() 这个函数可以提供[0,1)之间的一个随机浮点数值。
4.循环的选择:
如果明确了循环次数,就用for循环
如果必须执行一次,用do-while 循环
其他情况用while循环
**5.**break 跳出循环
continue 跳过循环这一轮剩下的语句,进入下一轮
6. 定义数组变量:<类型>[]<名字>= new<类型>[元素个数];
int[] grades = new int[100]; [b]*********************[/b]
元素个数必须是整数
元素个数必须给出
元素个数可以是变量
new创建的数组会得到默认的零值
**7.**for-each 循环
for(<类型><变量>:<数组>)
{
}
对于数组当中的每一个元素,把每个元素取出来,作为这个类型的一个变量; 适用于数组的遍历。
package 循环; import java.util.Scanner; public class win { public static void main(String[] args) { Scanner in = new Scanner(System.in); int [] a = {1,2,3,4,5,6}; int [] b = {8,7,8,9,8,7}; int x; boolean s =false; for(int i=0;i<a.length;i++) { x=b[i]; for(int k :a) { if(k==x) { s=true; } } } System.out.println(s); } }
**8.**Math.sqrt(x) 计算x的平方根
9.字符串
String s = new String("a string");
创建了一个String的对象 用“a string”初始化这个对象 创建管理这个对象的变量s 让s来管理这个对象
用加号(+)可以连接两个字符串
“hello”+”world”–>”helloworld”
当这个加号(+)的一边是字符串而另一边不是时,会将另一边表达为字符串然后再做连接; “age”+1+2–>”age12” 1+2+”age”–>”age12”
10. in.next();读入一个单词,单词的标志是空格
空格包括空格、tab和换行
in.nextLine();读入一整行
11. 比较字符串内容是否相等,用 .equals
示例: String s ; s = in.next(); System.out.println(s); System.out.println(s.equals("bye"));
12.比较字符串大小,用 .compareTo
示例: String s1 = "abce" ; String s2 = "abcd" ; System.out.println(s1.compareTo(s2));
13.获取字符串长度,用length()函数
示例:String s; s.length(); //s.length=3
14.访问String里的字符,用s.charAt(index)
返回在index上的单个字符 index的范围是0到length()-1 第一个字符的index是0 不能用for-each循环来遍历字符串
15.输出子串,用 .substring()
示例:String s1 = "0123456789汉字" System.out.println(s1.substring(2)); //表示输出从第二个位置起到最后一个位置的字符,所以这里会输出23456789 System.out.println(s1.substring(i,j); //表示输出从第i个位置到j-1个位置的字符
16.寻找字符
s.indexOf(c) 得到字符c所在的位置,-1表示不存在。 s.indexOf(c,n) 从n号位置开始寻找c字符 s.indexOf(t) 找到字符串t所在的位置 从右边开始找 s.lastIndexOf(c) s.lastIndexOf(c,n) s.lastIndexOf(t)
17.不可变的String
所有的字符串都是不可变的,对它们的操作的结果都是制造新的字符串出来 适用的String操作: s.trim 删掉字符串两端的空格 s.replace(c1,c2) 把这个字符串中所有的c1换成c2 s.toLowerCase() 把字符串中所有的字符变成小写 s.toUpperCase() 把字符串中所有的字符变成大写 错误示例: String s ="abc"; System.out.println(s.toUpperCase()); 正确示例: String s1 ="abc"; String s2 =s1.toUpperCase(); System.out.println(s2);
18. s.startsWith(t)
s.endsWith(t) 帮你看出该字符串是不是以另外一个字符串开头(结尾)的
19.在switch-case中使用字符串
switch(s){ case"this"......break; case"that"......break; }
**20.**Math
abs 计算绝对值 pow 计算幂次(做浮点类型的计算) random 给一个随机数 round 做四舍五入 示例: System.out.println(Math.abs(-13)); //求绝对值 System.out.println(Math.pow(2, 3.2)); //求2的3.2次方 System.out.println(Math.round(3.1415926)); //对小数部分四舍五入 System.out.println(Math.random()); //给一个0到1之间的随机数
21.函数
函数定义: public static void sum(int a, int b) { int i; // int sum=0; // for(i=a;i<=b;i++) // { // 函数体 sum+=i; // } // } // System.out.println(a+"到"+b+"的和是"+sum) //public static 是函数头,void是返回类型, //sum是函数名,int a,int b;是参数表
22.函数传值
Java语言在调用函数时,永远只能传值给函数
eg:`package 数组; import java.util.Scanner; public class ssssss { public static void swap(int a, int b){ int t; t = a; a = b; b = t; System.out.println("转换后a="+a+";b="+b); } public static void main(String[] args) { int a = 5; int b = 6; swap(a,b); System.out.println("a="+a+";b="+b+";"); } }`
23.修改编码格式
注意,代码中的汉字用的是UTF-8编码。请在Eclipse里将文件的编码格式改为UTF-8:
File –> Properties –> Resource (Text file encoding) ==> Other [UTF-8]
24.我建议你在看视频时,旁边放一张白纸,随时记下要点及你脑海中突然出现的火花。
如果可能的话,我建议你使用双屏幕,一边播放视频,随时暂停,另一边直接在Visual Studio、Eclipse或Android Studio中运行示例源码,观察程序运行过程。
看完视频之后,对照着你的笔记,重温一下学到的知识。把讲课实例重新运行一遍,读懂里面的代码,但这还不够。
你需要动手!
你不仅需要读懂示例代码,还应该尝试着动手修改代码,分析输出结果,从而深入理解知识。
接着,你需要学以致用,把学到的知识应用于类似的场景,解决类似的问题,这主要是通过完成布置的编程作业和练习完成的。
第三步,你需要学会知识迁移和组合创建,把多个知识组合起来,在新的场景中解决新问题,这主要是通过你主动进行的大大小小的开发实践完成的,这门课的结课设计,要求你完成一个完整的Windows桌面或Android应用,就能帮助你完成这一任务。
**25.**serialVersionUID 用来表明类的不同版本间的兼容性
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。
如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。
26. notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法。
void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。
两者的最大区别在于:
notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。
——————————–未完————————————-
相关文章推荐
- jdk和jre的区别
- 百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int
- Activiti(二)流程实例
- Rxjava四步走到高级掌握
- Java的平台独立性
- JavaWeb之Filter(过滤器)
- Spring Session管理
- 《Java虚拟机原理图解(一)》JVM运行时数据区
- maven项目创建后main/java missing问题
- java课程总结
- 20145317彭垚 java课程总结
- 20145218 《Java程序设计》课程总结
- 20145214《Java程序设计》课程总结
- Java设计模式之单例设计模式学习
- JAVA多线程死锁
- Java设计模式-命令模式Command
- 《Java程序设计》学期总结
- 47. Spring Boot发送邮件【从零开始学Spring Boot】
- 20145227《Java程序设计》课程总结
- java_web提示错误