java对象和类
- 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
创建对象
Puppy myPuppy = new Puppy()
java基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
byte short int long float double char boolean
自动类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
强制类型转换
int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte
隐含强制类型转换
- 整数的默认类型是 int。
- 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
java变量类型
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。(括号内使用)
java修饰符
- 访问修饰符
- 非访问修饰符
访问控制修饰符
权限从大到小
- public : 对所有类可见。使用对象:类、接口、变量、方法
- default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
访问控制和继承
子类的权限要大于等于父类
- 父类中声明为 public 的方法在子类中也必须为 public。
- 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
- 父类中声明为 private 的方法,不能够被子类继承。
非访问修饰符
- static 修饰符,用来修饰类方法和类变量。
- final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
- abstract 修饰符,用来创建抽象类和抽象方法。
- synchronized 和 volatile 修饰符,主要用于线程的编程。
abstract 修饰符
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
抽象方法
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();。
synchronized 修饰符
synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。
volatile 修饰符
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。
transient 修饰符
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
java运算符
- 算术运算符
+ - * / ++ --
前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(a++,a--): 先进行表达式运算,再进行自增或者自减运算
- 关系运算符
== != > < >= <=
- 位运算符
& | ^ ~ << >> >>>
<< 按位左移运算符 c = a << 2 //即 c= a / 4
- 逻辑运算符
&& 与 || 或 !非
- 赋值运算符
+= *=
- 条件运算符(?:)
// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30
b = (a == 1) ? 20 : 30;
- instanceof运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
java循环
while循环
while( 布尔表达式 ) {
//循环内容
}
do while (至少执行一次)
do {
//代码语句
}while(布尔表达式);
for
for(初始化; 布尔表达式; 更新) {
//代码语句
}
Java 增强 for 循环
for(声明语句 : 表达式)
{
//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出(当前)最里层的循环,并且继续执行该循环下面的语句。
continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
java条件语句
if
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
if else
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
if…else if…else 语句
条件在3个以上 一般 使用 if
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
switch case
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选 default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
//语句
}
java number & math 类
序号 | 方法与描述 |
1 | xxxValue() 将 Number 对象转换为xxx数据类型的值并返回。 |
2 | compareTo() 将number对象与参数比较。 |
3 | equals() 判断number对象是否与参数相等。 |
4 | valueOf() 返回一个 Number 对象指定的内置数据类型 |
5 | toString() 以字符串形式返回值。 toString(int i): 返回表示指定 int 的 String 对象 |
6 | parseInt() 将字符串解析为int类型。Integer.parseInt(String s)😗* 返回用十进制参数表示的整数值。 |
7 | abs() 返回参数的绝对值。 |
8 | ceil() 返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。 |
9 | floor() 返回小于等于(<=)给定参数的最大整数 。 |
10 | rint() 返回与参数最接近的整数。返回类型为double。 |
11 | round() 它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 |
12 | min() 返回两个参数中的最小值。 |
13 | max() 返回两个参数中的最大值。 |
14 | exp() 返回自然数底数e的参数次方。 |
15 | log() 返回参数的自然数底数的对数值。 |
16 | pow() 返回第一个参数的第二个参数次方。 |
17 | sqrt() 求参数的算术平方根。 |
18 | sin() 求指定double类型参数的正弦值。 |
19 | cos() 求指定double类型参数的余弦值。 |
20 | tan() 求指定double类型参数的正切值。 |
21 | asin() 求指定double类型参数的反正弦值。 |
22 | acos() 求指定double类型参数的反余弦值。 |
23 | atan() 求指定double类型参数的反正切值。 |
24 | atan2() 将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。 |
25 | toDegrees() 将参数转化为角度。 |
26 | toRadians() 将角度转换为弧度。 |
27 | random() 返回一个随机数。 |
常用 int string 相互转换
int -> String
int i=12345;
String s="";
第一种方法:s=i+"";
第二种方法:s=String.valueOf(i);
String -> int
s="12345";
int i;
第一种方法:i=Integer.parseInt(s);
java String 类
获取长度
s.length()
格式化字符串
System.out.printf("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
"is %s", floatVar, intVar, stringVar);
String fs;
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
- char charAt(int index) 返回指定索引处的 char 值。
- boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。
- boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
- boolean equals(Object anObject) 将此字符串与指定的对象比较。
- boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
- int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
- int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
- nt indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
- int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
- int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
- String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
- String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
- [String] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
- [ String] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。
- [ char] toCharArray() 将此字符串转换为一个新的字符数组。
- String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
- String trim() 返回字符串的副本,忽略(删除)前导空白和尾部空白。
- contains(CharSequence chars) 判断是否包含指定的字符系列。
- isEmpty() 判断字符串是否为空。
StringBuffer 和 StringBuilder 类
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
StringBuilder
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLsoNyIa-1646883747413)(java基础总结.assets/2021-03-01-java-stringbuffer.svg)]
StringBuffer
在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
方法描述 | |
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将 |
5 | insert(int offset, String str) 将 |
6 | replace(int start, int end, String str) 使用给定 |
java数组
声明数组
double[] myList; // 首选的方法
double myList[];
创建数组
mylist = new double[10];
声明并创建
double[] myList = new double[10];
double[] myList = {1,2,3,4}
多维数组
type[][] typeName = new type[typeLength1][typeLength2];
Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
- toString()
要打印数组全部内容时使用。
int[] arr = {8,1,2,3,4,5,6,7};
System.out.println(Arrays.toString(arr));
- copyOf()
我们经常需要对数组进行动态扩容,就是给一个更大容量的数组再循环复制过来,
int[] arr = {8,1,2,3,4,5,6,7}
System.out.println(arr.length); // 8
arr = Arrays.copyOf(arr, 15);
System.out.println(arr.length); // 15
- binarySearch()
用于查找各种类型 二分查找法
int[] arr = {8,1,2,3,4,5,6,7};
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.binarySearch(arr, 6));
- compare(), equals()
用于各种类型数组的比较 - sort(), parallelSort()
用于排序
int[] arr = {8,1,2,3,4,5,6,7};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
java日期时间
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。
Date(long millisec)
Date 对象创建以后,可以调用下面的方法。
序号 | 方法和描述 |
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 | Object clone( ) 返回此对象的副本。 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 | int hashCode( ) 返回此对象的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
10 | String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
获取当前日期时间
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
---------------
Mon May 04 09:51:52 CDT 2021
使用 SimpleDateFormat 格式化日期
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy-MM-dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
---------------
Current Date: Wed 2016-11-09 at 08:23:19 AM UTC
Java 休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程)
Thread.sleep(1000*3); // 休眠3秒 单位毫秒