`
文章列表
/* 同步函数用的是哪一个锁呢? 函数需要被对象调用。那么函数都有一个所属对象的引用,就是this 所以同步函数使用的锁是this */ class TWindow implements Runnable{ private int ticketNum =100; //Object obj = new Object(); public void run(){ while(true){ this.show(); } } public sychronized void show(){ if(ticketNum > 0){ try{ ...
/* 需求:银行有一个金库。 有两个储户分别存300元,每次存100,存3次 目的:该程序是否有安全问题,如果有,如何解决。 如何找问题: 1.明确哪些代码是多线程运行代码 2.明确共享数据 3.明确多线程运行代码中哪些语句是操作共享数据的 */ class Banka{ private int sum; public sychronized void add(int n){ sum += n; try{ Thread.sleep(10); } catch(Exception e){ } System ...
class TWindow implements Runnable{ private int ticketNum =100; public void run(){ while(true){ if(ticketNum > 0) System.out.println(Thread.currentThread().getName() +" sale "+ ticketNum--); } } } class ThreadDemo{ public static void main(String[] args){ ...
class TWindow implements Runnable{ private int ticketNum =100; public void run(){ while(true){ if(ticketNum > 0) System.out.println(Thread.currentThread().getName() +" sale "+ ticketNum--); } } class ThreadDemo{ public static void main(String[] args) ...
class TWindow implements Runnable{ private int tickNum = 100; public void run(){ while(true){ if(tickNum >0){ System.out.println(Thread.currentThread().getName()" sale: "+ tickNum--); } } } } class Ticket{ public static void main(String[] args){ TWindow ...
/* 需求:简单的买票程序 多个窗口卖票 */ class TWindow extends Thread{ private static int tickNum = 100;//此处若不加static,则每个对象都可以售100张票,但是加static,tickNum的生命周期就很长 public void run(){ while(true){ if(tickNum >0){ System.out.println(Thread.currentThread().getName()" sale: "+ tickNum--); ...
/* 练习:创建两个线程,和主线程交替运行 线程都有自己默认的名称,格式为Thread-编号,编号从0开始。 static Thread currentThread():获取当前线程对象 getName():获取线程名称 设置线程名称:setName()或者构造函数 */ class Test extends Thread{ private String name; Test(String name){ //this.name = name; super(name); } public void run(){ System.out. ...
/* 进程:是一个正在执行中的程序 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者一个控制单元 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个线程 Java VM 启动的时候会有一个进程java.exe 该进程中至少有一个线程负责java程序的执行 而且这个线程运行的代码存在于main方法中 该线程称为主线程 1.如何自定义一个线程? 通过对api的查找,java已经提供了对线程的描述,Thread类 创建线程的第一种方式:继承Thread类 步骤: 1,定义类继承Thread 2,复写Thread类中的 ...
package pack; class PackageDemo{ public static void main(String[] args){ packa.Packa a = new packa.Packa(); a.show(); a.method(); } } /* PackageDemo.java:5: 错误: 找不到符号 Packa a = new Packa(); ^ 符号: 类 Packa 位置: 类 PackageDemo PackageDemo.jav ...
异常是什么? 是对问题的描述,将问题进行对象的封装。 异常体系: Throwable |--Error |--Exception |--RuntimeException 异常体系的特点:异常体系中的所有类及简历的对象都具备可抛性 也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。 throws和throw的用法: throw定义在函数内,用于抛出异常对象 throws定义在函数上,用于抛出异常类,可以抛出多个逗号隔开的异常类 当函数内容有throw抛出异常对象,并未进行try处理,必须要在 ...
/* 有一个圆形和长方形,都可以获取面积,对于面积,如果出现非法数值, 视为获取面积出现问题。问题通过异常来表示。 */ class NoValueException extends RunTimeException{ NoValueException(String messgae){ super(message); } } interface Shape{ void getArea(); } class Rec implements Shape{ private int len,wid; Rec(int len,int wid){ i ...
/* 因为项目中会出现特有的问题 而这些问题并未被java所描述并封装对象 所以对于这些特有的问题可以按照java的对问题封装的思想 将特有的问题,进行自定义的异常封装。即自定义异常 当在函数内部出现了throw抛出异常对象,那么就必须给出对应的处理动作。 要么在内部try catch处理。要么在函数上声明让调用者处理。 一般情况下,函数内出现异常,函数上需要声明。 发现打印的结果中只有异常的名称,却没有异常的信息。 因为自定义的异常并未定义信息。 如何定义异常信息呢? 因为父类(Throwable)中已经把异常信息的操作都完成了, 所以子类(自定义异常类)只 ...

抽象类

抽象类的特点: 1.抽象方法一定在抽象类中 2.抽象方法和抽象类都必须用abstract关键字修饰 3.抽象类不可以用new创建对象,因为调用抽象方法没意义 4.抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后, 建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个 抽象类。 抽象类和一般类没有太大的不同。 该如何描述事物,就如何描述事物,只不过,该事物出现了抽象方法, 这些抽象方法也是该事物的功能,需要明确出现,但是无法定义主体。 抽象类比一般类多了抽象方法。 抽象类不可实例化。 抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

final

/* final:修饰符 1.可以修饰类、函数、变量 2.final修饰的类不可以被继承 3.final修饰的方法不可以被复写 4.final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量 也可以修饰局部变量 当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性, 都给这些值起个名字方便阅读。而这个值不需要改变,所以加final修饰。 作为常量:常量书写规范所有字母都大写,如果由多个单词组成,单词间 用_连接。 */ final class Demo{ void show() {} } class SubDemo extends Demo ...
继承成员变量和函数的特点 变量 如果子类中出现非私有的同名成员变量,子类要访问 本类中的变量,用this。访问父类同名变量用super。 super的使用和this的使用几乎一致。 this代表的是本类对象的引用。 super代表的是父类对象的引用。 函数 当子类出现和父类一模一样的函数时,子类对象调用 该函数,会运行子类函数内容。如同父类函数被覆盖一样。 这种情况是函数的另一种特性:重写(覆盖) 当子类继承父类,沿袭了父类功能到子类中,但是子类虽 具备该功能,但是功能的内容却和父类不一致。这时 没必要定义新功能,而是通过重写功能内容 覆盖 子类覆盖父类,必须保证子类权限大于等于父类权 ...
Global site tag (gtag.js) - Google Analytics