java学习笔记
来源:互联网 发布:10.2怎么卸载软件 编辑:程序博客网 时间:2024/06/05 03:47
一:原生数据类型的使用陷阱
1. byte类型数据只能表示-128-127之间的256个整数。
2. public class Pitfall{
public static void main(String[] ags){
float a = 1.3;//编译有错,损失精度
System.out.println(a);
}
}
错误原因:在java中所有浮点类型默认是double类型。
如何将double类型的值赋给float类型的值:用强制类型转换。
float a=(float)1.3 float a=1.3f就ok。
3. public class Pitfall{
public static void main(String[] ags){
int a;
System.out.println(a);
}
}
编译有错,变量a尚未初始化。所以变量在使用前,必须赋值。
4. public class Pitfall{
public static void main(String[] ags){
a=1;
System.out.println(a);
}
}
编译有错,变量必须声明类型方可使用。
5. public class Pitfall{
public static void main(String[] ags){
int a=1;
int a=2;
System.out.println(a);
}
}
编译有错,变量不能重复定义。
6. public class Pitfall{
public static void main(String[] ags){
int a =1;
short b=a;
System.out.println(b);
}
}
编译有错,int类型的a赋给short类型的b,可能损失精度。需强转。
7. public class Pitfall{
public static void main(String[] ags){
short a =1;
int b = a;
System.out.println(b);
}
}
以上代码,编译没错。原因:可以将范围小的short类型变量赋给范围大的int类型变量,不会损失精度。
二:java运算符
1. 当有若干个变量类型参与运算时,其结果的类型是范围最大的那个变量类型。比如说,参与运算的变量类型有int,short,float,double,那么其结果的类型的是double。
2. 取模的规律:取模的结果符号永远与被除数(分子)的结果的相同。
Int a = 4;
Int b = -3;
Int c = a%b;
C的结果是1.
Int a = -4;
Int b = 3;
Int c = a%b;
C的结果是-1;
3. 逻辑与的短路特性:
public class LogicTest{
public static void main(String[] args){
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
boolean f = (a>b)&&((e=c)<d);
System.out.println(f);
System.out.println(e);
其结果f为假,e=5.
原因:逻辑与前操作数是假时,后面操作数就不执行了,这就发生了短路。
逻辑或的短路特性:当第一个操作数是真时,第二个的操作数就不执行,这就发生了短路。
4. 自增自减:
public class Pitfall{
public static void main(String[] ags){
int a =1;
int b = a++;
System.out.println(b);
System.out.println(a);
}
}
打印结果是 a=2,b=1;
public class Pitfall{
public static void main(String[] ags){
int a =1;
int b = ++a;
System.out.println(b);
System.out.println(a);
}
}
打印的结果是 a=2,b=2;
总结:int b = a++;其意思是先将a赋值给b,然后a再加1.
Int b = ++a;其意思是先将a加1,然后再将加1的结果赋值给b。
而a++,与++a,没区别,因为它们并没有涉及到赋值。
5. 三元运算符
Type d = a ? b : c;其中a为boolean表达式,当a为真时,d=b;当a为假时,d=c;
三:流程控制语句
1. if的三种表达形式:
if(布尔表达式){
待执行的代码}
If(布尔表达式){
待执行的代码}
else{
待执行的代码}
If(布尔表达式){
待执行的代码}
else if (布尔表达式){
待执行的代码}
else{
待执行的代码}
2. switch
switch(变量) { //其中变量类型只能为byte,short,int,char.
case 1:
待执行的代码;
break;
case 2:
待执行的代码;
break;
case 3:
待执行的代码;
break;
default:
待执行的代码;
break;
}
Break可有可无,但没有break逻辑将会错误,程序会一直运行而不判断下个case情况,直到碰到下个break,所以最好写上break。
3. 三种循环控制语句:
While(布尔表达式){
待执行的代码
}
Do{
待执行的代码
}while(布尔表达式);
For(变量初始化;条件判断;步进)
{
待执行的代码
}
四:面向对象编程
1. 类:是一个抽象概念,类中包括了数据和对数据的操作。
2. 面向对象的三大特性:继承(inheritance),封装(encapsulation),多态(polymorphism)。
3. 封装:类包含了数据和方法,将数据和方法放在类中就构成封装。
4. 如何定义类:
修饰符 class 类名{
// 类的属性和方法
}
5. 如何定义方法:
修饰符 返回值 方法名(参数1,参数2,参数3…){
//方法体
}
6. main方法是整个程序的入口,没有main方法程序就无法执行。
7. 方法的执行过程:首先定义方法,然后调用,最后返回调用方法的值。
8. 在方法的定义中,不能重复定义。方法调用,需要通过对象来调用。
9. 关于void返回值方法的两种实现方法:
1. Public void test(int a){
System.out.println(“hello”);
}
不适用return语句。
2. Public void test(int a){
If(a>10){
Return;
}
System.out.println(“welcome”);
使用return语句,但return后面不带任何变量,只跟着一个分号;
10. 关于方法应注意的问题:
1. 方法定义中,return的类型应该和方法头中的返回类型一致。
2. 方法调用中,实际参数和形式参数应保持一致(参数个数,类型)。
3. 方法定义中的返回类型应和接收方法者的返回类型一致。
11. 如何生成类对象
New 类名();
12. 命名约定:
类名:首字母大写,当类名由多个单词组成时,每个单词的首字母都要大写。如,Person,PersonTest.
方法名:当方法名是一个单词时,单词都小写。当方法名由多个单词组成时,由第二个单词的开始每个单词的首字母都大写。如;add(), addAndSubstract();
属性名:和方法名的一样。如 age,AgeOfPerson
13. 成员变量和局部变量的比较:
1. 成员变量和局部变量都得声明
2. 局部变量必须得初始化(赋值),而成员变量可以初始化也可以不初始化。如果没有赋初值,那么每个类型的成员变量会有一个默认值:
Byte, short, int, long 的默认值是0.
Float, double的默认值是0.0.
Char的默认值是’\u0000’
Boolean的默认值是flase.
14. 引用类型(reference type),是用在对象上的。一个对象可以被多个引用所指向,但在同一时刻,一个引用只能指向唯一一个对象。当一个对像被多个引用所指向时,不论哪一个引用改变对象的属性,其改变都会反映到其它引用中。
15. 如果一个类包含属性和方法,该类中的每个对象都有各自的属性,但无论多少个对象都共享同一个方法。
16. 方法参数传递总结:无论是原始数据类型还是引用数据类型,它们都是值传递。只不过,当原始数据类型传值后,各自没有影响,各自是独立的;当引用数据类型传值后,实际参数和形式参数指向的是同一份地址,二者联系紧密,改变其中任何一个都会影响彼此。
17. 构造方法:其作用:是完成为对象的属性初始化的工作。
特点:
1. 构造方法的名字必须与类名完全一致。
2. 构造方法方法头中不能出现void,没有返回值。
3. 在定义类时没有为类定义构造方法,那么java编译器会给该类自动生成一个不带参数且方法体为空的构造方法,该构造方法为默认的构造方法。
4. 当定义类时定义了构造方法,java编译器不会再给该类生成构造方法。
5. 调用构造方法不能显示的调用,构造方法是通过new()隐式的调用,并且会通过new括号中的参数调用相应的构造方法。
18. New()产生对象完成的三件事:
1. 在内存中开辟空间
2. 调用相应的构造方法
3. 将对象的地址返回。
- Java学习笔记--CSS笔记
- Java学习笔记001
- Java 学习笔记
- java 学习笔记
- Java学习笔记
- java 学习笔记
- java学习笔记
- java学习笔记
- java学习笔记-1
- java虚拟机学习笔记
- java虚拟机学习笔记
- java虚拟机学习笔记
- Java学习笔记1
- Java学习笔记2
- java学习笔记(1)
- java学习笔记#2
- java学习笔记1
- java 学习笔记
- poj 2289 二分
- 【服务器架构】简单实用的网游服务器架构
- D_db2 EXPLAIN分析SQL
- oracle sql 按某个字段分组然后从每组取出最大的一条纪录
- V会给客户解决了
- java学习笔记
- Linux 下svn配置
- Java动态缓存技术:WEB缓存应该如何应用
- V4L2应用层编程
- 【服务器架构】网游服务器数据访问架构模式
- 7.23_java学习_字符串
- 关于Ubuntu包的降级
- realloc函数引发的惨案
- [LeetCode] Longest Substring Without Repeating Characters