201871010104-陈园园 《面向对象程序设计(java)》第十周学习总结

项目 内容
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/
这个作业要求在哪里 https://www.cnblogs.com/lily-2018/p/11441372.html
作业学习目标

(1) 掌握java异常处理技术;

(2) 了解断言的用法;

(3) 了解日志的用途;

(4) 掌握程序基础调试技巧;

第一部分:总结理论知识

1、异常:在程序的执行过程中所发生的异常事件,它 中断指令的正常执行。

2、Java的异常处理机制可以控制程序从错误产生的 位置转移到能够进行错误处理的位置。

3、异常分类:Java把程序运行时可能遇到的错误分为两类:

–非致命异常:通过某种修正后程序还能继续执行。 这类错误叫作异常。如:文件不存在、无效的数组 下标、空引用、网络断开、打印机脱机、磁盘满等。 Java中提供了一种独特的处理异常的机制,通过异 常来处理程序设计中出现的错误。

–致命异常:程序遇到了非常严重的不正常状态,不 能简单恢复执行,是致命性错误。如:内存耗尽、 系统内部错误等。这种错误程序本身无法解决。

4、Java中的异常类可分为两大类:

- Error类层次结构描述了Java 运行时系统的内部错误 和资源耗尽错误。应用程序不应该捕获这类异常,也 不会抛出这种异常 。

- Exception Exception类:重点掌握的异常类。Exception层次结 构又分解为两个分支:一个分支派生于 RuntimeException;另一个分支包含其他异常。

5、 编译器要求程序必须对这类异常进行处理 (checked),称为已检查异常。

6、声明抛出异常:如果一个方法可能会生成一些异 常,但是该方法并不确切知道如何对这些异常事 件进行处理,此时,这个方法就需声明抛出这些 异常。

“一个方法不仅需要告诉编译器将要返回什么值 ,还要告诉编译器可能发生什么异常”。

7、声明抛出异常在方法声明中用throws子句中来指 明。例如: – public FileInputStream(String name ) throws FileNotFoundException

8、以下4种情况需要方法用throws子句声明抛出异常:

–方法调用了一个抛出已检查异常的方法。

–程序运行过程中可能会发生错误,并且利用throw语句 抛出一个已检查异常对象。

–程序出现错误。例如,a[-1] = 0;

–Java虚拟机和运行时库出现的内部异常。

9、一个方法必须声明该方法所有可能抛出的已检查异常,而 未检查异常要么不可控制(Error),要么应该避免发生 (RuntimeException)。如果方法没有声明所有可能发生 的已检查异常,编译器会给出一个错误消息。

10、当Java应用程序出现错误时,会根据错误类型产 生一个异常对象,这个对象包含了异常的类型和 错误出现时程序所处的状态信息。把异常对象递 交给Java编译器的过程称为抛出。

11、程序运行期间,异常发生时,Java运行系统从异常 生成的代码块开始,寻找相应的异常处理代码,并 将异常交给该方法处理,这一过程叫作捕获。

12、catch块是对异常对象进行处理的代码;  每个try代码块可以伴随一个或多个catch语句,用于处理 try代码块中所生成的各类异常事件;  catch语句只需要一个形式参数指明它所能捕获的异常类 对象,这个异常类必须是Throwable的子类,运行时系统 通过参数值把被抛出的异常对象传递给catch块;  catch块可以通过异常对象调用类Throwable所提供的方法。

日志:

全局日志记录(global logger)

Logger.getGlobal().info("test");

Logger.getGlobal().serLevel(Level.OFF);

可以使用getLogger方法创建或获取记录器,未被任何变量引用的日志记录器可能会被垃圾回收,所以可以使用静态变量存储日志记录器的一个引用

private static final Logger myLogger = Logger.getLogger("com.mycompany.myapp");

第二部分:实验部分

实验1:用命令行与IDE两种环境下编辑调试运行源程序ExceptionDemo1、ExceptionDemo2,结合程序运行结果理解程序,掌握未检查异常和已检查异常的区别。

//异常示例1
public class ExceptionDemo1 {
public static void main(String args[]) {
int a = 0;
System.out.println(5 / a);
}
}

运行结果如下:

  

//异常示例2
import java.io.*; public class ExceptionDemo2 {
public static void main(String args[])
{
FileInputStream fis=new FileInputStream("text.txt");//JVM自动生成异常对象
int b;
while((b=fis.read())!=-1)
{
System.out.print(b);
}
fis.close();
}
}

运行结果如下:

未检查异常和已检查异常的区别:

对未检查的异常(unchecked exception )的几种处理方式:

1、捕获。
2、继续抛出。
3、不处理。
对检查的异常(checked exception,除了RuntimeException,其他的异常都是checked exception )的几种处理方式:
1、继续抛出,消极的方法,一直可以抛到java虚拟机来处理。
2、用try...catch捕获。
注意,对于检查的异常必须处理,或者必须捕获或者必须抛出。

实验2 导入以下示例程序,测试程序并进行代码注释。

测试程序1:

1)在elipse IDE中编辑、编译、调试运行教材281页7-1,结合程序运行结果理解程序;

2)在程序中相关代码处添加新知识的注释;

3) 掌握Throwable类的堆栈跟踪方法;

代码如下:

package stackTrace;

import java.util.*;

/**
* A program that displays a trace feature of a recursive method call.
* @version 1.10 2017-12-14
* @author Cay Horstmann
*/
public class StackTraceTest
{
/**
* Computes the factorial of a number
* @param n a non-negative integer
* @return n! = 1 * 2 * . . . * n
*/
public static int factorial(int n)
{
System.out.println("factorial(" + n + "):");
//调用Throwable类中的getStackTrace方法得到StackTraceElement对象的一个数组
Throwable t=new Throwable();
//StackTraceElement类含有能够获得文件名和当前执行的代码行号的方法,同时,还含有能够获取类名和方法名的方法。
StackTraceElement[] frames = t.getStackTrace();
for (StackTraceElement f:frames)
System.out.println(f);
int r;
if (n <= 1) r = 1;
else r = n * factorial(n - 1);
System.out.println("return " + r);
return r;
}
//打印递归阶乘函数的堆栈情况
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
{
System.out.print("Enter n: ");
int n = in.nextInt();
factorial(n);
}
}
}

运行结果如下:

测试程序2:

1)Java语言的异常处理有积极处理方法和消极处理两种方式;

2)下列两个简单程序范例给出了两种异常处理的代码格式。在elipse IDE中编辑、调试运行源程序ExceptionTest.java,将程序中的text文件更换为身份证号.txt,要求将文件内容读入内容,并在控制台显示;

3)掌握两种异常处理技术的特点。

积极处理方式代码如下:

//积极处理方式  
import java.io.*; class ExceptionTest {
public static void main (string args[])
{
try{
FileInputStream fis=new FileInputStream("text.txt");
}
catch(FileNotFoundExcption e)
{ …… }
……
}
}

代码如下:

//积极处理方式  

  import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
class ExceptionTest {
public static void main (String args[])
{
File fis=new File("身份证号.txt");
try{ FileReader fr = new FileReader(fis);
BufferedReader br = new BufferedReader(fr);
//捕获并处理异常語句
try {
String s, s2 = new String();
while ((s = br.readLine()) != null) {
s2 += s + "\n ";
}
br.close();
System.out.println(s2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

消极处理方式代码如下:

//消极处理方式

import java.io.*;
class ExceptionTest {
public static void main (string args[]) throws FileNotFoundExcption
{
FileInputStream fis=new FileInputStream("text.txt");
}
}

运行代码如下:

import java.io.*;

public class desd {
public static void main(String args[]) throws IOException
{
FileInputStream fis=new FileInputStream("D:\\身份证号.txt");
int b;
while((b=fis.read())!=-1)
{
System.out.print(b);
}
fis.close();
}
}

运行结果如下:

实验3: 编程练习

1) 编写一个计算器类,可以完成加、减、乘、除的操作;

2) 利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;

3)将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt;

在以上程序适当位置加入异常捕获代码。

代码如下:

package canlie;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner; public class boxian {
public static void main(String[] args) { Scanner in = new Scanner(System.in);
shixun counter = new shixun();
PrintWriter out = null;
try {
out = new PrintWriter("text.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int sum = 0;
for (int i = 1; i <=10; i++) {
int a = (int) Math.round(Math.random() * 100);
int b = (int) Math.round(Math.random() * 100);
int m= (int) Math.round(Math.random() * 3); switch(m)
{
case 0:
System.out.println(i+": "+a+"/"+b+"="); while(b==0){ b = (int) Math.round(Math.random() * 100); } int c0 = in.nextInt();
out.println(a+"/"+b+"="+c0);
if (c0 == counter.division(a, b)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
} break; case 1:
System.out.println(i+": "+a+"*"+b+"=");
int c = in.nextInt();
out.println(a+"*"+b+"="+c);
if (c == counter.multiplication(a, b)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
}
break;
case 2:
System.out.println(i+": "+a+"+"+b+"=");
int c1 = in.nextInt();
out.println(a+"+"+b+"="+c1);
if (c1 == counter.add(a, b)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
} break ;
case 3:
System.out.println(i+": "+a+"-"+b+"=");
int c2 = in.nextInt();
out.println(a+"-"+b+"="+c2);
if (c2 == counter.reduce(a, b)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
}
break ; } }
System.out.println("成绩"+sum);
out.println("成绩:"+sum);
out.close(); }
}
package canlie;
public class shixun {
private int a;
private int b;
public int add(int a,int b)
{
return a+b;
}
public int reduce(int a,int b)
{
return a-b;
}
public int multiplication(int a,int b)
{
return a*b;
}
public int division(int a,int b)
{
if(b!=0)
return a/b;
else return 0;
} }

运行结果如下:

实验4:断言、日志、程序调试技巧验证实验。

实验程序1:

1)在elipse下调试程序AssertDemo,结合程序运行结果理解程序;

2)注释语句test1(-5);后重新运行程序,结合程序运行结果理解程序;

3) 掌握断言的使用特点及用法。

代码如下:

//断言程序示例
public class AssertDemo {
public static void main(String[] args) {
test1(-5);
test2(-3);
} private static void test1(int a){
assert a > 0;
System.out.println(a);
}
private static void test2(int a){
assert a > 0 : "something goes wrong here, a cannot be less than 0";
System.out.println(a);
}
}

 运行结果如下:

注释语句test1(-5);后代码如下:

package JavaTest;
//断言程序示例
public class AssertDemo {
public static void main(String[] args) {
// test1(-5);
test2(-3);
} private static void test1(int a){
assert a > 0;
System.out.println(a);
}
private static void test2(int a){
assert a > 0 : "something goes wrong here, a cannot be less than 0";
System.out.println(a);
}
}

 运行结果如下:

关于断言:

断言检查只用于开发和测阶段,只应该用于在测试阶段确定程序内部的错误位置。。java中使用assert作为断言的一个关键字。

语法1:assert expression;                //expression代表一个布尔类型的表达式,如果为真,就继续正常运行,如果为假,程序退出

语法2:assert expression1 : expression2;                   //expression1是一个布尔表达式,expression2是一个基本类型或者Object类型,如果expression1为真,则程序忽略expression2继续运行;如果expression1为假,则运行expression2,然后退出程序。

实验程序2:

1)用JDK命令调试运行教材298页-300页程序7-2,结合程序运行结果理解程序;

2)并掌握Java日志系统的用途及用法。

代码如下:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.logging.*;
import javax.swing.*; /**
* A modification of the image viewer program that logs various events.
* @version 1.03 2015-08-20
* @author Cay Horstmann
*/
public class LoggingImageViewer
{
public static void main(String[] args)
{
//将所有消息记录到应用程序特定的文件中
if (System.getProperty("java.util.logging.config.class") == null
&& System.getProperty("java.util.logging.config.file") == null)
{
try//放入可能出错的语句
{
Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);//得到日志记录器
final int LOG_ROTATION_COUNT = 10;
Handler handler = new FileHandler("%h/LoggingImageViewer.log", 0, LOG_ROTATION_COUNT);
Logger.getLogger("com.horstmann.corejava").addHandler(handler);
}
catch (IOException e)
{
Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,
"Can't create log file handler", e);
}
} EventQueue.invokeLater(() ->//使事件派发线程上的可运行对象排队
{
Handler windowHandler = new WindowHandler();
windowHandler.setLevel(Level.ALL);
Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler); JFrame frame = new ImageViewerFrame();
frame.setTitle("LoggingImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
frame.setVisible(true);
});
}
} /**
* 显示图像的帧。
*/
class ImageViewerFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400; private JLabel label;
private static Logger logger = Logger.getLogger("com.horstmann.corejava"); public ImageViewerFrame()
{
logger.entering("ImageViewerFrame", "<init>");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); //设置菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar); JMenu menu = new JMenu("File");
menuBar.add(menu); JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
logger.fine("Exiting.");
System.exit(0);
}
}); //使用标签显示图像
label = new JLabel();
add(label);
logger.exiting("ImageViewerFrame", "<init>");
} private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event); //设置文件选择器
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(".")); //接受以.gif结尾的所有文件
chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File f)
{
return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory();
} public String getDescription()
{
return "GIF Images";
}
}); //显示文件选择器对话框
int r = chooser.showOpenDialog(ImageViewerFrame.this); // 如果图像文件被接受,将其设置为标签的图标
if (r == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
logger.log(Level.FINE, "Reading file {0}", name);
label.setIcon(new ImageIcon(name));
}
else logger.fine("File open dialog canceled.");
logger.exiting("ImageViewerFrame.FileOpenListener", "actionPerformed");
}
}
} /**
* 用于在窗口中显示日志记录的处理程序。
*/
class WindowHandler extends StreamHandler//继承
{
private JFrame frame; public WindowHandler()
{
frame = new JFrame();
final JTextArea output = new JTextArea();
output.setEditable(false);
frame.setSize(200, 200);
frame.add(new JScrollPane(output));
frame.setFocusableWindowState(false);
frame.setVisible(true);
setOutputStream(new OutputStream()
{
public void write(int b)
{
} // not called public void write(byte[] b, int off, int len)
{
output.append(new String(b, off, len));
}
});
} public void publish(LogRecord record)
{
if (!frame.isVisible()) return;
super.publish(record);
flush();
}
}

运行结果如下:

实验程序3:

1)用JDK命令调试运行教材298页-300页程序7-2,结合程序运行结果理解程序;

2)按课件66-77内容练习并掌握Elipse的常用调试技术。

程序如下:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.logging.*;
import javax.swing.*; /**
* A modification of the image viewer program that logs various events.
* @version 1.03 2015-08-20
* @author Cay Horstmann
*/
public class LoggingImageViewer
{
public static void main(String[] args)
{
//将所有消息记录到应用程序特定的文件中
if (System.getProperty("java.util.logging.config.class") == null
&& System.getProperty("java.util.logging.config.file") == null)
{
try//放入可能出错的语句
{
Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);//得到日志记录器
final int LOG_ROTATION_COUNT = 10;
Handler handler = new FileHandler("%h/LoggingImageViewer.log", 0, LOG_ROTATION_COUNT);
Logger.getLogger("com.horstmann.corejava").addHandler(handler);
}
catch (IOException e)
{
Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,
"Can't create log file handler", e);
}
} EventQueue.invokeLater(() ->//使事件派发线程上的可运行对象排队
{
Handler windowHandler = new WindowHandler();
windowHandler.setLevel(Level.ALL);
Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler); JFrame frame = new ImageViewerFrame();
frame.setTitle("LoggingImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
frame.setVisible(true);
});
}
} /**
* 显示图像的帧。
*/
class ImageViewerFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400; private JLabel label;
private static Logger logger = Logger.getLogger("com.horstmann.corejava"); public ImageViewerFrame()
{
logger.entering("ImageViewerFrame", "<init>");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); //设置菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar); JMenu menu = new JMenu("File");
menuBar.add(menu); JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
logger.fine("Exiting.");
System.exit(0);
}
}); //使用标签显示图像
label = new JLabel();
add(label);
logger.exiting("ImageViewerFrame", "<init>");
} private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event); //设置文件选择器
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(".")); //接受以.gif结尾的所有文件
chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
{
public boolean accept(File f)
{
return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory();
} public String getDescription()
{
return "GIF Images";
}
}); //显示文件选择器对话框
int r = chooser.showOpenDialog(ImageViewerFrame.this); // 如果图像文件被接受,将其设置为标签的图标
if (r == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
logger.log(Level.FINE, "Reading file {0}", name);
label.setIcon(new ImageIcon(name));
}
else logger.fine("File open dialog canceled.");
logger.exiting("ImageViewerFrame.FileOpenListener", "actionPerformed");
}
}
} /**
* 用于在窗口中显示日志记录的处理程序。
*/
class WindowHandler extends StreamHandler//继承
{
private JFrame frame; public WindowHandler()
{
frame = new JFrame();
final JTextArea output = new JTextArea();
output.setEditable(false);
frame.setSize(200, 200);
frame.add(new JScrollPane(output));
frame.setFocusableWindowState(false);
frame.setVisible(true);
setOutputStream(new OutputStream()
{
public void write(int b)
{
} // not called public void write(byte[] b, int off, int len)
{
output.append(new String(b, off, len));
}
});
} public void publish(LogRecord record)
{
if (!frame.isVisible()) return;
super.publish(record);
flush();
}
}

由PPT可知:

1)条件断点(有一定条件的断点):在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。

在断点处点击鼠标右键,选择最后一个“Breakpoint Properties”。

2)变量断点:在变量的值初始化,或是变量值改变时可以停止。

3)方法断点:方法断点就是将断点打在方法的入口处。

4)异常断点:当异常发生时,代码会停在异常发生处。

5)重新调试:回退时,请在需要回退的线程方法上点右键,选择“Drop to Frame”。

6)单步执行程序

7)检查变量

8)改变变量值

三、实验总结

本章我学习了有关于java异常处理技术,了解了断言的用法和日志的用途;在老师的讲解下,我基本掌握了一些关于java异常处理技术得基础应用,了解到异常和捕获的用法,在适当的位置添加try……catch语句,还有做作业的过程中了解了一些关于断言和日志的基本知识。实验方面,在之前实验的基础上添加、深化,得到新的表现形式,总得来说,还是有很大的收获,但是自己的实验的动手能力还需要大程度地提高。通过这段时间的学习,慢慢学会了一些应该掌握的java的基本学习技能,以后会慢慢努力继续提升。

												

201871010104-陈园园 《面向对象程序设计(java)》第十周学习总结的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  2. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  3. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  4. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...

  5. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  6. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 201771010123汪慧和《面向对象程序设计Java》第二周学习总结

    一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...

  10. 20175126《Java程序设计》第十周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第十周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. -本周学习十二章,主要内容如下: ...

随机推荐

  1. LeetCode 分治算法

    分治算法:是将问题划分为一些独立的子问题,递归的求解个子问题,然后合并子问题的解而得到原问题的解. 分治算法步骤 step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题: ...

  2. NLP_DataFun:

    智能机器人在滴滴出行场景的技术探索 分享嘉宾:熊超 滴滴 AI Labs 编辑整理:Hoh Xil 内容来源:AI 科学前沿大会 出品社区:DataFun 注:欢迎转载,转载请注明出处 本次分享是在2 ...

  3. BZOJ4027/LG4107 「HEOI2015」兔子与樱花 树形DP+贪心

    问题描述 LG4107 题解 首先,我们可以直接令结点 \(x\) 的权值为 \(c[x]+son_x\) ,发现将 \(x,y\) 合并,相当于增加 \(c[x]+c[y]-1\) 的重量. 容易想 ...

  4. Codeforces Round #551 (Div. 2) E 二分 + 交互

    https://codeforces.com/contest/1153/problem/E 题意 边长为n的正方形里面有一条蛇,每次可以询问一个矩形,然后会告诉你蛇身和矩形相交有几部分,你需要在最多2 ...

  5. MongoDB创建数据库和删除数据库05-14学习笔记

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  6. LeetCode 19:删除链表的倒数第N个节点 Remove Nth Node From End of List

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. Given a linked list, remove the n-th node from the end of list and ...

  7. Oracle索引知识学习笔记

    目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...

  8. PHP 中的关于 trait 的简单

    什么是 trait 看看 PHP 官网的介绍. 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.T ...

  9. oracle排序子句的特殊写法与ORA-01785错误

    刚刚写的SQL语句在执行的时候报[ORA-01785: ORDER BY item must be the number of a SELECT-list expression]错误,于是自己百度了一 ...

  10. ASP.NET Core 开发人员异常页面

    UseDeveloperExceptionPage 中间件 我们谈谈在 Startup 类的 Configure()方法中以下代码: public void Configure(IApplicatio ...