Java基础

基本

基本符号,原始类型,语句,函数可参照 语言·基础

符号

另加

符号含义
>>>无符号右移

数据类型

有基础的数据类型,int,char(java的为2B),double,float,boolean
也可以导入类,每一个类就是一个数据类型

  • 默认导入包(java.lang)里有Integer,Float,Double,String,StringBuffer
  • 里面有各种各样的函数

Integer,Float,Double的实例会自动 装箱/拆箱 参与运算

类 class

  • +初始化块
  • +每个 变量/函数 在定义时,最前面单独定义权限
    初始化块:(创建实例时)在构造方法完成后立即执行,用{}括起来
权限 class 类名{
	成员变量
	初始化块({}<--------------------------------------------------------
	构造函数(即构造器,但不需要写返回值,名字与类名相同)
	访问器&更改器(即setter&getter)
	功能函数

	类变量(静态变量,static)
	类方法(静态方法,static}
继承类(extends)

类名后面写 " extends 被继承的类",

权限 类名 extends 被继承的类{
	代码块
}

这个被继承的类被叫做父类(超类、基类)
当前的类被叫做子类(派生类、孩子类)
只能继承一个类,不能继承多个父类

实现 1/多 接口(implements)

接口不是继承,但可以看成特殊的继承,
但是
里面的变量只能时 static/final 的,默认为public static final
里面的函数只能是

权限 类名 extends 被继承的类{
	代码块
}

类(定义/实例化)的使用

对于已经导入的,可以直接用类名
对于所有的类(不管 导入/没导入),都可以用 包名.类名

主函数的进入方法

在要运行的类里写一个public static的、名字为main的类方法(这个方法就是主函数),会自动找到这个main方法并执行。

public class 类名 {
    public static void main(String[] args) {
        主函数代码块
    }
}

导入(import)库

目的:用简单的名字使用类
系统默认导入import java.lang.*;

可以只导入包里的其中一个类
import java.util.Scanner;
也可以全部导入
import java.util.*;
也可以导入自己的类,从src开始,src不写
import lab1.Student;
/
如果出现两个名字一样的类,

  • 需明确用其中的一个
  • 比如同时导入了lab1和lab2里的Student。但用lab1的
  • import lab1.Student;明确Student指的是lab1里的
  • 用另一个的时候也可以用 lab2.Student

接口(interface)

interface 接口名{
	抽象方法
}

输入输出

inputStream
outputStream

系统输出 System.out.println();/System.out.print();
系统输入 java.util.Scanner.方法
文件输入
文件输出

字节流

InputStream

OutputStream

字符流

Reader

Writer

网络通信

TCP

//客户端
Socket(String ip,int port);

InetAddress ServerIP = InetAddress.getByName(String ip);
Socket socket = new Socket(InetAddress ip,int port);

OutputStream os = socket.getOutputStream();
//os.write(new String("").getBytes());
//用byte[] buffer 和 缓冲/管道流 转换,如Buffer,ByteArrayOutputStream
socket.shutdownOutput()//告知服务器传输完成
//关闭(后开启的先关闭),os.close,socket

//服务端
ServiceSocket serverSocket = new ServiceSocket(int port);//准备端口
Socket socket=serverSocket.accept();//等待连接
InputStream is = socket.getInputStream();

//关闭(后开启的先关闭),is,socket,serverSocker

UDP


UDP
//接受端
DatagramSocket socket = new DatagramSocket(int port);//开放接受端口
byte[] buffer = new 
DatagramPacket packet = new DatagramPacket(buffer,offset,length);
socket.receive(packet);
//发送端
InetAddress sendIP = InetAddress.getByName(String ip);
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(buffer,oddset,length,localhost,port);
//也可以用InetAddress:DatagramPacket packet = new DatagramPacket(buffer,oddset,length,sendIP);
socket.send(packet)

URL

URL url = new URL(String url);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
FileOutStream fos = new FileOutStream(String name);

多线程(import java.util.concurrent.*)

三种实现方式,本质时使用Thread和run

  • Runnable:用类实现Runnable(实现run),用这个创建Thread,并.start
  • Thread:用类继承Thread(实现run),并.start
  • Callable:用类实现Callable<>(实现call),这个创建FutureTask<>,创建Thread,并.start,可以用get得到返回值

Thread
静态方法
.currentThread() 得到当前线程
.sleep(int ) 休眠,但不放弃锁
.yield() 线程礼让

类方法
.start
.getName
.wait() //一直等待
.wait(long ) //等待一定时间
.notify //唤醒一个处于等待的线程
.notifyAll //唤醒所有处于等待的线程
.setPriority //设置优先级
.setdaemon(boolean ) //true则为守护线程,默认为false用户线程
.getState

synchronized
同步方法,同步代码块

volatile
变量同步

java.util.concurrent.locks.Lock
显示的锁
.lock
.unlock

线程池 ExcutorService
ExecutorService service= Executors.newFixedThreadPool(int );
service.exexute(Runnable );
service.exexute(Runnable );
service.exexute(Runnable );
service.shutdown();

扩展
java.util.concurrent.CopyOnWriteArrayList

数据库JDBC(import java.sql.*)

  • JDBC
    • JDBC 是 Java 访问数据库的标准规范,
    • 是一套接口
  • c3p0
    • 是一个开源的JDBC连接池

以下均为JDBC接口

JDBC使用方法

  1. 管理和注册数据库驱动 Driver;
Class.forName("com.mysql.jdbc.Driver");//注册jdbc mysql驱动,涉及到反射

//jdbcUrl=协议://ip:端口/数据库[?参数1=值1[&[参数2=值2]]]
//jdbcUrl=jdbc:mysql://localhost:3306/booklib?useUnicode=true&characterEncoding=UTF-8

//将用到的类
DriverManger
	static Connection getConnection (String url, String user, String password) //直接连接,url精确到库
	static Connection getConnection (String jdbcUrl, Properties info)
		Properties info = new Properties();//java.util.Properties;
Properties info
	info.setProperty("user","root");
	info.setProperty("password","root");

  1. 得到数据库连接 Connection;
Connection conn = DriverManger.getConnection(url,user,password);

//将用到的类
Connection conn//用函数生成对应的查询语句对象
	Statement createStatement()
	PreparedStatement prepareStatement(String sql)




  1. 1)得到执行语句 Statement |PreparedStatement;[1.5) 写入参数];2)执行 查询|更新;
//方法1:Statement,不预处理
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);//用于查询
int result = st.executeUpdate(sql);//用于更新

//方法2:PreparedStatement,预编译语句,防止SQL注入
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(下标,参数);
ResultSet rs = pst.executeQuery();//用于查询
int result = pst.executeUpdate();//用于更新

//将用到的类
Statement st
	int executeUpdate(String sql)//返回受影响的行数
	ResultSet executeQuery(String sql)//返回查询得到的结果集合
PreparedStatement pst
	//这个的sql可以用?占据部分位置,后续用PreparedStatement的setXxx方法填充对应位置
	int executeUpdate()//返回受影响的行数
	ResultSet executeQuery()//返回查询得到的结果集合
	void setXxx(int parameterIndex, xxx x);填充提前用?占据部分位置,下标从1开始,String较为常用
ResultSet rs
	boolean next()//下一条,没有下一条返回true
	数据类型 getXxx(String 字段名)//返回指定字段的值(但数据类型要写对)
  1. 根据结果集获得数据(返回的如果时int没什么好处理的)
String name = rs.getString("name");
Integer age = rs.getInt("age");//如果直接赋值给int可能产生 空指针NPE 异常
java.sql.Date date = rs.getDate("date");//得到的是java.sql.Date,是java.util.Date的子类,也可以直接赋值给java.util.Date
	//java.util.Date转java.sql.Date需要用new java.util.Date(sqlDate.getTime())
	//java.sql.Date只有日期,java.sql.Time只有时间,java.sql.Timestamp有日期时间

注解和反射

反射



Class clazz = 类名.class; 
Class clazz = 实例.getclass();
Class clazz = Class.forName(String name);//用类的全路径名加载类

Class
	Object newInstance()
	Class getSuperClass()
	Class[] getInterfaces()
	ClassLoader getClassLoader()
	
	
	Constructor[] getConstructors() //获得public构造方法(包括父类的)
	Constructor[] getDeclaredConstructors() //获得所有构造方法(包括父类的)
	Constructor getDeclaredConstructors(Object... parameterTypes)
	
	Method getMethod() //获得public非构造方法(包括父类的)
	Method getDeclaredMethod() //获得所有非构造方法(包括父类的)
	Method getMethod(String name,Object... parameterTypes)
	
	Field[] getFields() //获得public字段(包括父类的)
	Field[] getDeclaredFields() //获得所有字段(不包括父类的)
	
Field
	Object invoke(Object obj,Object... args)
	setAccessible(boolean )//true,将可使用private方法

Class,Constructor,Method,Field
	getAnnotations()
	getAnnotation()
泛型类
ParameterizeType
GenericArrayType
TypeVariable
WildcardType

注解
内置注解与元注解 用的时候可以只用某几个
元注解

内置注解
@Override //方法覆盖
@Deprecated //表示此方法已废弃
@SuppressWarnings(value={ , }) //抑制警告信息,('all')镇压全部
被注解对象

元注解,自定义注解 //编写自定义注解时,使用元注解修饰
@Target(value={ElementType.METHOD,ElementType.TYPE}) //注解被用在什么地方,方法、类型等
@REtention(value=RetentionPolicy.RUNTIME) //保存到何时,SOURCE<CLASS<RUNTIME
@Documented //可以不写,说明注解被包含在javadoc中
@Inherited //可以不写,被对象上的这个注解是可以继承的
@interface 字定义注解名{
	String value() default "";//定义了一个变量,默认public
	//...
}

使用字定义注解:@注解名(参数1=1,参数2=2...)
如果值只有1个,并且为'String value',则可以直接写值
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值