Java基础学习

JavaSE学习

一、Java基础知识

1. DOS常用命令

命令 注释
help 查看所有命令
cd .. 返回上一级目录
cd 文件名 目录切换到该文件名(子目录)下
cd \ 回根目录
dir 当前根目录下的文件目录
dir /s 所有目录
md或mkdir 文件名 创建目录
rd或者rmdir 文件名 移除目录
copy 要复制的文件名 复制到的路径或文件夹 将一个或多个文件复制到另一个位置
del 文件名 删除文件
ren 文件名 新文件名 重命名
tree 显示文件目录树,含最底层目录
Ctrl+C 中断操作
cls 清空屏幕
exit 退出
ver 查看系统版本
ipconfig 查看电脑和网络地址
ipconfig /all 显示所有网络适配器的完整TCP/IP配置信息

2. JVM、JRE、JDK之间的关系

JDK(Java Development Kit) ,Java 语言的软件开发工具包

JRE(Java Runtime Environment),Java运行环境

JVM(Java Virtual Machine),Java虚拟机

JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

JDK是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。

3. Java开发环境搭建

在Oracle官方网站下载JDK:http://www.oracle.com/index.html

  1. 下载java JDK,安装路径更改为:C:\Java\jdk1.8.0_65

  2. 安装JRE 安装路径为:C:\Java\jre8(若此路径没有,可以手动添加)

  3. 新建环境变量,变量名:JAVA_HOME 变量值:C:\Java\jdk1.8.0_65 (JDK安装路径)

  4. 配置环境变量Path 最前端添加:.;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

  5. 运行javac ,java -version

4. Java开发流程

  1. 需求分析
  2. 设计原型
  3. 需求文档
  4. 交互文档
  5. 设计美化
  6. 前端
  7. 研发
  8. 测试/项目验收

5. Java基础

5.1 Java主类结构

5.1.1 包声明

package 包名

package com.*;
5.1.2 成员变量和局部变量

成员变量(全局变量) 生命在类体中,有效范围:整个类都有效。 又分为静态变量和实例变量,静态变量的有效范围可以跨类,调用方式:类名.静态变量

局部变量 生命在方法体中 ,有效范围:当前定义的方法类中有效生命周期取决于方法,方法调用结束会释放局部变量占用的内存空间。

public class First {
	static String s1="你好"; //成员变量(全局变量)
	public static void main(String[] args) {
		String s2="Java"; //局部变量
		System.out.println(s1);
		System.out.println(s2);
	}

}
5.1.3 主方法

main()方法

public static void main(String[] args){

}
5.1.4 API库

import导入相关的类

java主要的类:

  1. java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。
  2. java.awt 包含用于创建用户界面和绘制图形图像的所有类。
  3. java.beans 包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。
  4. java.io 通过数据流、序列化和文件系统提供系统输入和输出。
  5. java.lang 提供利用 Java 编程语言进行程序设计的基础类。
  6. java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。
  7. java.net 为实现网络应用程序提供类。
  8. java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。
  9. java.security 为安全框架提供类和接口。
  10. java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据 的 API。
  11. java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。
  12. java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

5.2 基本数据类型

        byte mybyte = 124;
		short myshort = 32564;
		int myint = 45784612;
		long mylong = 46789451;
		long result = mybyte + myshort + myint + mylong;
		char x = 'a';
		boolean flag=true;
5.2.1 数值型

整数类型

  • byte 内存空间:8位 -128~127
  • short 内存空间:16位
  • int 内存空间:32位
  • long 内存空间:64位

浮点类型

  • float 内存空间:32位
  • double 内存空间:64位
5.2.2 字符型
  • char 内存空间:16位
5.2.3 布尔型
  • boolean True/False

5.3 运算符

5.3.1 运算赋值

“=”赋值

5.3.2 自增和自减赋值

a++ 先赋值后运算

i=a++;   //先赋值,后运算
//i=a;a=a+1;

++a 先运算后赋值

i=++a;  //先运算,后赋值
//a=a+1;i=a;
5.3.3 逻辑运算符

&&和&的区别?

&&是短路运算符,当一个表达式为false时,不会去判断第二个表达式

&是非短路运算符 会判断两个表达式

5.3.4 位运算符
  • 原码:正数符号为为0,负数符号位为1;例:10001000 - 8的原码

  • 反码:符号位不变,其余取反; 例:11110111 -8的反码

  • 补码:负数补码=反码+1; 例:11111000 -8的补码表示二进制

  • 左移:右边移空的部分补0,a<<n等于 a*2^n;

  • 右移:左边移空的部分补1, a>>n等于 a/2^n;

5.3.5 三元运算符

a<b?x:y

例:20<45?true:false

5.3.6 运算优先级

由高到低:

  1. 增量和减量运算
  2. 算术运算
  3. 比较运算
  4. 逻辑运算
  5. 赋值运算

5.4 数据类型转换

5.4.1 隐式转换

低精度赋值给高精度,自动转换

精度从低到高排序:byte<short<int<long<float<double

int x=50;
float y=x;
5.4.2 显示转换

高精度变量赋值给低精度变量,强制转换

int a=(int)45.23;        //输出45
long y=(long)456.6F;     //输出456
int b=(int)'b';          //输出100

6. 流程控制

6.1 条件语句

6.1.1 if
if(布尔表达式){
    语句序列;
}
6.1.2 switch...case

case常量值必须互不相同

switch(整型、字符型或字符串类型){
    case 1:
        语句块1;
        break;
    case 2:
        语句块1;
        break;
}

6.2 循环语句

6.2.1 while
while(条件表达式){
    执行语句;
}
6.2.2 do...while

至少执行一次

do{
    执行语句;
}while(条件表达式)
6.2.3 for
for(i=0;i<n;i++){
    循环N次;
}
6.2.4 foreach
/*
for(元素变量 x:遍历对象 ob){
    引用了x的java语句;
}
*/
for(Student s:list){
    System.out.println(s);
}

6.3 循环控制

6.3.1 break

跳出循环结构,也可以跳出当前循环体,中断当前循环

6.3.2 continue

跳过本次循环,回到循环条件测试部分,重新开始循环。

7. 练习

7.1 for循环打印菱形

import java.util.Scanner;

/*
 * 打印(2*n-1)层的菱形
 *     *
 *    ***
 *   *****
 *    ***
 *     *
 * 横,列总数:5    2n-1
 */
public class demo1 {
	public static void main(String[] args) {
		int i, j,k,n;
		// 循环打印一个菱形的上半部分
		Scanner scanner=new Scanner(System.in);
		n=scanner.nextInt();
		//第n层
		for(j=1;j<=n;j++) {
			//第j层
			for(i=0;i<(n-j);i++) {
				System.out.print(" ");
			}
			for(k=0;k<(2*j-1);k++) {
				System.out.print("*");
			}
			System.out.println();
		}
		//打印下半部分
		for(j=1;j<=n-1;j++) {
			//第一层
			for(i=0;i<j;i++) {
				System.out.print(" ");
			}
			for(k=0;k<(2*(n-j)-1);k++) {
				System.out.print("*");
			}
			System.out.print("\n");
		}
		
	}
}

7.2 while循环语句计算,1+1/2!+1/3!+...+1/20!之和

import java.util.Scanner;

import org.junit.Test;

/*
 * while 输出阶层
 */
public class demo2 {
	public static void main(String[] args) {
		float i = 1;
		long k = 1;
		float s = 0.0f;
		int j, m;
		while(i<20){
			k *= i;
			i++;
			System.out.println(k);
			s +=  1.0 / k;
		}
		System.out.println(s);
	}
	
	@Test
	//从控制行输入一个数,输出该数的阶层
	public void test() {
		int i;
		long l=1;
		Scanner scanner=new Scanner(System.in);
		Integer integer=scanner.nextInt();
		for(i=1;i<=integer;i++) {
			l*=i;
		}
		System.out.println(l);
	}
}

8 字符串

8.1 String类

声明字符串必须经过初始化

  • 用字符数组a创建String对象
 char a[]= {'a','b','c'};
 String s=new String(a);
 System.out.println(s); //输出abc
  • 提取字符数组a中的一部分创建String对象
char x[]={'a','b','c','d','e','f'};
String y=new String(x,2,4);
System.out.println(y);   //输出cdef

8.2 连接字符串

使用“+”运算符

String a,b,c;
System.out.println(a+b+c);

8.3 获取字符串信息

8.3.1 长度
String str;
str.length();
8.3.2 查找
//indexOf返回字符串s在指定字符或字符串中首次出现的位置
String str;
String s;
str.indexOf(s);

//lastIndexOf返回的指定字符或者字符串最后一次出现的位置
String str;
String s;
str.lastIndexOf(s);

8.3.3 获取指定索引位置的字符
//str.charAt(int index);
String str1="hello world!";
char c=str1.charAt(1);
System.out.println(c);    //输出e

8.4 字符串操作

8.4.1 获取子字符串的位置(str.substring(int index))

substring()

//str.sbustring(int beginIndex);
String str1="hello world!";
String s2=str1.substring(3);
System.out.println(s2);   //输出lo world!
8.4.2 去除空格

trim();

忽略前后空格

//str.trim();
String str1=" hello world! ";
String str3=str1.trim();
System.out.println(str3);  //输出hello word!
8.4.3 字符串替换

replace

//str.replace(char oldChar,char newChar)
String str="adasawwqwrqwqqwrqrqad";
String str4=str.replace("a", "x");
System.out.println(str4);   //输出xdxsxwwqwrqwqqwrqrqxd
8.4.4 判断字符串的开始与结尾
String str="adasawwqwrqwqqwrqrqad";
//str.startswith(String s)
System.out.println(str.startsWith("ada"));    //输出true
//str.endswith(String s)
System.out.println(str.endsWith("ad"));       //输出true
8.4.5 判断字符串是否相等

equals()方法

具有相同的字符和长度则返回true,区分大小写

//str.equals(String otherstr)
String m="abc";
String n="ABC";
System.out.println(m.equals(n)); //false

equalsIgnoreCase()方法

忽略大小写比较

//str.equalsIgnoreCase(String otherstr)
String m="abc";
String n="ABC";
System.out.println(m.equalsIgnoreCase(n));   //tue
8.4.6 按字典顺序比较两个字符串

String对象位于参数字符串之前则返回一个负整数

String对象位于参数字符串之后则返回一个正整数

两个字符串相等返回0

compareTo方法只有在equals()方法返回true时才返回0

//str.compareTo(String otherstr)
String e="a";
String f="b";
String g="c";
System.out.println(f.compareTo(f));    //1
System.out.println(f.compareTo(g));    //0
System.out.println(f.compareTo(g));    //-1
8.4.7 字母大小写替换

toLowerCase()方法

将String转换为小写

//str.toLowerCase()
String str5="ALSAFLIHAAHG";
System.out.println(str5.toLowerCase());   //alsaflihaahg

toUpperCase()方法

将String转换为大写

//str.toUpperCase()
String str6="asfagadgaaa";
System.out.println(str6.toUpperCase());   //ASFAGADGAAA
8.4.8 字符串分割

split()方法

sign为分割字符串的分隔符,也可以使用正则表达式

//str.split(String sign)
        	String str7="127.0.0.1";
        	String[] arr=str7.split("\\.");
        	for(String str8:arr) {
        		System.out.print(str8+"\\");    //127\0\0\1\
        	}
//str.split(String sign,int limit)
            	String str7="127.0.0.1";
        	String[] arr=str7.split("\\.",2);
        	for(String str8:arr) {
        		System.out.print(str8+"\\");   //127\0.0.1\
        	}

8.5 格式化字符串

format()方法,创建格式化字符串

8.5.1 日期和时间格式化

常用的日期格式化转换符

转 换 符 说 明 示 例
%te 一个月中的某一天(1~31) 2
%tb 指定语言环境的月份简称 Feb(英文)、二月(中文)
%tB 指定语言环境的月份全称 February(英文)、二月(中文)
%tA 指定语言环境的星期几全称 Monday(英文)、星期一(中文)
%ta 指定语言环境的星期几简称 Mon(英文)、星期一(中文)
%tc 包括全部日期和时间信息 星期二 三月 25 13:27:22 CST 2018
%tY 4位年份 2018
%tj 一年中的第几天(001~366) 085
%tm 月份 03
%td 一个月中的第几天(01~31) 02
%ty 2位年份 18

常用时间格式化转换符

转 换 符 说 明 示 例
%tH 2位数字的24小时制的小时(00~23) 14
%tI 2位数字的12小时制的小时(01~12) 05
%tk 2位数字的24小时制的小时(0~23) 5
%tl 2位数字的12小时制的小时(1~12) 10
%tM 2位数字的分钟(00~59) 05
%tS 2位数字的秒数(00~60) 12
%tL 3位数字的毫秒数(000~999) 920
%tN 9位数字的微秒数(000000000~999999999) 062000000
%tp 指定语言环境下上午或下午标记 下午(中文)、pm(英文)
%tz 相对于GMT RFC 82 格式的数字时区偏移量 +0800
%tZ 时区缩写形式的字符串 CST
%ts 1970-01-01 00:00:00 至现在经过的秒数 1206426646
%tQ 1970-01-01 00:00:00 至现在经过的毫秒数 1206426645453

常见的日期和时间组合的格式化

转 换 符 说 明 示 例
%tF “年-月-日”格式(4位年份) 2018-9-18
%tD “月/日/年”格式(2位年份) 09/18/18
%tc 全部日期和时间信息 星期二 三月 25 15:20:00 CST 2018
%tr “时:分:秒 PM(AM)”格式(12时制) 03:22:06 下午
%tT “时:分:秒”格式(24时制) 15:23:50
%tR “时:分:秒”格式(24时制) 15:25
Date date=new Date();
        	String str8=String.format("%te", date);
        	System.out.println(str8);    //输出24   24号
        	String str9=String.format("%tH", date);
        	System.out.println(str9);    //输出14 14点

8.5 正则表达式

str.matches(String s)

s:正则表达式

通常被用于判断语句中,检查某一字符串是否满足格式

“.”代表任何一个字符

[]括起来的字符表示一个元字符,该元字符可以代表方括号中的任何一个字符。

[abc]4:a4,b4,c4都是和正则表达式匹配的字符串

[^456]:代表4、5、6以外的任何字符

[a-r]:a-r中的任何字符

...

允许使用限定修饰符来限定元字符出现的次数。

?:0或者1次

*:0或者多次

+:1或者多次

{n}:正好出现n次

{n,}:至少出现n次

{n,m}:出现n~m次

8.6 字符串生成器

Stringbuilder

  1. 追加字符串:append()
  2. 插入字符串:insert()
  3. 删除字符串:delete()

9.数组

9.1 一维数组

先声明,再用new进行内存分配

int a[];
int[] a;
a=new a[10];   //new分配空间
int a[]=new int[10];

整数数组中各个元素初始值为0

int arr[]=new int[]{1,2,3,4,5};
int arr[]={1,2,3,4,5,6};

9.2 二维数组

int a[][]=new int[2][4];  //分配空间

//分别为每一行分配
int a[][]=new int[2][];
a[0]=new int[2];
a[1]=new int[3];
a[2]=new int[3];
int arr[][]={{1,2},{3,4,5},{6,7,8}};    //初始化二维数组
int arr[1][2]=20;   //为指定下标赋值

9.3 数组的基本操作

9.3.1 遍历数组

for()和foreach()

//遍历一维数组
public class Iterator {
    public static void main(String[] args) {
        int a[]=new int[]{1,2,4,62,1,64,58,9};
        //for()
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");  //1 2 4 62 1 64 58 9
        }
        System.out.println();
        //foreach()
        for (int b:a) {
            System.out.print(b+" ");    //1 2 4 62 1 64 58 9
        }
    }
}
//遍历二维数组
public class Iterator1 {
    public static void main(String[] args) {
        int a[][]={{1,2,3},{4,5,6},{7,8,9},{1,1,1}};
        System.out.println(a.length);     //4行 
        //for()
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a[i].length;j++){
                System.out.print(a[i][j]+" ");  //1 2 3 4 5 6 7 8 9 1 1 1 
            }
        }
        System.out.println();
        //foreach()
        for(int b[]:a){
            for(int c:b){
                System.out.print(c+" ");       //1 2 3 4 5 6 7 8 9 1 1 1
            }
        }
    }
}

Arrays.toString():遍历一维数组

//Arrays.toString()
System.out.println(Arrays.toString(a)); //[1, 2, 4, 62, 1, 64, 58, 9]
9.3.2 替换和填充数组

fill()

import java.util.Arrays;

public class Array {
    public static void main(String[] args) {
        int a[]=new int[3];
        //fill(int a[],int value)  向a数组填充值value
        Arrays.fill(a,9);    //向a数组填充9
        for(int i:a){
            System.out.print(i+" ");  //999
        }
        System.out.println();
        //fill(int a[],int fromIndex,int toIndex,int value)
        //将a数组指定范围的元素填充 (fromIndex包括,toIndex不包括)
        Arrays.fill(a,0,1,2);
        for(int i:a){
            System.out.print(i+" ");  //299
        }
    }
}
9.3.3 排序

sort()方法对数组进行升序排序

//Arrays.sort(object)
import java.util.Arrays;

public class ArraySort {
    public static void main(String[] args) {
        int a[]={121,1223,765,1,98,43,132,76,234,7};
        Arrays.sort(a);
        System.out.println(Arrays.toString(a)); 
        //[1, 7, 43, 76, 98, 121, 132, 234, 765, 1223]

    }
}

9.3.4 复制

copyOf:复制数组,制定新的数组长度

//copyOf(arr,int newlength)
public class ArrayCopyOf {
    public static void main(String[] args) {
        int a[]={1,2,3,4,5,6,7,8,9,0};
        int[] ints = Arrays.copyOf(a, 5);
        System.out.println(Arrays.toString(ints));   //[1, 2, 3, 4, 5]
    }
}

copyOfRange:有范围的复制数组

//copyOfRange(arr,int fromIndex,int toIndex)   fromIndex包括,toIndex不包括
int[] ints1 = Arrays.copyOfRange(a, 1, 4);
System.out.println(Arrays.toString(ints1));  //[2, 3, 4]
9.3.5 查询

二分法查找

/*
二分法查找
 */
public class Demo9 {
    public static void main(String[] args) {
        int[] a = new int[10];
        for(int i=0;i<10;i++){
            a[i]= (int) ((Math.random())*100);
        }
        System.out.println(Arrays.toString(a));
        int value = 10;
        int i = binarySearch(a, value);//找不到返回-1
        System.out.println((i == -1) ? value + "不存在" : value + "在数组中的下标是" + i);

    }

    //折半查找的核心算法
    public static int binarySearch(int[] a, int value) {
        int begin = 0;
        int end = a.length - 1;
        //循环
        while (begin <= end) {
            int mid = (begin + end) / 2;
            if (a[mid] == value) {
                return mid;
            } else if (a[mid] > value) {
                end = mid - 1;
            } else if (a[mid] < value) {
                begin = mid + 1;
            }
        }
        return -1;
    }
}

binarySearch()

如果查得到,返回搜索值的索引,否则返回-1或者该值要插入的 位置

查找前必须排序

import java.util.Arrays;

public class binarySearch {
    public static void main(String[] args) {
        int a[]={123,243,7658,12,46,98,10,657,131,77};
        Arrays.sort(a);
        //binarySearch(Object[] a,Object key)
        int i = Arrays.binarySearch(a, 12);     //1
        System.out.println(i);
        //binarySearch(Object[] a,int fromIndex,int toIndex,Object key)  指定范围查找
        int i1 = Arrays.binarySearch(a, 0, 3, 123);
        System.out.println(i1);    //-4   123要插入的位置
    }
}


9.4 数组的排序算法

9.4.1 冒泡排序

两两交换

/*
* 冒泡排序
* */
public class demo2 {
    int[] a=new int[]{2,3,2,12,75,6,32,12,658,32,8652,212};
    int i,j,k;
    public void getArray(){
        for(i=0;i<a.length;i++){
            for(j=0;j<a.length-1;j++){
                if(a[j]<a[j+1]){
                    k=a[j];
                    a[j]=a[j+1];
                    a[j+1]=k;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }

    public static void main(String[] args) {
        demo2 d=new demo2();
        d.getArray();
    }
}
9.4.2 直接选择排序

每一次循环找出最小值,交换

/*
* 选择排序
* */
public class Demo4 {
    int i,j,min,temp;
    public void sort(int[] a){
        for(i=0;i<a.length;i++){
            System.out.println(i);
            min=i;
            for(j=i;j<a.length;j++){
                if(a[j]<a[min]){
                    min=j;
                }

            }
            System.out.println(a[min]);
            temp=a[i];
            a[i]=a[min];
            a[min]=temp;
            System.out.println(Arrays.toString(a)+i);
        }
    }

    public static void main(String[] args) {
            int[] a=new int[]{23,543,11,435,776,44,432};
        Demo4 demo4=new Demo4();
        demo4.sort(a);
        System.out.println(Arrays.toString(a));
    }
}
9.4.3 反转排序

数组第i个和第(a.length-1-i)个交换

import java.util.Arrays;

//数组反转
public class ArrayReverse {
    public static void main(String[] args) {
        int temp,k;
        int a[]={1,2,3,4,5,6,7,8,9};
       //i和a.length-1-i交换,偶数交换到a.length/2个停止,奇书交换到(a.length-1)/2
        k=a.length; //数组长度  9
        //System.out.println(k);
        if(k%2==0){
            for(int i=0;i<k/2;i++){
                temp=a[i];
                a[i]=a[k-1-i];
                a[k-1-i]=temp;
            }
        }
        else{
            for(int i=0;i<(k-1)/2;i++){
                temp=a[i];
                a[i]=a[k-1-i];
                a[k-1-i]=temp;
            }
        }
        System.out.println(Arrays.toString(a));  //[9, 8, 7, 6, 5, 4, 3, 2, 1]
    }
}

10. 类和对象

10.1 概述

现实世界中,随处可见的一种事物就是对象。通常会将对象划分为两个部分:静态部分和动态部分

静态部分称为属性,而具有这些属性的人会执行的动作叫做动态部分。

面向对象来解决问题:

  1. 从问题中抽象出对象。
  2. 识别对象的属性。
  3. 识别这个对象的动作行为。
  4. 识别这个对象的属性和行为后,这个对象就被定义了。

10.2 类

类就是同一事物的统称。

类实质上就是封装属性和对象的载体。

反过来说,具有相同属性和行为的一类实体被成为类。、

10.3 封装

封装是面向对象的核心思想。用户不能轻易的直接操作数据结构,只能执行类允许公开的数据。

避免了外部操作对内部数据的影响,提高了程序的可维护性。

10.4 继承

继承是关联的一种。

继承思想可以缩短软件开发的时间,复用那些已经定义好的类可以提高系统性能,减少系统在使用过程中出现错误的几率。

10.5 多态

将父类对象应用于子类的特征。

多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类及相关类。

根据父类统一风格的处理,可以实例化子类的对象

抽象类不能实例化对象

10.6 类

10.6.1 成员变量

对象的属性,用class关键字类定义类

10.6.2 成员方法

使用成员方法对应于类对象的行为

无返回值用void表示

10.6.3 权限修饰符

public、protected、default、private

作用域 当前类 同一包 其他包的子类 其他包的类
public
protected ×
default × ×
private × × ×
10.6.4 局部变量

成员方法内定义的变量

成员变量在使用时必须进行赋值操作或初始化,否则会出现编译错误

10.6.5 局部变量的有效范围

从该变量的声明开始到该变量的结束为止

10.6.6 this关键字

this可以调用成员变量和成员方法。

this引用的就是本类的一个对象,在局部变量或参数覆盖了成员变量时,要添加this关键字明确引用的是类成员还是局部变量和成员方法。

private String name;
public void setName(String name){
    this.name=name
}
10.6.7 类的构造方法

有参构造和无参构造

  1. 构造方法没有返回值

  2. 构造方法的名称要和本类名称相同

  3. 构造方法没有返回值

  4. 编译器会自动创建一个无参构造

    public class Student{
        public Student(){} //无参构造
        public Student(String name){}   //有参构造
    }
    

    this关键字可以调用类中的构造方法,但是只可以在无参构造的第一句使用this调用有参构造方法

    public class Anything{
        public Anything(){
            this("this调用了有参构造");
            System.out.println("无参构造");
        }
        public Anything(String str){
            System.out.println(str);
        }
    
        public static void main(String[] args) {
         new Anything();  
        }
    }
    
10.6.8 静态变量、常量和方法

static关键字修饰的变量方法叫做静态变量,静态方法

静态方法、变量被成为静态成员,静态成员属于类所有。

调用:类名.静态类成员

静态方法不可以使用this

不可以直接调用非静态方法

执行类时首先执行静态代码块,且只执行一次

10.6.9 类的主方法

主方法是静态的,所以要在主方法中调用其他方法,则该方法也必须是静态的。

主方法没有返回值。

主方法的形参为数组。

public static void main(String[] args) {
        
    }

10.7 对象

对象是由类抽象出来的

10.7.1 创建

new一个对象,调用构造方法创建对象

Student student=new Student();
10.7.2 访问对象和属性和行为

对象.类成员

student.getName();
10.7.3 引用

类名 对象引用名称

Student stu;
10.7.4 比较

equals():比较两个对象的内容是否相同

==:比较两个对象的地址是否相同

public class Equals {
    public static void main(String[] args) {
        String a=new String("abc");  //a 分配了内存空间
        String b=new String("abc");  //b分配了内存空间
        String c=a;                          //a赋值给c,指向同一个内存空间
        System.out.println(a.equals(b));   //true 
        System.out.println(a==b);          //false
        System.out.println(a==c);          //true
    }
}
10.7.5 销毁

当生命周期结束时,分配给对象的内存地址将会被回收,java拥有一整套完成的垃圾回收机制。只能回收new创建的对象。不能回收不是用过new获取的内存。

finalize()方法:在垃圾回收时会首先调用该方法,回收被对象占用的内存。

11. 包装类

11.1 Integer

11.2 Boolean

11.3 Byte

11.4 Character

11.5 Double

11.6 Number

12 数字处理类

12.1 数字格式化

DecimalFormat

实例化DecimalFormat对象时传递数字格式,也可以通过applyPattern()方法

//pattern:格式  value:数字
//new DecimalFormat(pattern).format(value);
 String format = new DecimalFormat("000.###").format(12.241);
 System.out.println(format);   //012.241
//applyPattern()
DecimalFormat myformat=new DecimalFormat();
myformat.applyPattern(pattern);
myformat.format(value);

12.2 数学运算

12.2.1 Math类

提供了众多数学函数方法,都被定义为static

调用:Math.数学方法

12.2.2 取整函数方法
  1. Math.ceil(double a) 向上取整

  2. Math.floor(double a) 向下取整

  3. Math.rint(double a) 取最近的整数,有0.5的话取偶整数

  4. Math.round(double a) 四舍五入

    public class math {
        public static void main(String[] args) {
            System.out.println(Math.ceil(9.1));   //向上取整 10
            System.out.println(Math.floor(9.9));  //向下取整 9
            System.out.println(Math.rint(9.5));   //靠近的整数有9和10,取偶数  10
            System.out.println(Math.rint(9.9));   //靠近10 10
            System.out.println(Math.round(9.4));  //四舍五入 9
        }
    }
    
12.2.3 随机数

0<Math.random()<1.0 随机产生0~1的数

int a= (int) (Math.random()*20);   //0~20的随机数
12.3.4 Random类

可以实例化一个Random对象创建一个随机数生成器

12.3.5 大数据运算
BigInteger

比Integer数据类型的范围要大得多

BigDecimal

在BigInteger的基础上加入了小数的概念

13. 循环嵌套

for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        
    }
}

14. 方法的形参和实参

实参:有确切的值,赋值给形参

形参:方法中定义的参数

15. 方法的递归调用

自己调用自己

//递归实现斐波那契额
//递归实现斐波那契数列
//斐波那契数列:1,1,2,3,5,8
//第i个=第i-1个+第i-2个
public class demo11 {
    public static void main(String[] args) {
        demo11 demo=new demo11();
        int a= demo.demo(5);
        System.out.println(a);
    }
    public int demo(int i) {
        if(i==1||i==2){
            return 1;
        }
        else
            return demo(i-1)+demo(i-2);
    }
}
posted @ 2020-04-25 10:59  糊你一脸羊毛  阅读(169)  评论(0)    收藏  举报