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);

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) 将 int 参数的字符串表示形式插入此序列中。

5

insert(int offset, String str) 将 str 参数的字符串插入此序列中。

6

replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。

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秒 单位毫秒