Java笔记

    科技2024-01-01  111

    Java笔记

    文章目录

    Java笔记前言


    前言

    没来得及整理的一些琐碎的知识


    提示:以下是本篇文章正文内容,下面案例可供参考

    size()是获取泛型集合的长度 length是获取数组的长度 length()是获取字符串的长度。 类是public的,那么文件名要和类名一致。不是public类的可以不一致(建议一致)。

    一个java的源程序中可以包含多个类,但只能有一个public的类

    类的命名规则:大驼峰 每个单词的首字母大写 HelloWorld Test Student

    方法命名规则:从第二个单词开始首字母大写(多个单词情况下)。

    关键字命名规则:都是小写。public class static void

    classpath . 当前路径 … 上一级路径 \ 磁盘根部

    java.exe程序需要用来解析 字节码 文件

    方法中参数的传递,是按值传递,将值复制一份,进行传递。

    相对路径:相对于当前路径 绝对路径:从磁盘根部开始

    修饰符 class 类名{ 类体 }

    输出System.out.println();

    修饰符: public 缺省(不写) // 单行注释 /* / 多行注释 /* */ 文档注释

    标识符: 包 类 方法 参数 变量 不能数字开头 不能有空格 不能是关键字

    包:都小写 类和接口: 每个单词首字母都大写 常量:全部大写 变量和方法: 除第一个单词外其他单词首字母大写 关键字:都小写

    字符常量:用单引号括起来的单个字符 字符串常量(String):用双引号括起来的字符串

    布尔常量(boolean): true(真) false(假)

    null 常量:只有一个值 null 表示对象的引用为空。

    数据类型:两大类: 基本数据类型:数值:整数(byte127 short32768 int long) 浮点(小数)(float double) 字符 char 布尔 boolean 引用数据类型:类 接口 数组 枚举

    强制类型转换:例子:int a=(byte)b;

    整形相加会自动转换int类型需要强制转换。

    变量的作用域:在那个花括号中声明的,就在那个花括号中起作用

    类变量(成员变量):在类中,方法外声明的变量不赋值,有默认值。

    局部变量:在方法中,要赋值后才能使用。

    运算符: 算术运算符:如果除发中,除数和被除数都是整数那么商也是除数(当中有一个是小数商就得到小数)。

    3500/1000*1000=3000;

    %取余(模) 5%3=2

    Scanner sc=new Scanner(System.in);//输入 int num=sc.nextInt();//接受/保存 System.out.println(num)输出 import java.util.Scanner;包

    switch(a) case “+”/1: break;

    System.out.println(“请输入运算符!”); String p =sc.next();/(7.0以前:char c =fh.charAt(0)) while(条件)(条件成立则继续进行) { 循环体; }

    do{ 循环体 }while(条件)至少执行一次循环。

    for(;;)

    break:结束循环,默认结束本身循环(内循环),可以加标号,指定结束循环。

    continue: 结束本次循环,接着进行下一次循环。

    包:为了对类进行分类管理;

    包的定义:必须是源代码中第一条语句。(除注释外)。 package cn.com.hbsi

    javac -d . helloworld.java

    方法: 方法定义在类中。 修饰符 返回值类型 方法名(参数类型 参数名1,,,,){ }

    返回值类型:有值 类型 无值 void

    public static void Helloword(int x,int y){ }

    数组名字.length是数组长度。

    静态初始化数组:声明数组同时赋值: String[] strs = new String[]{“aa”,“bb”,}; String[] strs = {“aa”,“bb”,};

    int [] x=new int [n];

    数组的复制: 自己编写代码: int [] 新数组 = Arrays.copyOf(原数组,新数组长度)需要包:{import java.util.*;}

    可以部分复制数组: System.arraycopy(原数组,原数组的起始位置,目标数组,目标数组起始位,长度;)

    数组输出: for(int t: x) System.out.print(t+"\t"); System.out.println(); for(int temp: z) System.out.print(temp+"\t");

    import java.util.Random;随机数包; int x=new Random().nextInt(50);

    递归方法:一个方法在其方法体内调用自身。

    遍历某文件夹下的所有文件,包含子文件夹中的文件

    做递归时,一定要有出口,必须在某个时刻,方法的返回值是正确的,这是,可以不再调用自身 递归 this关键字可以直接访问成员变量

    private(私有化);set\get;

    定义类,系统会自动产生一个无参构造

    this:1.区分成员变量和局部变量,当成员变量和局部变量重名是,用 this来访问成员变量 this.成员变量 2.通过this关键字调用成员方法 3.一个构造方法调用自身类中的另一个构造方法时,要使用this关键字 构造方法之间的互相调用,而且this语句只能放在构造方法中

    Datawrap dw= new Datawrap(); dw.a=10; dw.b=5; changeAB(dw); System.out.print(+dw.a)

    静态变量 (static)修饰

    static 修饰的成员变量,静态变量,是所有对象共有属性 不需要创建对象,就可以直接访问静态变量

    类名.静态变量 对象名.静态变量 类名.方法

    静态方法只能访问静态变量

    静态代码块

    代码块 { //初始化语句 }

    当创建java对象时,系统总是先调用该类中定义的初始化代码

    public class 类{ //成员变量 //成员方法 //构造方法 //代码块 }

    静态代码块。 在加载类的时候就会执行静态初始化块,静态初始化块,只执行一次。

    在内部类中调用外部类中的成员变量 外部类名。this。 outer.this.num

    继承: 父类(超类,基类) 子类(派生类)

    class A{} class B extends A{} class C extends B{}

    多个类也可以继承同一个父类;

    可以多层继承

    子类重写(override)父类方法:方法名相同 参数列表相同 返回值相同 访问权限要大于覆盖方法 子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;

    三同一小一大

    重载(overload):在同一个类当中 方法名字相同 参数列表不同(参数个数,顺序 类型) 与返回值无关系

    在子类中调用父类被覆盖了的方法,可以使用super关键字 super.成员方法()

    super.成员变量

    子类不会获得构造方法*(无法继承构造方法) 但是可以调用父类的构造方法 ;

    子类构造的第一行代码使用super显示调用父类的构造,系统根据super调用时传入的参数 调用用父类对应的构造 子类构造的第一行代码使用this显示调用本类的另一个构造,根据传入的参数调用本类对应的 构造子类构造宏没有super,也没有this,系统会自动调用父类的无参构造

    类被final关键字修饰后不能被继承

    方法被final关键字修饰后 这个类的子类不能重写该方法;

    final 可以修饰变量(成员变量和局部变量)是常量,只能赋值一次 final 修饰局部变量:可以声明的同时赋值,也可以不在声明的同时赋值 但是也只能赋值一次 成员变量:静态 实例 声明 普通初始化块 构造方法 不能在一般成员方法中赋值

    [访问修饰符] abstract 方法返回值类型 方法名(参数)

    包含了抽象方法的类,一定要定义为抽象类

    [访问修饰符] class 类名{ [访问修饰符] abstract 方法返回值类型 方法名(参数); } 抽象类作用: 为了被子类继承,子类去实现父类中所有的抽象方法。 如果没有实现,那么这个子类需要定义为抽象类 不能实力化对象

    抽象类可以包含属性,方法(普通方法和抽象方法),构造方法,初始化块,内部类

    final和abstract不可同时使用 abstract不可以修饰构造方法 private和abstract不能同时使用

    时间 开始时间:long start = System.currentTimeMillis(); 执行代码; 结束时间:long end =System.currentTime Millis(); System.out.println(end-start);

    接口(interface):理解为一种特殊的抽象类,只包含常量和抽象方法 接口也可以理解为一组规范,一组协议

    implements//实现!!!

    实现接口: class 类名 implements 接口名 { 接口方法 }

    接口可以多继承,一个接口可以有多个直接的父接口

    interface 接口名 extends 接口1,接口2…

    class 类 implements 接口1,接口2{ }

    class 类名 extends 父类 implements 接口1,接口2…{ }

    多态:可以理解为事物存在的多种形态。

    体现:父类的引用指向了自己的子类对象。 父类引用也可以接收自己的子类对象。

    前提: 继承 有重写

    好处:提高程序扩展性

    class Animal{ }

    class Cat extends Animal{}

    class Dog extends Animal{}

    Cat c = new Cat(); Dog d = new Dog();

    Animal a =new Cat(); 通过父类的引用调用的方法必须是父类中有的方法 ((cat)a).catchMouse(); 成员方法编译看左边(父类)执行看右边(子类) 成员变量编译与执行都看左边(父类)

    对象 instanceof 类(接口): 用来判断对象是否是指定类型,如果是结果为true。

    不能通过父类的引用调用子类特有的方法。如果有调用,需要进行类型转换,向下转型

    person p = new Student(); Student st = (Student)p;向下转型

    Object类

    equals(obj): 判断两个对象是否能

    异常:程序运行时出现的异常情况 Exception(异常类)

    异常处理机制

    try{ //有可能产生异常的代码块 }catch(Exception e){

    }

    try块中如果发生异常,就会产生一个异常对象,在这个异常对象中包括异常的相关信息 然后将这个异常对象抛出,由catch捕获,处理。 catch块要判断这种异常对象能否处理。

    catch块 可以是多个但捕获的异常类型要有特殊到一般。 finally块在try…catch{System.exit(0)}情况下无法执行 try不能单独存在 try…catch try…finally try…catch…finally getMessage(); printStackTrace() ; throw new RuntimeException(“异常”);人为产生的异常

    修饰符 返回值类型 方法名(参数。。。)throws Exception{ }

    throws:在方法的声明上使用,throws 后跟的是异常类型, 作用声明方法有可能产生异常,方法调用者去处理。

    throw:在方法内使用,throw后跟的是异常对象,作用人工抛出一个异常对象

    for(int i=0;i<x.length;i++) { if(x[i]>=0||x[i]<=100) { try { throw new RuntimeException(“异常”); } protected:可以被同一包下的其他类访问或者其它包中的子类访问

    追加:append(“asdc”), 插入:insert(2,“asd”) 删除:delete(2,5) 替换:replace(1,3,“qq”)

    Thread.sleep(3000)//休眠3秒 process.destroy();//杀死进程 Math.floor();返回小于参数的最大整数; Math.ceil();返回大于参数的最小整数; Math.round();返回long类型 四舍五入 currentTimemillis();当前时间

    Calendar c =Calendar.getInstance(); Calendar 时间类. Integer num =new Integer(20)

    JOptionPane.showInputDialog弹出窗口输入!

    parseInt转化为整形 int Integer.parseInt mySortArray();对int类型进行排列;

    nextInt(100) 0-100随机数。

    List: 有序 元素可以重复 set 无序 不可重复 ArrayLIst:底层结构是数组

    遍历方式: get(index) foreach; 迭代器;Iterator; Iterator it = li.iterator();//获取迭代器 while(it.hasNext()) {//判断是否有下一个元素 Object o =it.next();//获取 li 中的值 System.out.println(o); LinkedList集合

    HashSet set =new HashSet();9

    public String toString() { return id+name; 泛型: ArrayList<参数化类型>list = new ArrayList<参数化类型>();

    FlowLayout 流式布局管理器(FlowLayout)是最简单的布局管理器。 BorderLayout 边界布局管理器 EAST SOUTH WEST NORTH CENTWER GridLayout 网格布局管理器(行数,列数,水平距离,垂直距离-)

    Frame f = new Frame(“窗体”); JFrame public class b_061 extends JFrame

    xx.setSize(,)//设置大小 xx.setLocation(,)//位置 xx.setVisible(true)//设置可见性 xx.setBounds(, , , );//位置大小; this.setTitle("—");//设置窗口名字; this.pack();自定义大小

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);结束进程

    事件处理机制: 当按下按钮,产生一个事件,也就是产生了一个这个事件类型的对象,并将这事件对象交给在事件源上 注册了的监听器对象进行处理

    e.getSource()==b1;获取数据源;

    JDialog 默认非模态

    ButtonGroup 按钮组

    j1.addActionListener(new ActionListener(){//为j1添加监听器

    xxxx.isSelected()//xxx被选中时

    super(“弹出菜单”);

    JMenuItem 菜单项 JMenu菜单 JMenuBar菜单栏/条 JPopupMenu 弹出菜单 JTable 表格 (菜单)xxx.addSeparator//添加分割条; xxx.addRow(xxx);//增加一行; xxx.setViewportView(xx);//将xx添加到xxx中;

    xx.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);//水平滚动条一直显示 xx.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//垂直滚动条一直显示

    j1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,KeyEvent.CTRL_MASK)); //为j1添加快捷键 Ctrl+q

    *************************J D B C ******************* 1.加载驱动 在项目下创建一个lib文件夹,将驱动拷贝到文件夹下,然后将驱动添加到path路径中 Class.forName(“com.mysql.jdbc.Driver”)//注册数据库连接 Mysql URL地址写法:jdbc:mysql://localhost:3306/数据库名字 ResultSet rs = st.executeQuery(“select 字段名 from 表名”); Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名”,“root”,“1234”);//建立数据库连接

    ResultSet executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象。 2.int executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行数。

    文本、图片、音频、视频都是2进制形式存在的

    FileInputStream 字节输入流 FileOutputStream 字节输出流

    BUfferedInputStream 字节缓冲流输入 BufferedOutputStream 字节缓冲流输出 内部定义8192字节

    FileReader 字符输入流 FileWriter 字符输出流 flush();刷新 BufferedReader字符缓冲输入流 BufferedWriter字符缓冲流输出 newLine();输出一个换行字符 InputStreamReader 转换 toUpperCase() 转换为大写 // 输出文件的绝对路径 System.out.println(file.getAbsolutePath());

    files是一个文件数组,[File file:files]的意思是每次循环都将数组中的文件对象赋给file这个变量,然后再在循环体中对这个变量进行操作。它相当于如下转换形式: File file; for(int i=0;i<files.length;i++){ file = files[i]; …… }

    进程:正在运行的程序

    线程:进程中的一条执行线索

    每个进程中至少一个线程,单线程程序

    也可以有多个线程,多线程程序

    两种实现多线程方式:

    1.继承Thread类,重写(覆盖)run(); 2.实现Runnable接口,并重写该接口的run()方法;

    Thread.currentThread().getName()几号窗口

    线程的生命周期: 新建状态:new a a= new a(); new Thread(a,“1号”) 就绪状态:start()(启动进程)等待cup所有权 a.start(); 运行状态:执行run()方法 死亡状态:执行完run()方法,或者出现exception(异常) error(结束)。 阻塞状态:sleep join wait

    .setPriority(Thread.MIN_PRIORITY);优先级为1 .setPriority(Thread.MAX_PRIORITY);优先级为10 yield方法是用于线程让步 .join 方法来实现线程插队 .sleep(?)进程休眠?毫秒

    synchronized()同步代码块

    Schema与DTD的区别。 Schema本身也是XML文档,DTD定义跟XML没有什么关系; Schema文档结构性强,各元素之间的嵌套关系非常直观。 DTD只能指定元素含有文本,不能定义元素文本的具体类型 DTD无法利用XML的命名空间,Schema很好满足命名空间。

    xml是一种语言它的内容都是由标签组成的一般用来存储配置信息

    Processed: 0.015, SQL: 8