Java基础语法
2023-04-19 14:35:51 0 举报
AI智能生成
SE部分
作者其他创作
大纲/内容
命名规范
包名:xxxyyy
类名、接口名:XxxYyy
变量名、方法名:xxxYyy
常量名:xxx_yyy
类和对象
创建:类名称 对象名 = new 类名称();
static关键字
静态变量:任何对象都可以更改,也可以不创建该类对象去进行操作
静态方法:属于类,不属于对象,使用类名调用
静态代码块:给类变量进行初始化赋值,当第一次用到本类时,静态代码块执行唯一一次。静态内容优先非静态,因此静态代码块比构造方法先执行(每次new都会执行构造,但静态代码块只运行一次)
⚠️ 静态不能访问非静态,在内存中先有静态后有非静态
final关键字
变量:不能重新赋值
方法:不能被重写
类:不能被继承
⚠️
abstract和final关键字不能同时使用,因为矛盾
修饰的变量所有字母大写
封装、继承、多态
方法重写问题
子类方法的返回值必须 <= 父类方法的返回值范围
子类方法的权限必须 >= 父类方法的权限修饰符
this、super
this:代表当前对象的引用,访问本类的内容(谁调用代表谁)
super:代表父类的存储空间标识,访问父类的内容(父亲的引用)
抽象类
修饰符 abstract class 类名
抽象方法只包含一个方法名,没有方法体
包含抽象方法的类为抽象类
⚠️
不能直接new抽象类对象(因为抽象类的方法可能没有方法体)
抽象类的子类,必须重写抽象父类中所有的抽象方法
interface接口
⚠️
重写接口中抽象方法【必须】
重写接口中默认方法default【可选】
不能通过接口实现类的对象来调用接口当中的静态方法(通过接口名称直接调用静态方法)
接口没有静态代码块和构造方法
常量
[public] [static] [final] 数据类型 常量名 = 数据值;
必须进行赋值
需要大写字母(final型)
多实现(类实现接口)
一个类的直接父类是唯一的,但是一个类可以同时实现多个接口(public class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3...)
抽象方法:如果实现类没有覆盖重写所有接口当中的抽象方法,那么实现类必须写成抽象类 public abstract class
默认方法:如果父类中的方法和接口中的默认方法产生了冲突,优先使用父类中的方法
静态方法:接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法
多继承(接口继承接口)
一个接口能继承另一个或者多个接口
继承使用extends
⚠️
子接口重写默认方法时,default关键字需要保留。
子类重写默认方法时,default关键字不可以保留。
数组
arr.length
常用类
Scanner(完成接收键盘录入数据的操作)
【System.in代表从键盘进行输入】
Scanner sc = new Scanner ( System.in );
Scanner sc = new Scanner ( System.in );
【获取键盘输入的一个int数字】
int num = sc.nextInt ( );
System.out.println ("输入的Int数字是:" + num );
int num = sc.nextInt ( );
System.out.println ("输入的Int数字是:" + num );
【获取键盘输入的一个字符串】
String str = sc.next ( );
String str = sc.next ( );
Random(生成伪随机数)
Random r = new Random ( );
int num = r.nextInt ( );
int num1 = r.nextInt (10); //获取一个 [0,10) 的随机数
String(字符串)
初始化
String str = new String ( );
String str = "Hello!";
方法
oo.length ( );
oo.charAt ( );
oo.toCharArray ( ); 将当前字符串拆分为字符数组作为返回值
StringBuilder(可变字符序列)
初始化
StringBuilder sb = new StringBuilder( );
StringBuilder sb = new StringBuilder("itcast");
方法
oo.append (...); 添加任意类型数据的字符串形式,并返回当前对象自身
oo.toString ( ); 将当前StringBuilder对象转换为String对象
Arrays(包含数组的各种方法)
Arrays.toString (arr); 返回指定数组内容的字符串表示形式
Arrays.sort (arr);
Math(包含基本数学运算的方法)
Math.abs ( ); 返回double值的绝对值
Object(根类)
如果一个类没有特别指定父类, 那么默认则继承自Object类。
方法
需重写@Override
toString ( );
equals ( );
Date(日期时间)
new Date ( );
子类
DateFormat(抽象类)
DateFormat format = new SimpleDateFormat ( );
方法
oo.format ( ); 将Date对象格式化为字符串
oo.parse ( ); 将字符串解析为Date对象
Calendar(日历类)
System(提供大量静态方法,获取与系统相关的信息和操作)
包装类
Integer.parseInt ("Haha"); 将字符串参数转换为对应的int基本类型
集合
Collection(单列集合)
方法
oo.add ( e );
oo.clear ( );
oo.remove ( e );
oo.contains ( e );
oo.isEmpty ( );
oo.size ( );
oo.toArray ( );
子集合
List (有序)
方法
oo.add ( i, e ); 将指定的元素,添加到该集合中的指定位置上
oo.get ( i ); 返回集合中指定位置的元素
oo.remove ( i ); 移除列表中指定位置的元素, 返回的是被移除的元素
oo.set ( i, e ); 用指定元素替换集合中指定位置的元素,返回值的更新前的元素
实现类
ArrayList 大小可变的数组
LinkedList 双向链表
oo.addFirst ( e ) 将指定元素插入此列表的开头【默认add从队列右端加入】
oo.addLast ( e ) 将指定元素添加到此列表的结尾
oo.getFirst ( ) 返回此列表的第一个元素
oo.getLast ( ) 返回此列表的最后一个元素
oo.removeFirst ( ) 移除并返回此列表的第一个元素
oo.removeLast ( ) 移除并返回此列表的最后一个元素
oo.pop ( ) 从此列表所表示的堆栈处弹出一个元素【从栈顶弹出】
oo.push ( e ) 将元素推入此列表所表示的堆栈【从栈顶推进】【相当于addFisrt】
Set(无序、无重复)
HashSet(自动排序、无重复)
存放自定义类型元素时(系统无法判断对象是否相同),需重写hashCode和equals方法
子类
LinkedHashSet(按照输入排序、无重复)
Collections (集合工具类)
静态方法
Collections.addAll ( C, e ); 往集合中添加一些元素
Collections.shuffle ( L ); 打乱集合顺序
Collections.sort ( L ); 将集合中元素按照默认规则排序
Map(双列集合)
HashMap(自动排序、无重复)
方法
oo.put( K, V ); 把指定的键与指定的值添加到Map集合中
oo.remove( K ); 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值
oo.get( K ); 根据指定的键,在Map集合中获取对应的值
oo.containsKey( K ); 判断集合中是否包含指定的键
oo.keySet(); 获取Map集合中所有的键,存储到Set集合中(返回Set集合)
oo.entrySet(); 获取到Map集合中所有的键值对对象的集合(Set集合)
Set<Entry<String,String>> entrySet = map.entrySet();
Entry.getKey ( ); 获取Entry对象中的键
Entry.getValue ( ); 获取Entry对象中的值
⚠️ Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了
子类
LinkedHashMap(按照输入排序、无重复)
异常
Throwable
方法
printStackTrace ( ); 打印异常的详细信息
String getMessage ( ); 获取发生异常的原因
子类
Error
Exception
throw
用在方法体内,跟的是异常对象名
表示抛出异常,由方法体内的语句处理
执行 throw 一定抛出了某种异常
throws
用在方法声明后面,跟的是异常类名
表示抛出异常,由该方法的调用者来处理
表示出现异常的一种可能性,并不一定会发生这些异常
try…catch
会处理异常,程序继续执行
final代码块
语法:try...catch....finally
作用:在finally代码块中存放的代码都是一定会被执行的
多线程
创建
方式一:Thread类
构造方法
public Thread ( ) : 分配一个新的线程对象
public Thread (String name) : 分配一个指定名字的新的线程对象
public Thread (Runnable target) : 分配一个带有指定目标新的线程对象
public Thread (Runnable target,String name) : 分配一个带有指定目标新的线程对象并指定名字
常用方法
public String getName ( ) : 获取当前线程名称
public void start ( ) : 导致此线程开始执行; Java虚拟机调用此线程的run方法
public void run ( ) : 此线程要执行的任务在此处定义代码
public static void sleep (long millis) : 使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)
public static Thread currentThread ( ) : 返回对当前正在执行的线程对象的引用
方式二:Runnable接口
优势(相比Thread)
适合多个相同的程序代码的线程去共享同一个资源
可以避免java中的单继承的局限性
增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立
线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类
线程安全
同步代码块
synchronized ( 同步锁 ) { 需要同步操作的代码 }
同步方法
public synchronized void method ( ) { 可能会产生线程安全问题的代码 }
Lock锁
public void lock ( ) : 加同步锁
public void unlock ( ) : 释放同步锁
线程状态
线程池
ExecutorService service = Executors.newFixedThreadPool (2); //包含2个线程对象
service.submit (接口实例对象);
service.shutdown ( );
0 条评论
下一页