荐 Java自学笔记4
第十三章 静态方法
我们发现,方法有两类:
一种方法与类的关系不大。随便拷贝到别的类里也仍然可以运行,没有语法错误。而另一种方法与类关系密切。如果拷贝到别的类里就失去意义,有语法错误。
一、静态方法(全局方法):
1、特征:
1 该方法拷贝到哪个类里都行
2 该方法与这个类没有特别的关系。既没有访问this的属性,也没有访问this的方法,是一种特殊的方法。(该方法有没有访问this对象)
2、在Java语言里,静态方法用static修饰。
public class Example
{
// 判断n是否为质数; true,是质数; false, 不是质数
public static boolean isPrime( int n )
{
for(int i=2; i<n ; i++)
{
if( n % i == 0)
{
return false;
}
}
return true;
}
}
3、调用静态方法时,不需要先创建对象。直接用类名调用该方法。
public class HelloWorld
{
public static void main(String[] args)
{
boolean result = Example.isPrime( 123 );
}
}
注意:新手在第一年里尽量不要使用static,它会影响对“面向对象”的掌握 !!!
二、Math类
初学者最好请不要自己使用 static !但是别人定义好的静态方法,我们是要会使用的。而Math类有很多数据计算相关的静态方法,和String类似,Math也是Java语言自带的类
1、Math类的部分静态方法
abs(a) : 求a的绝对值
pow(a,b) : 求a的b次幂
sqrt (a) : 求a的平方根
round(a): 四舍五入
sin/cos/tan : 正弦, 余弦, 正切
2、我们以已知直角三角形的2条直接边a和b,求斜边长度为例来演示具体用法:
double a = 3;
double b = 4;
double c = Math.sqrt( a * a + b*b );
System.out.println("结果: " + c);
其中,Math.sqrt() 就是一个静态方法,直接调用这个方法,即不需要先new一个Math对象。
如果写成下面这样的,反而是有问题的,
Math m = new Math();
double c = m.sqrt ( a *a + b * b );
这样写 Eclipse 会给你一个灯泡警告。
三、程序的入口
1、定义
入口 Entry of Program : 指程序运行的起点,只有main方法可以作为程序的入口。
2、用法
在运行 Java 程序时,需要有一个main() 方法
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello,World");
}
}
既然是static的,所以该方法独立于该类,可以放到别的类下。
3、main方法的形式是固定的,不能改变。
以下写法都不能作为程序入口:
public static void main() // 必须带String[]参数
public static int main(String[] args) // 返回值必须为int
public void main(String[] args) //必须是public static
4、写好一个类后,可以直接在该类里添加一个main方法,对该类的功能进行测试。
Java允许多个main方法,程序启动时需要指定哪一个main作为入口。在有man方法的Java类里,右键,可以看到 Run As | Java Application菜单。如果一个类里没有main方法,右键就看不到这个菜单
第十四章 常用工具类(干货满满!)
一、字符串
1. 字符串拼接
使用加号可以直接拼接字符串。
示例:
String s = “世界” + “你好”;
2、字符串长度(重点)
String s = "世界nihao";
int n = s.length();
注意:
中文字符和英文字符都只占1个字符
3. 空字符串:长度为0的字符串
String s = "";
int n = s.length();
注意:
空字符串和null是两回事。空字符串是一个正常的字符串对象,null不指向任何对象。
4. 子串
String s = "阿发nihao";
String sub = s.substring(1, 4); // 1,2,3, 不含
注意:
substring(beginIndex, endIndex) 不含endInde
5. 判断内容是否相同(重点)
String s1 = new String("nihao");
String s2 = new String("nihao");
if(s1.equals(s2))
{
System.out.println("相同");
}
注:
- 不能写成 if ( s1 == s2 ) {}
6. 比较大小:按字典序比较
例如: 一个班有30个学生,按字母顺序排序。
String s1 = "liming";
String s2 = "lilei";
if( s1.compareTo( s2 ) < 0)
System.out.println(s1 + "位于前面");
else
System.out.println(s2 + "位于前面");
注:忽略大小写的比较,用compareToIgnoreCase()
7. 格式化
String s = String.format("姓名:%s, 年龄: %d , 身高 :
%.2f", "老徐", 19, 1.75);
注:
String.format()是一个静态方法
格式化时:
%s 对应字符串
%d 对应整数
%.2f 表示显示2位小数
8. 查找 indexOf
如果有这个子串,则返回位置索引;否则返回-1
String s = "China is a great country";
int pos = s.indexOf("great");
if(pos <0)
{
System.out.println("没找到");
}
默认 indexOf() 从开头开始查找
int p = str.indexOf (“SH”);
实际上,也可以指定从第几个字符开始查找
int p = str.indexOf(“SH”, 8);
第2个参数从index=8位置往后查找
9. 前缀后缀
startsWith() : 判断前缀
endsWith(): 判断后缀
示例:
String filename = "test.mp4";
if( filename.endsWith("mp4") )
{
System.out.println("支持此视频格式!");
}
10、 截掉空白
例如
字符串s的左右的空白字符都会被清掉。但内部的字符不会被清掉。
trim()返回一个新的字符串: “你好 yes OK”
11、 分割
比例:
将一个以逗号分隔的字符串分成若干个String
String s ="小张, 小王, 小李";
String[] names = s.split(",");
for(int i=0; i<names.length; i++)
{
String name = names[i].trim();
System.out.println(name);
}
字符串被解析,split的返回值是一个String数组。
12、转义字符
思考:
怎么用println输出一个字符串:I love “Xiao Fang” , a nice girl.
是否直接写作:System.out.println(“I love “Xiao Fang” , a nice girl.”)?
可以吗?显然里面的双引号和外面的双引号是矛盾的。怎么办,我们如何把双引号打印出来?
显然,当字符串里包含双引号等特殊字符时,就要用特殊的办法,称为“转义”。
例如:
运行一下可以发现println能输出双引号了。
除此之外,还有换行符 \n 制表符 \t 反斜杠\ 等常见的转义手段。
例如:
System.out.println(“目录 C:\windows\system32”);
运行时输出:
二、包装类
1、基本类型与包装类型
- 包装类型 ( Wrapper Class)
- 将对应的基本类型封装在内,得到一个类
大概就是这种形式:
class Integer
{
private int value = 0;
… Getter / Setter / 其他方法 …
} - 在Java里面,每一个基本类型都对应一个包装类型
- long <=> Long
int <=> Integer
short <=> Short
byte <=> Byte
double <=> Double
float <=> Float
boolean <=> Boolean
2、基本类型 <=> 包装类型
- 基本类型和包装类型的转换:
- Integer a = new Integer(10);
int b = a.intValue(); - 也可以写得简洁一些(Java支持自动转换)
- Integer k = 123;
int m = k;
3、equals 和 == 的区别
① 辨析:
public static void main(String[] args)
{
Integer a = new Integer(12);
Integer b = new Integer(12);
if(a == b )
{
System.out.println("OK");
}
else
{
System.out.println("bad");
}
}
这段代码输出的结果是 OK 还是 bad 呢?
语法:equals 和 == 的区别
设 a,b 指向两个对象,a.equals(b) 说的是a,b的值相等 ( 内容相等 equal )
a == b 说的是a,b指向同一个对象 ( same object)
内容相等,但是对一应的对象并不一定一样
打个比方: 你今年18岁,隔壁小王也是18岁。则你和小王相等(equal),但不相同(==)
所以,上例中应改为:
public static void main(String[] args)
{
Integer a = new Integer(12);
Integer b = new Integer(12);
if( a.equals(b) )
{
System.out.println("OK");
}
else
{
System.out.println("bad");
}
}
name什么时候用 a == b 呢?
也是有的,如果需要比较a,b是否同一对象,则可以用 == 来判断。
三、随机数
1、Random类
Random类是JDK里自带的基本类。
java.util.Random
2、下面我们用一个例题来介绍如何使用Random可以生成随机数:
package my;
import java.util.Random; // 这一行import不能少!
public class HelloWorld
{
public static void main(String[] args)
{
Random rand = new Random();
for(int i=0; i< 3; i++)
{
int s = rand.nextInt(1000);
System.out.println("生成随机数: " + s);
}
}
}
四、字符
1、定义
字符 Character ,代表一个文字或符号。在 Java 语言里,用char类型表示字符。字符包括:中文、日文、韩文、希腊文、… 人类的所有文字和符号。
char c1 = ‘A’; // 英文字母
char c2 = ‘9’; // 数字
char c3 = ’ '; // 英文标点 (空格)
char c4 = ‘徐’; // 中文
char c5 = ‘。’; // 中文标点(句号)
char c6 = ‘の’; // 日文
char c7 = ‘며’ ; // 韩文
char c8 = ‘β’; // 希腊字母
2、字符变量的写法
(1) 只能表示一个字符
(2) 用英文单引号括号来
3、字符编码
每个字符都对应一个数字,称为字符编码
例如,
char c = ‘A’;
int n = c;
System.out.println("编码为: " + n);
常见的有: 'A’为65 , 'B’为66 … 'a’为97, 'b’为98…
‘0’ 为48, ‘1’ 为49 … ’ '为32(空格) …
其中,把 0-128 之间的称为 ASCII码 ( 仅英文、数字、英文标点符号等) , 对应键盘上的按键。
4、字符与字符串
字符串,就是一串字符
(1)字符串与字符之间的转换
-
转换 String => char
String str = “sjnihao世界你好”;
char ch = str.charAt(8); // 下标从0开始计数
char[] chs = str.toCharArray(); -
转换 char => String
char[] chs = {‘世’, ‘界’, ‘你’, ‘好’};
String str = new String(chs, 1,3);
str += ‘的’;
(2)在字符串字符中查找字符
String str = "sjnihao世界你好";
int p = str.indexOf('发');
System.out.println("位置: " + p);
五、关于equals
一、equals :用于比较a,b的内容是否相等
Integer a = new Integer(10);
Integer b = new Integer(10);
if(a.equals( b ))
{
System.out.println("相等");
}
else
{
System.out.println("不等");
}
二、 ==:用于比较a,b 是否同一个对象
Integer a = new Integer(18);
Integer b = a;
if( a == b)
{
System.out.println("a,b 是同一个对象");
}
else
{
System.out.println("a,b 是两个不同的对象");
}
在String, Integer等对象的比较时,记得使用equals!!!
本文地址:https://blog.csdn.net/qq_45952745/article/details/107153731