Java基础学习笔记

Java基础学习笔记



前言

本文仅以自己理解的方式记录学习笔记

一、Java基本数据类型

byte:最小值是-128,最大值是127
byte a = 127;

short:最小值为-32768,最大值为32767
short b = 32767;

int:最小值是 -2147483648,最大值是2147483647
int c = 2147483647;

long:最小值是 -9223372036854775808	,最大值为9223372036854775807
long d = 9223372036854775807l; // 声明long类型数据时,须在数据后面加‘L’或者‘l’

float:单精度小数,最小值为1.4E-45	最大值为3.4028235E38   
结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314
float e = 1;

double:双精度小数,最小值为4.9E-324  最大值为1.7976931348623157E308
double f = 7.;

boolean:只有false和true两个值
boolean g = true;

char:字符型
char h = 65535; // 存储数字时,最小值为0,最大值为65535
char j = '中'; // 中文只能存储一个字
char k = 'a'; // 英文只能存储一个字母或符号

数据强制类型转换:
int m = 123;
byte n = (byte) m; // 强制转换格式:(type)value type是要强制类型转换后的数据类型
char s = (char) m;

二、Java类,方法以及变量

类的三种变量

1.局部变量:在方法、构造方法或者语句块中定义的变量叫做局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。声明时必须赋值
2.成员变量(实例变量):成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
3.类变量(静态变量):类变量也声明在类中,方法体之外,但必须声明为static类型。

类的方法详解

构造方法

1.每个类都有构造方法,
2.如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法.
3.构造方法的名称必须与类同名,无返回值,一个类可以有多个构造方法
4.构造方法仅用于实例化对象,是与创造对象一起执行的操作,创建对象时,必须要调用一个构造方法
public JavaBasics() {
	System.out.println("我是一个构造方法");
}
5.重载构造方法,调用时根据参数值来确定用哪一个	
	public JavaBasics(int ar) {
		System.out.println("我是一个重载的构造方法");
	}

普通方法

1.普通方法是在对象创建之后调用的方法
2.不能和类名一致,首字母小写
3.创建时需声明方法访问控制修饰符,非访问控制修饰符,返回值类型,方法名,参数。返回值类型和方法名时必须的

静态方法

1.非静态方法只能让对象调用,不创建对象就无法调用,而静态方法可以直接调用
2.静态方法只能调用静态成员
3.必须用用static修饰
	public static void test1() {
		System.out.println("我是一个静态方法");
	}

主方法

项目运行的入口,每个项目必须只能有一个主方法,否则无法运行
	public static void main(String[] args) { 	// Java规范主方法必须这么定义,不能修改
			System.out.println("我是主方法,项目运行的入口");
			test1(); // 静态方法可以直接调用
			JavaBasics bbb = new JavaBasics(); // 使用new关键字创建对象,创建对象时必须用构造方法
			bbb.test2(); // 创建对象后,通过对象调用普通方法
	}

方法重载和重写

方法重载:方法名相同,但参数不同,返回值不同
方法重写:
	1.只能应用于子类重写父类的方法,且方法名,参数和返回值必须相同
	2.被private修饰的方法不能重写,子类不能将父类中public的方法重写为private
	3.父类抛出的异常,子类必须一样
	public void chongzai() {	
	
	}
	public void chongzai(int i) {
	
	}
	public int chongzai(int i,int t) {
		return 1;
	}

访问控制修饰符

1.无修饰符:只能在同一个包里面调用,可用于修饰类、接口、变量、方法
2.private : 只能在同一个类里面调用,可用于修饰对象:变量、方法,注意:不能修饰类(外部类)
3.public : 对所有类可见。用于修饰类、接口、变量、方法
4.protected : 对同一包内的类和所有子类可见。用于修饰变量、方法。 注意:不能修饰类(外部类)
	public void test() {
		System.out.println("我是一个普通方法");
	}
	void test2() {
		System.out.println("无修饰符,无传入参数的方法");
	}

非访问控制修饰符

1.static:用于修饰静态方法和静态类变量
2.final:用于修饰类、方法和变量,final修饰的类不能被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,不可修改
3.abstract:用于修饰抽象类和抽象方法
4.synchronized 和 volatile:主要用于线程的编程

三、Java循环和条件语句

1.循环语句

循环语句关键字:
break 关键字:用于循环语句中跳出该循环,继续执行循环下面的语句
continue 关键字:用于循环语句中终止本次循环,跳转到下一次循环

while循环

public void Xunhuan(int x) {
	// 满足括号中的条件时才会执行
	while (x == 20) {
		System.out.println("不满足条件则不执行");
}

do…while 循环

do {
		System.out.println("执行一次后才会判断条件语句,不满足条件则不再循环");
} while (x < 20);

for循环

执行一次后会自动更新变量值,然后再次判断条件执行
for(初始化一个变量为其赋值; 循环判断语句; 变量更新)
for (int y = 1; y < 20; y = y + 1) {
		System.out.println("执行完后y自动+1");
}

增强 for 循环

1.用于数组
2.格式:for(声明语句 : 表达式),声明语句中的数据类型必须与数组元素的类型一致,表达式为数组名
3.h为数组的元素值,第一次循环的值为数组的第一个元素,该循环将数组的元素遍历出来
int[] nu = { 10, 20, 30, 40, 50 };
for (int h : nu) {
	System.out.println(h);
}

2.条件语句

if语句

格式:
if(布尔表达式){
	如果布尔表达式为true将执行的语句
}

举例:
int a = 5;
if (a == 5) {
		System.out.println("a等于5时执行");
}

if else语句

格式:
if(布尔表达式){
	如果布尔表达式的值为true
}else{
	如果布尔表达式的值为false
}

举例:
int a = 5;
if (a == 6) {
	System.out.println("a等于6时执行");
} else {
	System.out.println("a不等于6时执行");
}

if else if else 语句

格式:
if(布尔表达式 1){
	如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
	如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
	如果布尔表达式 3的值为true执行代码
}else {
	如果以上布尔表达式都不为true执行代码
}
	
举例:
int a = 5;
if (a == 6) {
	System.out.println("a等于6时执行");
} else if (a == 7) {
	System.out.println("a等于7时执行");
} else if (a == 8) {
	System.out.println("a等于8时执行");
} else {
	System.out.println("a不等于以上三个条件时执行");
}

switch case 语句

格式:
switch(expression){
   case value :
   //语句
   break; //可选
case value :
   //语句
   break; //可选
//你可以有任意数量的case语句
default : //可选
   //语句
}

举例说明:
以下代码执行时会先匹配case1-4四个值,匹配到相同的值后执行对应的case语句,匹配不到则执行default语句,没有default语句时则执行swich后面的代码
break关键字:表示当前case执行后不再执行后面的case语句,没有break会继续执行后面的case,执行到后面有break的case时才会结束
int a = 4;
switch (a) {
	case 1:
		System.out.println("a等于1以上三个条件时执行");
	case 2:
		System.out.println("a等于2以上三个条件时执行");
	case 4:
		System.out.println("a等于4以上三个条件时执行");
		break; // 可选
	case 3:
		System.out.println("a等于3以上三个条件时执行");
		break; // 可选
	//可以有任意数量的case语句
	default: // 可选
		System.out.println("a不等于以上四个case时执行");
	}

四、Java数据操作

基本数据类型操作

当我们需要对某一个数据进行操作时,需要把数据声明为一个对象,然后调用Number类中的方法操作
每种数据类型都对应一个Number类下的子操作类
以下为基本数据类型对应的包装类:

基本数据类型								对应操作类
boolean     							Boolean
byte									Byte
short									Short	
int										Integer	
long									Long	
char									Character	
float									Float	
double									Double	

使用方法

int a = 5000; // 声明一个变量并赋值
int t = 500;
Integer g = 12;
Integer b = 5000; // 声明一个int类型的数据对象,Integer为Number的子类,该对象可以直接调用Number类的方法

xxxValue()将 Number 对象转换为xxx数据类型的值并返回
byte c = b.byteValue(); // 将b的值转换为byte类型返回

返回a和t的最小值	
int d = Math.min(a, t);

返回a和t的最大值	
int e = Math.max(a, t);

compareTo()括号中的数据可以是Byte,Double,Integer,Float,Long或Short类型的参数
返回值为int类型;g = 5时返回0,g < 5时返回-1,g > 5时返回1
int f = g.compareTo(5);

equals()括号中的数据类型与g相同,g = 5时返回true,否则返回false	
boolean h = g.equals(5);

valueOf()
返回一个 Number 对象指定的内置数据类型
Integer j = Integer.valueOf(a); // 返回一个表示a的Integer实例
Integer s = Integer.valueOf("1234561");// 返回"1234561"的Integer对象
Integer q = Integer.valueOf("1234561", 10); // 返回一个Integer对象,使用10进制提取"1234561"的值

toString()
以字符串形式返回值。
String r = b.toString(); // 将整数b转换为字符串
String y = Integer.toString(5); // 将整数5转换为字符串

parseInt()
将字符串解析为int类型。
int u = Integer.parseInt(r); // 将字符串转换为整数
int o = Integer.parseInt(r, 10); // 将字符串用10进制解析为整数
double p = Double.parseDouble("5"); // 将字符串"5"转换为double类型

abs()
返回参数的绝对值。
int z = Math.abs(b);
double x = Math.abs(p);

ceil()和floor():操作的参数只能是double和float类型的数据

round取值: 1.5以下取1,1.5及以上取2   
rint取值:  1.5及以下取1,1.5以上取2
floor取值:去掉小数点向下取值
ceil取值:去掉小数点向上取值

double v = 1.256;
double qt = 2;
ceil方法将数据的小数去掉后+1,返回一个double类型的整数
double qe = Math.ceil(v); // qe的值为2.0

floor方法将数据的小数去掉,返回剩余的整数,同样是double类型
double qr = Math.ceil(v); // qr的值为1.0

没有小数时,返回值不变
double qy = Math.ceil(qt); // qy的值为2.0
double qu = Math.ceil(qt); // qu的值为2.0

rint()
操作的参数只能是double类型,返回与参数最接近的整数,返回的数据类型为double
double qi = Math.rint(v);

round()
操作的参数只能是double类型,将参数四舍五入返回一个最接近的int、long型值,方法会指定返回的数据类型
long qo = Math.round(v); // qo的值为1

min()和max()
min返回两个参数中的最小值,max返回两个参数中的最大值
int qp = Math.min(1, 2); // qp的值为1
int qa = Math.max(1, 2); // qa的值为2
参数类型与返回值类型相同
long qs = Math.max(1, 2);
double qd = Math.max(1, 2);

random()
返回一个0.0至1.0之间的随机数,返回值为double类型,该方法没有参数
double qf = Math.random();

exp()
返回自然数底数e的参数次方。

log()
返回参数的自然数底数的对数值。

pow()
返回第一个参数的第二个参数次方。

sqrt()
求参数的算术平方根。

sin()
求指定double类型参数的正弦值。

cos()
求指定double类型参数的余弦值。

tan()
求指定double类型参数的正切值。

asin()
求指定double类型参数的反正弦值。

acos()
求指定double类型参数的反余弦值。

atan()
求指定double类型参数的反正切值。

atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。

toDegrees()
将参数转化为角度。

toRadians()
将角度转换为弧度。

char类型数据处理详解

Character类提供针对char类型数据的处理方法

char s = 'a';
char m = 'A';

isLetter():判断字符是否为字母,是返回true,不是返回false
boolean a = Character.isLetter(s); // 返回结果为true

isDigit():判断字符是否为数字,是返回true,不是返回false
boolean b = Character.isDigit(s); // 返回结果为false

isWhitespace():判断字符是否为空白字符,是返回true,不是返回false
boolean c = Character.isWhitespace(s); // 返回结果为false

isUpperCase():判断字符是否为大写字母,是返回true,不是返回false
boolean d = Character.isUpperCase(s); // 返回结果为false

isLowerCase():判断字符是否为小写字母,是返回true,不是返回false
boolean e = Character.isLowerCase(s); // 返回结果为true

toUpperCase():将字符转换为大写,如果本身就是大写则返回值不变
char f = Character.toUpperCase(s); // f的值为A
char g = Character.toUpperCase(m); // f的值为A

toLowerCase():将字符转换为小写,如果本身就是小写则返回值不变
char h = Character.toLowerCase(s); // f的值为a
char j = Character.toLowerCase(m); // f的值为a

toString():将字符转换为长度为1的字符串
String k = Character.toString(s); // f的值为a,但是变成了String类型

String类型数据处理详解

String为字符串对象

创建字符串的两种方法

1.直接赋值创建,与变量一样存储在公共池
	String str = "Runoob"; 

2.调用String类当作对象创建,与对象一样存储在堆上
	String str2 = new String("abcdefg"); 

String类常用的构造方法

byte[] st = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 5 };
char[] s = { 1, 2, 3, 4, 5, 'a', 'b', 'c', 'd' };

默认构造方法
	String str3 = new String("abcdefg");
	System.out.println(str3);

通过byte数组构造字符串对象
	String str4 = new String(st);
	System.out.println(str4);

从byte数组的第2二位开始,构造一个长度为5的字符串
	String str5 = new String(st, 2, 5);
	System.out.println(str5);

通过char数组构造字符串对象
	String str6 = new String(s);
	System.out.println(str6);

从char数组的第2二位开始,构造一个长度为5的字符串
	String str7 = new String(s, 2, 5);
	System.out.println(str7);

String类常用方法

length()方法:返回字符串的长度,返回值为int类型
	int a = str.length(); // a的值为6
	System.out.println(a);

concat()方法:将两个字符串连接构成新的字符串,返回值为String类型
	String b = str.concat(str2); // b的值为“Runoobabcdefg”
	String c = "ABC".concat(str); // c的值为“ABCRunoob”
	String d = str.concat("abc"); // d的值为“Runoobabc”
	System.out.println(d + b + c);

isEmpty()方法:用于判断字符串是否为空,如果字符串是空格也不为空
	boolean e = str.isEmpty();
	System.out.println(e);

equals()方法:用于比较两个字符串是否相等
	boolean f = str.equals(str2);
	System.out.println(f);

equalsIgnoreCase()方法:用于将字符串与指定的对象比较,不考虑大小写
	boolean g = str.equalsIgnoreCase(str2);
	System.out.println(g);

 matches()方法:用于检测字符串是否匹配给定的正则表达式。
	boolean h = str.matches("正则表达式");
	System.out.println(h);

StringBuffer类和StringBuilder类

用于字符串修改

**区别:**:
String:获取字符串的属性,字符串修改需要创建新的字符串对象

StringBuffer:
	与String的区别:对字符串进行各种修改操作,不需创建新的对象
	与StringBuilder的区别:多线程同步访问
	
StringBuilder:速度快,但不能在多线程中同步访问

**用法:**
创建字符串类型的对象缓冲区,与创建对象的方式一样,但是对象缓冲区是空的
	StringBuffer st = new StringBuffer(10); // 参数指定对象缓冲区的初始大小
	StringBuilder str = new StringBuilder(10);

append(): 将括号中的参数追加到此字符序列
	st = st.append(15); // 参数可以是多种类型数据

insert(int offset, int/String);将 int 参数的字符串表示形式插入此序列中。 对象缓冲区为空时不可使用
	st = st.insert(2, 15); // 从字符串索引的第2位插入15
	st = st.insert(8, "abcde"); // 从字符串索引的第8位插入”abcde“

	str = str.insert(2, 15);
	str = str.insert(8, "abcde");

delete():去掉字符串索引的第2到第5位的字符,返回新的字符串
	st = st.delete(2, 5);

reverse():将字符串的字符顺序反过来
	st = st.reverse();

replace(int start, int end, String str):
	// 替换字符串中的一小段,第一个参数和第二个参数分别为替换的索引开始和结束位置,第三个参数为要替换的字符串
	st = st.replace(2, 5, "msnsss"); // 将字符串中索引2到5的位置替换为“msnsss”

charAt(int index):
	char a = st.charAt(5); // 返回字符串索引第5个字符,返回值为char类型
	System.out.println(a);

五、Java数组

数组的声明,创建,初始化

格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
	int[] ms = new int[2]; // 声明和创建数组 ,这种方式只能在方法体里面声明,否则分号会报错
	ms[0] = 1; // 数组初始化
	ms[1] = 2;

格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
	int[] ml = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; // 声明,创建,初始化一步完成
	int[] mq = { 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

数组处理

遍历打印数组元素
	for (int i = 0; i < mq.length; i++) {	//length属性为数组的长度
		System.out.println(mq[i] + " "); 
	}
	
遍历打印数组元素的第二种方法
	for (int h : mq) {			//h的类型与数组元素一致
		System.out.println(h);
	}
	
计算所有元素的总和,只能用于数字类型的数组
	double as = 0;
	for (int i = 0; i < mq.length; i++) {
		as += mq[i]; 
	}		
	System.out.println("元素总和为 " + as);

查找最大元素
	int ma = ml[0]; 		// 创建一个变量初始化为数组的第一个元素值
	for (int i = 1; i < ml.length; i++) { 		// 从数组的第二个元素开始遍历
		if (ml[i] > ma) { 		// 如果当前遍历的元素大于ma
			ma = ml[i]; 		// ma的值变为当前元素
		}
	}
	System.out.println("数组中的最大值为" + ma);

Arrays类中常用的数组操作静态方法

int[] ar = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int[] aq = new int[] { 1, 1, 2, 4, 5, 6, 5, 3, 9, 0 };

equals(long[] a, long[] a2)方法:比较两个数组,顺序和元素都相等返回true
	boolean a = Arrays.equals(ar, aq);	//括号中的两个参数必须是相同数据类型的数组
	System.out.println(a);
	
sort(Object[] a)方法:按自然顺序升序排列元素值
	Arrays.sort(ar);	//该方法无返回值,因此直接调用
	for (int h : ar) {
		System.out.println(h);
	}
	
binarySearch(Object[] a, Object key)方法:
	数组中查找某个指定的对象,查找成功返回该对象在数组中的索引值,找不到则返回-1
	Integer s = 2;
	int k = Arrays.binarySearch(ar, s);	//ar为数组,s为需要查找的对象(包括数据对象,数组对象等)
	System.out.println(k);
	
fill(int[] a, int val)方法:无返回值
	第一个参数为数组,第二个参数为指定的数组元素值(必须与数组元素类型相同)
	Arrays.fill(ar, 100);	// 将ar中所有的元素值全都修改为100
	for (int h : ar) {
		System.out.println(h);
	}
	
	Arrays.fill(ar,2,5,100);	//将ar中索引2到5之间的元素值修改为100	
	for (int h : ar) {
		System.out.println(h);
	}

数组常见异常

1.NullPointerException空指针异常,原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法
	int[] x = { 1, 2, 3 };
	System.out.println(x[1]);
	x = null;
	System.out.println(x[1]);	//数组是空的,所以访问时产生空指针
		
2.ArrayIndexOutOfBoundsException索引值越界,原因:访问了不存在的索引值
	System.out.println(x[3]);	//数组的索引从0开始,x数组最大索引为x[2],不存在x[3],产生错误

六、Java日期时间

日期时间需要导入的相关包

SimpleDateFormat:格式化日期:主要用于日期和字符串两种类中之间的转换
Calendar:日历类,设置和获取日期数据的特定部分
Date:导入时间操作类
GregorianCalendar:公历日历类(此类使用较少,暂未学习,本文不做讲解)

import java.text.SimpleDateFormat; 
import java.util.Calendar;
import java.util.Date; 
import java.util.GregorianCalendar;

Date类用法

Java提供了Date类来操作时间,该类有两个构造方法

创建时间对象
Date timea = new Date(); // 直接获取当前时间
Date timeb = new Date(1528190965484L); // 参数为从1970年01月01日到当前时间的毫秒数,long类型的参数后面加L

常用方法:
	long tim = timea.getTime(); // getTime()获取从1970年01月01日到当前时间的毫秒数
	boolean tim1 = timea.after(timeb); // timea比timeb晚返回true,否则返回false
	boolean tim2 = timea.before(timeb); // timea比timeb早返回true,否则返回false
	boolean tim3 = timea.equals(timeb); // timea比timeb相等返回true,否则返回false

	compareTo方法
	int tim4 = timea.compareTo(timeb);	// timea比timeb早返回负数,比timeb晚返回正数,相同返回0,如果参数不是Date类型会出现报错,抛出ClassCastException异常
	
把Date类型的时间转换为字符串String类型
	String st = timea.toString();

SimpleDateFormat类用法

SimpleDateFormat类格式化日期:主要用于日期和字符串两种类中之间的转换

创建时间格式对象
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

调用format()方法格式化日期,参数为日期,返回值为字符串
String sr = ft.format(timea); 

调用parse()方法将字符串转换为日期格式
Date  date = ft.parse(sr);

测量时间:
System.currentTimeMillis( );

Calendar类用法

Calendar类:设置和获取日期数据的特定部分

Calendar c = Calendar.getInstance();// 创建日历对象并初始化,默认是当前日期
c.set(2009, 6 - 1, 12); // set方法指定该对象的日期
c.get(2); // 获取对象指定字段的值

总结

暂时就写这么多吧,还有其他内容以后再陆续加上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值