一切之始-Hello World
package com.sdut;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
从Hello World看Java
第一行package,包名以及所在包的直接详细路径。
public 访问权限修饰符
static 功能修饰符
void 返回类型
Java编写结构概述
类的结构:
class 类名 {
类体
}
一个Java文件中只有一个public修饰的类,而且public修饰的类名必须与文件名一致。
方法的结构 :
方法的修饰符 方法的返回类型 方法名称 (参数列表) {
方法体
}
补充:方法的修饰符有两种,一种是以public为代表的访问修饰符,另一种是以static为代表的功能修饰符
,当然,一个方法不一定同时拥有两个修饰符。
main方法是Java程序的入口,所以一个Java文件有且只有一个main方法,但是一个Java工程可以有多个main方法,但是主入口只能有一个。当然在后续的JavaWeb,可以没有main方法,但是那只能是Java servlet
Java注释(eclipse注释)
两个连续的//,代表是单行注释。
一个/*代表的是多行注释。
/**代表的是文档注释,即一整个Java文档的注释。我们使用的一些方法以及类鼠标放上去都会出现一些关于它们的注解,这就是JavaDoc(文档注释)
Java中的一些命名规则
标识符(类名、方法名、变量名)的命名:包含有字母数字_$,数字不能开头。不能用关键字命名。
例如:int a1 = 13; interesting testHelloWorld = 123;(小驼峰命名法)
其他的命名跟变量的命名规则相似,只是类名为大驼峰命名法
ps:标识符是大小写敏感的。
public class HelloWorld {
}
(大驼峰命名法)
基本数据类型(八种)
类型 | 定义变量 | 所占内存大小 | 对应的引用类型 | 取值范围 | 默认值 | |
---|---|---|---|---|---|---|
字节型 | byte | byte b1 = 1b/B; | 4btit 1byte | Byte | [-27,27-1] | (byte)0 |
短整型 | short | short s1 = 1s/S; | 8bit 2byte | Short | [-215,215-1] | (short)0 |
整型 | int | int i1 = 12; | 16bit 4byte | Integer | 有符号int[-231,231-1],无符号int[0,2^31-1] | 0 |
长整型 | long | long l1 = 123l/L; | 32bit 8byte | Long | [-263,263-1] | 0L |
单精度浮点型 | float | float f1 = 1.1f/F; | 16bit 4byte | Float | [1.401298e-45,3.402823e+38] | 0.0f |
双精度浮点型 | double | double d1 = 1.1d/D; | 32bit 8byte | Double | [4.9000000e-324,1.797693e+308] | 0.0d |
字符型 | char | char c1 = ‘a’; | 8bit 2byte | Character | [\u0000,\uFFFF]或者[0,65535] | \u000 |
布尔型 | boolean | boolean b1 = false; | / | Boolean | true或false | false |
补充:double类型的数据在定义赋值时可以不用书写d,因为他是浮点型默认变量类型。boolean类型的变量只有两种变量值即为true或false。
除基本数据类型之外的都为引用类型,而引用类型的默认值都为NULL(空)。
ps:字符类型的需要用单引号包裹,而字符串类型,需要用双引号包裹。
四个整型的基本数据类型都会有进制之间的区别,前缀0为8进制,前缀0x为十六进制。
类型之间的强制转换与自动转换
自动转换,类型之间的自动转换发生在,当精度小的往精度高的转换时。
强制类型转换,是需要我们代码手动书写转换,这种转换往往便随着精度丢失,精度丢失的规则是**向下对齐**
,即精度高的转换为精度低的,精度高的部分会被丢弃。
整型,常量,字符型数据是可以混合运算的,运算中会将变量的类型转换为同一类型再进行运算。
转换的优先级(从低到高):byte,short,char < int < long < flaot < double
.
ps:布尔类型的数据不能进行类型之间的转换。
基本数据类型与引用类型的一些小区别(慢慢补充)
基本数据类型:保存在栈的内存中的简单的数据,即这种值完全保存在内存中的一个位置。
引用数据类型:保存在栈内存中的引用名指向保存在堆中的对象,类中的一个指针。
Integer类型与Int类型
package com.sdut;
public class HelloWorld {
public static void main(String[] args) {
int i0 = 10;
int i1 = 10;
Integer i2 = 10;
Integer i3 = 10;
Integer i4 = new Integer(10);
Integer i5 = new Integer(10);
Integer i6 = 199;
Integer i7 = 199;
System.out.println(i0 == i1);
System.out.println(i0 == i2);
System.out.println(i2 == i3);
System.out.println(i3 == i4);
System.out.println(i4 == i5);
System.out.println(i6 == i7);
}
}
输出结果:
true
true
true
false
false
false
Integer拥有一个静态内部类,IntegerCache。里面有一个cache[],即为Integer常量池,常量池的范围[-128,127]。
最后一个位置为false,因为超出了cache常量池,所以,产生了两个不同的对象,存放的地址不同。
i2 与 i3 为true,因为两个的值再cache常量池内,所以两个均为cache常量池产生的对象,即为一个对象,所以存放地址相同。
i4 与 i5 因为是人为的在堆中开辟两个空间来存放10,所以每一个都产生了一个对象,所以地址不一样。
浅说堆栈
Java含有两种内存,可以说把内存分为两种:堆内存与栈内存
Java中的堆栈是不可以手动设置的,Java自动管理堆栈。
栈的优势是存取速度较快,缺点是存取大小与存在时间必须是确定的。
堆的优势是动态分配内存大小,Java拥有垃圾处理器,所以生存周期也可以不是确定的。缺点是动态存取内存,存取速度较慢。
基本数据类型都是存放在栈内存中即,在栈中开辟内存空间存放变量与值,程序结束或者所在模块结束,内存释放。
引用数据类型,或者通俗的说需要new的数据类型,会在栈中开辟内存空间,存放变量,而会在堆中开辟空间存放实体值,栈中变量存取的是内存地址用来指向堆中的实体值。当栈中的变量随着程序结束消失或者认为的不让它指向堆中的实体值时,实体值会被JVM垃圾回收机制回收。
堆栈的各自的特点
栈
函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配。
栈内存特点,数数据一执行完毕,变量会立即释放,节约内存空间。
栈内存中的数据,没有默认初始化值,需要手动设置。
堆
堆内存用来存放new创建的对象和数组。
堆内存中所有的实体都有内存地址值。
堆内存中的实体是用来封装数据的,这些数据都有默认初始化值。
堆内存中的实体不再被指向时,JVM启动垃圾回收机制,自动清除,这也是JAVA优于C++的表现之一(C++中需要程序员手动清除)。
方法及变量
变量的分类
成员变量(全局变量)
1.静态变量(static修饰)
2.实例变量(无static修饰)
局部变量
1.参数变量
2.循环变量
变量的作用范围
局部变量
方法执行时被创建,方法结束后被销毁,作用在方法或者说方法的{}范围内。
实例变量
对象创建时创建,对象销毁时销毁,在类的范围内有效。
静态变量
该类首次访问时创建,程序结束时销毁。该类的所有对象共用一个静态变量。
ps:public等访问修饰符 不能用于局部变量,可以用于成员变量。
默认值
静态变量:类使用时具有默认值
实例变量:类实例化时具有默认值
局部变量:局部变量没有默认值,所有的局部变量必须初始化之后才能够被使用。
方法的分类
成员方法
静态方法
实例方法
构造方法
主方法
ps:主方法为程序的入口,一般格式为
public class HelloWorld {
public static void main(String[] args) {
}
}
构造方法
当一个类的对象被创建时,构造方法用来初始化该对象。
构造方法的名字与类名一致,构造方法没有返回类型,方法体没有语句,但是可以重写构造方法。
没有定义构造方法时,会调用默认的构造方法。
Java运算符
算术运算符
名称 | 语句 | |
---|---|---|
加 | + | a+b |
减 | - | a-b |
乘 | * | a*b |
除 | / | a/b |
取余 | % | a%b |
自增 | ++ | a++或++a (a = a + 1) |
自减 | – | a–或--a (a = a - 1) |
ps:取余及取余数,5%3 = 2;自增或自减,当运算符在变量前面,即先使用变量再进行自增或自减,反之,先自增或者自减再使用变量。
+还会用于字符串的拼接
代码
public class HelloWorld {
public static void main(String[] args) {
String a = "aa";
String b = "bb";
System.out.println(a + b);
}
}
输出结果为:aabb
赋值运算符
赋值运算符就一个等于号 =
即 a = b;
赋值运算符与算术运算符的结合
名称 | 语句 | |
---|---|---|
加等于 | += | a += b; (a = a + b;) |
减等于 | -= | a -= b; (a = a - b;) |
乘等于 | *= | a *= b; (a = a * b;) |
除等于 | /= | a /= b; (a = a / b;) |
取余等于 | %= | a %= b; (a = a % b;) |
比较运算符
名称 | 语句 | |
---|---|---|
判断是否相等 | == | a == b |
判断是否不等 | != | a != b |
判断是否大于 | > | a > b |
判断是否小于 | < | a < b |
判断是否大于等于 | >= | a >= b |
判断是否小于等于 | <= | a <= b |
逻辑运算符
名称 | 语句 | |
---|---|---|
逻辑与 | & | a & b |
逻辑或 | | | a | b |
逻辑非 | ! | a = !b |
逻辑异或 | ^ | a ^ b |
短路与 | && | a && b |
短路或 | || | a || b |
a | b | a & b | a | b | !a | a ^ b | a && b | a || b |
---|---|---|---|---|---|---|---|
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | true | false | false | false |
ps:短路与,短路或。短路的意思为当前面的或者说某一个语句已经能决定整个逻辑表达式的结果,后面的语句不再执行。
即 a > b && a ++
若a > b 为假,即整个语句必定为假,所以后面的a不会再执行递增运算
或a > b || a ++
若 a > b 为真,即整个语句必定为真,所以后面的a不会再执行递增运算
三目运算符(三目表达式)
c = a > b ? a : b;
即 判断a是否大于b,笼统的说,即为表达式是否成立,是否为真,若为真,则执行第一个语句并赋值给c,若为假,则执行第二个语句,并赋值给c。
位运算符
所有的位运算符都是建立在二进制运算的基础上
名称 | 语句 | |
---|---|---|
与 | & | a & b |
或 | | | a | b |
非 | ! | a = ! b |
异或 | ^ | a ^ b |
左移位 | << | a << 1 |
右移位 | >> | a >> 1 |
无符号右移 | >>> | a >>> 1 |
ps:如果a(二进制)等于 0000 0010,即十进制的2。b(二进制)等于 0000 0011,即十进制的3。
a & b = 0000 0010
a | b = 0000 0011
a ^ b = 0000 0001
a << 1 = 0000 0100
a >> 1 = 0000 0001
a >>> 1 = 0000 0001
运算符的优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | [ ] . ( ) (方法调用) | 从左向右 |
2 | ! ~ ++ – +(一元运算符)- (一元运算符) ( )(强制类型转换)new | 从右向左 |
3 | * / % | 从左向右 |
4 | + - | 从左向右 |
5 | << >> >>> | 从左向右 |
6 | < <= > >= instanceof | 从左向右 |
7 | == != | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?:(三目运算符) | 从右向左 |
14 | = += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向左 |