Java 期末复习 (已完结)
第一章第一章比较基础 大家会配环境变量 就好 还有掌握下面的了解 java是面向对象编程JDK :开发者工具JRE: Java运行环境JVM:Java虚拟机第二章注意第二个为protected先上个DJ哦写错了**变量注意$符号开头可以数组中常用方法1boolean b1 = Arrays.equals(array1, array2);2int index=Arrays.binarySearch(
第一章
推荐 张老师讲的这个课哈
https://www.bilibili.com/video/BV19X4y1M7RH
https://www.bilibili.com/video/BV19X4y1M7RH
第一章比较基础 大家会配环境变量 就好 还有掌握下面的
了解 java是面向对象编程 JDK :开发者工具 JRE: Java运行环境 JVM:Java虚拟机
第二章
注意第 二 个为 protected
先上个DJ 哦写错了 变量注意**$符号开头**可以
数组中常用方法
1 boolean b1 = Arrays.equals(array1, array2);
2 int index=Arrays.binarySearch(int[] a, int value): 二分搜索算法在指定的数组中搜索指定的值,并返回该值所在索引位置;若查询不到,则返回-1
3 Arrays.sort(array); 升序排列数组
4 fill(int[] a, int value)方法:给指定数组的每个元素分配指定的值
5 toString(int[] a)方法:返回一个指定数组的字符串表现形式 输出结果为 [1, 2, 3, 4]
在数组这块怎能少了 算法排序?
二分查找
`public static int biSearch(int []array,int a) {
int lo=0;
int hi=array.length-1;
int mid;
while(lo<=hi){
mid=(lo+hi)/2;
if(array[mid]==a){
return mid+1;
}else if(array[mid]<a){
lo=mid+1;
}else{
hi=mid-1;
}
}
return -1;}
选择排序
//选择排序的优化
for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int k = i;
for(int j = k + 1; j < arr.length; j++){// 选最小的记录
if(arr[j] < arr[k]){
k = j; //记下目前找到的最小值所在的位置
}
}
//在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
if(i != k){ //交换a[i]和a[k]
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
冒泡排序
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
再来看下枚举数组:
第三章
可以自动 向上 转
同时注意易错点:::
int()ab 不是→→ int () (ab) 注意 区分 (a是int ,b为double)
最最重要的可能是运算符了 一般不是太考 C语言都考烂了 找bug极小可能用下
大家最好全记住 不想的话 也可以找些重点记 比如1-4 和 ?表达式
java特有的 枚举 short byte
第四章
变量 又叫 属性
方法 又叫 行为
那什么是对象 什么是类 关系是怎样的呢??
1 他们之间关系:
2 如何定义类 ?
注意
1 public 可以修饰类 但是一旦修饰了 那类名应该与文件名相同 (也可以不写)
2 类名 首字母一定要 大写
3 讲一下构造方法
6 子类不会继承父类的构造器,而是在子类被实例化时会默认调用父类的空构造器
如果父类的构造器被 重载,那么子类中的构造器也必须初始化父类的构造器
举个例子哈
这下大家应该懂了吧 嘿嘿嘿
4 方法的 重载
5 讲几个常出现 的关键字
import static :导入类的静态属性
6 最最重要的 来了 面向对象的三大特征??
封装的好处**?
1实现数据项和方法的隐藏,
2 实现隐藏隔离,只允许外部对类做有限的访问,开发者可以自由的改变类的内部实现
3 提高了代码的重用性
**
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
7 什么是抽象类?? abstract
8 接口 ?? interface
1. 类实现接口: implements 可以实现多个接口+
2. 但是接口 可以继承
3. 方法的重写😦)Override
9 内存机制
方法区 逻辑上 可以认为在****堆中
10 Object类
11 垃圾回收
7
自动装箱?
自动拆箱?
子类想重写父类的方法 必须 返回值类型名字 参数都要与父类一致
第五章
下面到了工程中常用的 多线程
1 定义多线程类
2 多线程的状态
那么如何停止线程呢?
自定义函数 和 标志符 停止的时候调用函数
public class SafeStopThread extends Thread{
private volatile boolean stop = false;
@Override
public void run(){
while(!stop){//判断线程是否运行
//Do something
}
}
public void terminate(){
stop = true;
}
如果使用暴力的Stop函数 那么子线程业务逻辑就没有办法完成了,如果业务逻辑中包含像资源回收,情景初始化等,这样就很危险了,而且这种操作很具有隐蔽性,子线程执行到何处会被关闭很难定位,会为以后的维护带来很多麻烦。
聊聊内部类和String类
分为
1 匿名内部类
格式
2
成员内部类(可以使用private、 proteted、 public 任意进行修饰。类文件: 外部类$内部类.class)
注意区分 静态内部类 直接.类名
不理解是吧 再给你例子
注意
但是静态内部类 可以访问外部类的静态属性和方法
String类
聊聊正则表达式
注意
1 * 为向右的
2 注意这个 \ w 代表 字母 或 数字 或者下划线* 或者汉字
3 注意 . 代表所有字符
4 ==-==代表是 取反
5 应该有 \ 两个 例 \s
6 {n,} 代表出现n至无穷次
使用的时候 一般都是 String regex=" XXXXX"
然后用 str2 .matches(regex)
聊聊 Swing
1 JFrame 是大多数应用程序的基本窗口,有边框、标题和按钮,允许程序员把其他组件添加到它里面,把它们组织起来
2 JPanel:最普通的面板,没有特殊功能,主要用来容纳其它控件。
3 Swing基本组件
4 设置窗口属性
this.setTitle("演示流布局管理器"); //设置标题
this.setSize(200, 200); //设置
this.setLocation(200, 200); //设置窗体出现的位置
this.setVisible(true); //设置窗体可见
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的同时关闭jvm
this.setResizable(false); //Resizable:可调整大小的,设置窗体大小不可变
5
- 边界布局管理器(BorderLayout)
this.add(jButton, BorderLayout.CENTER); //布局的中间
this.add(jButton2, BorderLayout.NORTH); //布局的北边
this.add(jButton3, BorderLayout.WEST); //布局的西边
this.add(jButton4, BorderLayout.EAST); //布局的东边
this.add(jButton5, BorderLayout.SOUTH); //布局的南边
2 `流布局管理器(FlowLayout)
this.add(jButton1);
this.add(jButton2);
this.add(jButton3);
this.add(jButton4);
this.add(jButton5);
//设置流布局
// this.setLayout(new FlowLayout()); //默认布局方式为居中
this.setLayout(new FlowLayout(FlowLayout.LEFT));`
3 网格布局管理器(GridLayout)
//创建组件
for(int i = 0; i<size; i++){
jButton[i] = new JButton(String.valueOf(i+1));
}
//添加组件
for(int i = 0; i<size; i++){
this.add(jButton[i]);
}
//设置网格布局 this.setLayout(new GridLayout(3, 3, 10, 30));`
★★★★★ ==事件==添加方法
1首先这个类要实现ActionListener接口
public class TestChange implements ActionListener {
2.添加事件方法
方法一:
private void addEventHandler(){
jb.addActionListener(this);
方法二:
private void addEventHandler(){
jb1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("+");
jl.setText(++count+" ");
}
});
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("-");
jl.setText(--count+" ");
}
});
}
3 重写方法actionPerformed(ActionEvent e)
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("TestChange.actionPerformed()");
//获得文本框中的数据
String s1=jtf1.getText();
String s2=jtf2.getText();
System.out.println(s1);
System.out.println(s2);
//设置文本框中的数据
jtf1.setText(s2);
jtf2.setText(s1);
}
期末考试常考 易错★★★★★
上面会造成编译错误
★在JAVA里面没有这种if(int) 只有if(true/false)
★构造方法也可以 重载
★父类:
OutputStream
★子类:
FileOutputStream
★
★科学计数法 后面的e /E 后面加整数 (可正 可负)
★Java方法的重载:返回类型、修饰符可以相同,也可不同。要求同名的方法必须有不同的参数表(类型和个数都不同),**仅有返回类型不同是不足以区分两个重载的方法。
★抽象方法指一些只有方法声明,而没有具体方法体的方法。抽象方法一般存在于抽象类或接口中,所以必须重写 抽象类中的 抽象方法
★
★
★
★TreeSet 里面有 iterator()方法 获得一个Iterator
用法 Iterator iter=treeset**.iterator();**
下面调用的话 用while(iter.hasNext() ){
XX =iter.next();}
还有一些 fill .max .min .
Collections.copy(list,li): 前面一个参数是目标列表 ,后一个是源列表
Collections.fill(li,“aaa”);使用指定元素替换指定列表中的所有元素。
int count = Collections.indexOfSubList(list,li);
返回指定源列表中第一次出现指定目标列表的起始位置
★抽象类和接口都不能实例化,但可以声明
★∥声明抽象类
Student student;∥OK
一个类继承了某个抽象类,或实现了某个接口,其中的抽象方法全部都必须要实现
★抽象类中的成员可以是private、default(即不写访问修饰符)、protected、public的,而接口中的成员全都是public的
★抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量
★抽象方法的类一定是抽象类,而抽象类不一定有抽象方法
★事件处理的三要素是什么?
-
事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;
-
事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
-
事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;
★在Swing中,对话框有几种?
五种:文件对话框、消息对话框、输入对话框、确认对话框、颜色对话框
★MouseMotionListener接口实现对鼠标移动事件的监听,因此包括2个方法: mouse Moved 和 mouse Dragged。
★线程是能独立运行的程序
★在编写访问数据库的Java程序时,ResultSet对象的作用是 存储查询结果
★ this和super ➡不能用在 main() 方法中
★
字节流,所有的InputStream和OutputStream的子类都是,处理二进制数据,它是按字节来处理的
字符流 处理 文本文件
二者 读取的字节数 不同
字符流转化为字节流时,使用
byte[] String.getBytes(String charsetName)
★
线程对象的生命周期中 状态。
(五种基本状态:新建;就绪;运行;阻塞;死亡)
对于可随着窗口的宽度变化而改变相应的控件的位置的布局对象是哪一种
FlowLayout
★ 用abstract定义的类 只能被继承
★ 每个使用组件的程序必须有一个 容器
★JPanel中的默认布局是FlowLayout
★线程的优先级用1-10之间的整数表示,数值越大优先级越高,即越高执行越快,默认的优先级为5。
★ 多个线程间共享的数据称为临界资源
★Java语言采用多种机制来保证可移植性,其中最主要的是___java虚拟机__
★将字符串转化为字节数组的方法是___getBytes();。
★在Swing中,带有滚动条的面板的类名是__JScrollPanel____
★组合框(JComboBox)是____文本框和列表的组合
★Java程序可以用纯Java的___JDBC_**驱动程序,**实现与数据库连接
★.在Java语言中,文件随机访问可以利用___RandomAccessFile___类实现。
★带 reader或者 writer的为字符流
★C++ java区别?
1 JAVA是纯面向对象语言,所有变量和方法都在类中声明和定义
C++保留了部分面向过程特性。
2 C++由编译器直接编译成本地机器识别的机器语言
JAVA是半编译半解释型语言,由编译器得到class字节码文件,然后由虚拟机解释执行。
3 JAVA没有指
C++ 存在各种指针*
4 C++可以实现多继承抽象基类
java只可以实现单继承,但可以进行接口多实现
5 C++可以进行函数重载、还可以进行运算符重载
JAVA只允许函数重载、不允许运算符重
6 JAVA引入了真正的数组,将指针从中去掉
C++采用的是“伪数组”,需要时刻关注数组越界问
7 JAVA引入了真正的数组,将指针从中去掉
C++采用的是“伪数组”,需要时刻关注数组越界问题
8 C++字符串string是可变的,JAVA的String是不可变
9 C++中抽象基类用virtual
java里面抽象类用abstract,接口用interface.
10 JAVA中有final来定义常量,synchronized用来做同步
★
★
★
★数据库连接编程题
import java.sql.*;
public class TestConnectionSQL {
public static void main(String[] args) throws SQLException {
Connection connection=null;
Statement statement;
ResultSet rs;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
System.out.println(e);
}
String url="jdbc:mysql://localhost:3306/student?"+"useSSL=false&characterEncoding=utf-8";
String user="root";
String password="root";
try {
connection=DriverManager.getConnection(url,user,password);
}catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
try {
statement=(Statement) connection.createStatement();
rs=((java.sql.Statement) statement).executeQuery("select * from grade where c_grade>60&&java_grade>60");
while(rs.next()) {
String name=rs.getString(2);
String stu_idString=rs.getString(5);
System.out.println("所有成绩大于60的 学生学号 和姓名为: "+stu_idString+" "+name);
}
connection.close();
}catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
}
}
★ 手写 计算器
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.text.View;
public class ComputerLisener implements ActionListener {
WindowView view;
String fuhao;
public void setView(WindowView windowView) {
this.view=windowView;
}
public void setFuHao(String fuhao) {
this.fuhao=fuhao;
}
@Override
public void actionPerformed(ActionEvent e) {
try{
Double num1=Double.valueOf(view.textInput1.getText());
Double num2=Double.valueOf(view.textInput2.getText());
Double result = null;
Boolean isShow=true;
if(fuhao.equals("+")) {
result=num1+num2;
}
else if(fuhao=="-") {
result=num1-num2;
}else if(fuhao=="*") {
result=num1*num2;
}else if(fuhao=="/") {
result=num1/num2;
}
else{isShow=false;}
if(isShow) {
view.textShow.append(num1+""+fuhao+""+num2+" = "+result);
}
}catch (Exception e1) {
view.textShow.append("请输入数字");
} } }
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class OperaterLIstener implements ItemListener {
WindowView view;
public void setView(WindowView view) {
this.view = view;
}
@Override
public void itemStateChanged(ItemEvent e) {
String fuhao=view.choiceBox.getSelectedItem().toString();
view.computer.setFuHao(fuhao);
}}
public class CaculatorDemo {
public static void main(String[] args) {
new WindowView();
}
}
import java.awt.FlowLayout;
import java.util.Arrays;
import javax.naming.InitialContext;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class WindowView extends JFrame {
public OperaterLIstener operater=new OperaterLIstener();
public ComputerLisener computer=new ComputerLisener();
public JTextField textInput1;
public JTextField textInput2;
public JTextArea textShow;
public JButton button;
public JComboBox<String> choiceBox=new JComboBox<String>();
public WindowView(){
setBounds(250,200,600,500);
setTitle("简单计算器");
setLayout(new FlowLayout());
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
textInput1=new JTextField(10);
textInput2=new JTextField(10);
textShow=new JTextArea(5,10);
textShow.setEditable(false);
button=new JButton("计算");
choiceBox.addItem("请下拉选择符号"); //必须有 否则不选一下不能获取符号
String[] a= {"+","-","*","/"};
for (int i = 0; i < a.length; i++) {
choiceBox.addItem(a[i]);
}
operater.setView(this);
computer.setView(this);
choiceBox.addItemListener(operater);
button.addActionListener(computer);
add(textInput1);
add(choiceBox);
add(textInput2);
add(button);
add(new JScrollPane(textShow));
}}
更多推荐
所有评论(0)