Java基础

1 数据类型

1.1 基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

类型 位长 默认值 取值范围 例子 包装类
byte(字节型) 8 0 -128-127 byte a=100 Byte
short(短整型) 16 0 -2^15~ 2^15-1 short s=1000 Short
int (整型) 32 0 -2^31~ 2^31-1 int a=100000 Integer
long(长整型) 64 0L -2^63~ 2^63-1 long a=100000L Long
float(单精度浮点型) 32 0.0f float f1=234.5f Float
double(双精度浮点型) 64 0.0d double d1=123.4 Double
boolean(布尔型) 1 false boolean one=true Boolean
char(字符型) 16 char letter='A' Character

1.2 包装类

由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;
包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int;

int m = 500;
integer obj = new Integer(m);//手动装箱
int n = obj.intValue();//手动拆箱
String str = ”123”;
int m = Integer.parseInt(str,10)//将字符串转换为整数,10表示进制,m最后输出为整数123
String s = Integer.toString(m)//将整数转换为字符串

1.3 引用数据类型

Java中的基本数据类型只有以上8个,除了基本类型,剩下的都是引用类型。引用类型指向一个对象,它的值是一个地址,如果一个变量保存的是一个对象的地址,那么该变量是引用类型的。
所有引用类型默认值都是null。

//首先给变量分配一个保存地址的空间,然后通过new Studeng()开辟一个空间,最后赋值给student
Student student=new Student();

1.4 Java常量

常量在程序运行时不能被修改,在Java中使用final关键字来修饰常量。

final double PI = 3.1415927
  1. 修饰变量:表示该变量被赋予的值是不可更改的。被final修饰的变量必须被初始化。
  2. 修饰对象:表示该变量被赋予的引用是不可变的。
  3. 定义方法:该方法不能别子类重写,但是不影响它被子类继承。
  4. 定义类:final类不允许被继承,编译器在处理时把所有方法都当做final的。因此final类比普通类拥有更高的效率。要想做到final类的属性值不可改变,还要给其增加final修饰。

1.5 String类

java.lang.String类使用了final修饰,不能被继承

String st r= "Hello World!"//创建字符串

1.5.1 常用方法

int len = str.length();//返回字符串长度
char ch = charAt(0);//返回字符串中指定位置的字符
String str1 = str.substring(2);//该方法从下标为2位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回
String str2 = str.substring(2,5);//该方法从下标为2位置起,从当前字符串中取出到下标为5-1位置的字符作为一个新的字符串返回
String str3 = "aa".concat("bb").concat("cc");//相当于String str = "aa"+"bb"+"cc"
int a = str.indexOf('o');//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1
int b = str.indexOf("W",2);//该方法从下标为2位置向后查找
int c = str.lastIndexOf("W")//从末尾位置向前查找
int d = str.lastIndexOf("W",2);//从下标为2位置向前查找
String str4 = str.toLowerCase();//全部转换为小写
String str5 = str.toUpperCase();//全部转换为大写
String str6 = str.replace('l','g');//字符串中所有l换程g
String str7 = str.replaceFirst("or","and");//用and替换遇到的第一个or子串
String str8 = str.replaceAll("asd","fgh");//用fgh替换所有asd子串
String str9 = str.trim();//去掉str两端的空格,中间的空格不做处理
boolean a = str.statWith("He");//判断str是否以He开头
boolean b = str.endWith("ld");//判断str是否以ld结尾
boolean c = str.contains("stu");//判断str中是否包含stu
String[] str10 = str.split(" ");//将str以空格分隔
String str11 = "test ".concat("file");//连接字符串
boolean retVal = " ".equals( str );//字符串比较

1.5.2 String、StringBuffer、StringBuilder区别

String(字符串常量):经常改变内容的字符串最好不要用String

String s="abc";//定义一个变量s,给其赋值"abc"
s=s+1;//创建一个新的对象s,用来执行s=s+1,旧的对象会被JVM的GC回收

StringBuffer(字符串变量-线程安全):字符串经常发生改变,可使用,主要是append()和insert()方法,append将字符串添加到末端,insert可添加到指定位置
StringBuilder(字符串变量-非线程安全):字符串经常发生改变,可使用,比StringBuffer效率高,两者方法基本相同
效率从高到底的顺序依次是:StringBuilder > StingBuffer > String

1.5.3 字符串拼接

String 对象的字符串拼接其实是被JVM 解释成了StringBuffer 对象的拼接,所以这时候String 对象的速度并不会比StringBuffer 对象慢,而特别是以下的字符串对象生成中,String 效率是远要比StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
在JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
如果你的字符串是来自另外的String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做
在大部分情况下 StringBuffer > String

1.6 数据类型转换

不能对boolean类型进行类型转换;不能把对象类型转换成不相关类的对象;在把容量大的类型转换为容量小的类型时必须使用强制类型转换;转换过程中可能导致溢出或损失精度

1.6.1 自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型。

char c1 = 'a';//定义一个char类型
int i1 = c1;//char自动类型转换为int

1.6.2 强制类型转换

条件是转换的数据类型必须是兼容的。

int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte

1.6.3 字符串与基本数据类型的转换

static String valueOf(char data[])
static String valueOf(char data[], int offset, int count)
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(float f)
static String valueOf(double d)

2 基本语法

2.1 public、protected、private、default区别

类内部 本包 子类 外包
public 可以访问 可以访问 可以访问 可以访问
protected 可以访问 可以访问 可以访问 不可访问
default 可以访问 可以访问 不可访问 不可访问
private 可以访问 不能访问 不可访问 不可访问

2.2 循环控制语句

  • while循环
  • do...while循环:至少会执行一次
  • for循环
  • foreach:不需要下标时可用
int [] numbers = {10, 20, 30, 40, 50};
 for(int x : numbers ){
     System.out.print( x );
 }

2.3 条件控制语句

  • if-else
  • switch-case

2.4 break与continue区别

break:跳出整个循环
continue:结束当此循环

3 异常

通常引起异常的原因包括用户输入了非法数据,要打开的文件不存在,网络通信时连接中断,JVM内存溢出等。

  • 检查性异常:编译时不能被忽略,需要显式地抛出或者try-catch掉,比如打开一个文件,可能这个文件不存在,FileReader类的构造方法SDK中有抛出异常,则调用的时候比如抛出异常或者try-catch,否则程序无法编译通过。


    image.png
  • 运行时异常:编译时被忽略,比如除法运算中除数为0。

  • 错误:错误不是异常。

  • 层次结构


    image.png
  • 常用异常方法

public String getMessage()//返回关于发生异常的详细信息
public void printStackTrace()//错误输出流
  • throws/throw关键字
    如果一个方法没有捕获到一个检查性异常,则该方法必须使用throws来声明。一个方法可以声明多个异常,多个异常之间用逗号隔开。
import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}
  • finally关键字:无法是否发生异常,finally代码块中的代码总是会被执行。
  • 声明自定义异常
    1.所有异常都必须是Throwable的子类
    2.写一个检查性异常类需要继承Exception类
    3.写一个运行时异常类需要继承RuntimeException类。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个publ...
    岳小川阅读 1,070评论 0 2
  • Java基础面试 Java基础面试... 1 1. Java基础知识... 5 1.1. Java源程序的扩展名是...
    来着何人阅读 1,322评论 0 1
  • 喜回忆,有时是一种可怕的习惯。它被说成念旧,说成情怀,说成一种温柔美好的东西,可怕的是当你想得深了,无法自拔的时候...
    PEIPEIEEE阅读 393评论 0 0
  • 我们知道一个人有12个星座面向的能量,这也是为什么通俗流行的星座上所讲的太阳星座特点我们总感觉能颇为适意的原因所在...
    粥游列国阅读 1,745评论 0 1
  • 本来是想好好地跟老婆沟通的,结果话还没说两句她就生气了,而且越说越气,最后你本来是想好好谈谈的目的,却以吵架收场。...
    叙良阅读 410评论 1 5

友情链接更多精彩内容