主类结构
Java是一个与面向对象关系很强的编程语言,java的应用程序就是由若干的类组成的
每个应用程序都必须包含一个main()方法,含有main方法的类称为主类
示例:定义一个类叫Frist,里面有一个main方法,所以这个类被定义为主类
public class Frist {
public static void main(String[] args){
System.out.println("hello");
}
}
main方法
main()方法是类体中的主方法。该方法从“{”号开始,至“}”号结束。public是权限修饰符,static是静态修饰符,void是返回值修饰符,Java程序中的main()方法必须声明为public static void。String[] args是一个字符串类型的数组,它是main()方法的参数。main()方法是程序开始执行的位置。
基本数据类型
整数
数据类型 | 内存空间 | 取值范围 |
---|---|---|
byte | 8位 | -128~127 |
short | 16位 | -32768~32767 |
int | 32位 | -2147483648~2147483647 |
long | 64位 | -9223372036854775808~9223372036854775807 |
整数的定义
int x
int x,y
int x = 012,y=123
对于long类型的定义,需要在数字后面加上L或l,表示数值为长整数
例如:
long num = 2147483650L
浮点类型
类型有:
- float
- double
定义方法就类似于整数
默认情况下都被看作double,如果要使用float类型的就要在小数后面加是F或f
字符类型
char型
用于存储单个字符,占用16位内存空间,定义字符型变量的时候,要用单引号标注'
,注意区别双引号"
,单引号是字符,双引号是字符串:'s'表示字符,"s"表示字符串
定义例如:
char x = 'a';
a在Unicode表中排序97,所以也可以这样写
char x = 97;
布尔类型
无非是true和false
变量和常量
声明变量
int age; //只是声明
char a='1'; //声明并赋值
申明常量
需要通过final关键字来进行限定
语法:
final 数据类型 常量名[=值]
例如:
final double PI = 3.1415926D; //声明double型常量PI并赋值
运算符
逻辑运算符
其他的没啥好说的,说一下逻辑运算符
逻辑运算符里面有&&和||,分别表示逻辑与和逻辑或
但是还有一种短路与:&
和 短路或:|
区别:
&&的判断逻辑是:第一个表达式如果是true,那就会去判断第二个是不是true,但是如果第一个表达式是false的话就不会走到第二个表达式了,也就不会执行第二个表达式(a++这样的就不会执行)
$的判断逻辑是:两个都会执行,如果都是true才返回true
或也是同理,||如果判断第一个就是true,那么就不会执行后面的表达式
三元运算符
语法
条件式?值1:值2
意思是如果前面的条件式为true,那么就返回值1,否则返回值2
数据类型转换
隐式类型转换
从低级到高级的类型转换,系统自己会自动执行
类型按精度排序:
byte<short<int<long<float<double
例如:
由于float比int高级,所以会自己进行类型转换,y的结果是50.0
int x = 50;
float y = x;
显式类型转换
语法:
(类型名)要转换的值
例如:
此时c的值为3
int a = (int)3.14
流程控制
else if
if…else就不多说
java支持else if(else和if用空格隔开)
if(){
...
}else if(){
...
}else{
}
switch
switch(表达式)
{
case 常量1:
...
break;
case 常量n:
...
break;
default:
...
break;
}
可以用break穿透,比如当表达式与多个值匹配的结果要有相同的结果,就可以把那几个放一起在最后加一个break,例如春季是3,4,5月,可以把case后常量为345的放一起在五月break一下
switch (5){
case 3:
System.out.println("春季");
case 4:
System.out.println("春季");
case 5:
System.out.println("春季");
break;
}
执行结果只有一个春季
while和for
和c一样,不多说
foreach语句
for语句的简化版,把遍历对象的值赋值给x,依次循环
for(元素变量x: 遍历对象obj){
引用了x的java语句
}
字符串
声明字符串
在java里,字符串必须在双引号里面"你好"
语法
String str;
创建字符串
java中将字符串当做对象来管理
- String(char a[]):用一个字符数组a创建String对象。
char a[] = {'g','o','o'};
String s = new String(a);
- String(char a[], int offset, int length)
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
结果是"uden"
- 引用字符串常量
String str1,str2;
str1 = "abc"
str2 = "abc"
这个时候str1和str2具有相同的实体,就类似于c语言中的地址指向同一个值
连接字符串
用+
连接字符串
字符串可以和其他的基本类型进行连接,其他的基本类型会被直接转化成字符串
获取字符串长度
Sring类的length()方法
str.length();
字符串查找
String类提供两种方法:indexOf()
和lastindexOf()
- indexOf(String s),返回首次出现的索引位置
str.indexOf(substr);
- lastindex(String s),返回字符串出现的最后索引
获取指定字符
使用charAt()可以将指定索引的字符返回
str.charAt(int index);
字符串操作
获取子字符串
截取从指定的索引值开始到结束
str.substring(int begin);
完整版
老规矩:左闭右开
str.substring(int begin,int end);
去除空格
忽略前后空格
str.trim();
字符串替换
str.replace(char old,char new);
字符串判断是否相等
字符串对象不能简单的用比较运算符==,比较运算符比较的是两字符串的地址是否相同,要使用equals()
函数和equalsIgnoreCase()
- equals()如果有相同的字符和长度,用这个比较
str1.equals(str2);
- equalsIgnoreCase()这个用于不区分大小写的
字符串分割
split()方法
根据sign分割,limit是匹配次数,如果是n则匹配n-1次,也可以理解成分成n段
str.split(String sign,int limit)
格式化字符串
str.format(String format,Object ...args)
正则表达式
- [^456]表示4,5,6之外的任何字符
- [a-r]:代表a-r的任意字符
- [a-zA-Z]:表示任意的字母
- [a-e[g-z]]:代表a~e或g~z中的任何一个字母
正则表达式可以用限定修饰符来限定元字符的出现次数,例如:A*
表示A可在字符串出现0次或多次
限定修饰符 | 意义 |
---|---|
? | 0次或1次 |
* | 0次或多次 |
+ | 一次或多次 |
{n} | 正好出现n次 |
{n,} | 至少出现n次 |
{n,m} | 出现n到m次 |