
java从0开始 建议新手观看
从0开始记录自己学习java
承诺像似手中沙
这个作者很懒,什么都没留下…
展开
-
斗地主例子
斗地主准备52+大小王共54张牌 存放于数组或者集合当中用花色和牌面两个数组 嵌套循环组装牌洗牌 shuffle 使用指定的随机元对指定列表进行置换 打乱集合中元素的顺序发牌 定义四个集合 三个玩家 和底牌 索引%3看牌 遍历输出储存玩家和底牌的集合package DemoDoudizhu;import java.util.ArrayList;import java.util.Collections;/** 准备52+2张牌* 洗牌* 发牌* 看牌* */p原创 2020-05-31 16:17:20 · 324 阅读 · 0 评论 -
泛型
泛型本质:把对象里面元素的类型推迟到创建集合的时候类型参数化格式<数据类型> 数据类型只能是引用数据类型使用格式数据类型<泛型的类型> 对象 =new 数据类型<数据类型>;ArrayList list=new Arraylist();好处:可以限定类型 避免类型转换的错误把运行期的错误提前到编译期避免警告提示定义使用含有泛型的类package Demo73;import jdk.nashorn.internal.ir.CallNo原创 2020-05-31 15:47:46 · 172 阅读 · 0 评论 -
反射
反射:框架设计的灵魂框架:半成品软件 可以在框架的基础上进行软件开发 简化编码反射:将类的各个组成部分封装成其他对象好处 可以程序运行过程中,操作这些对象可以解耦 提高程序的可扩展性获取class方式Class.forName( )将字节码文件加载进内存,返回class对象多用于配置文件将类名定义在配置文件中,读取文件,加载类类名.CLASS.通过类名属性class获取多用于参数的传递对象.getclass()多用于对象的获取字节码的方式同一个字节码文件 在一次原创 2020-05-30 21:29:49 · 176 阅读 · 0 评论 -
基础加强 Junit测试
Junit单元测试:黑盒测试:不需要写代码 给输入值 看程序是否可以输出期望值白盒测试:需要写代码 关注代码执行过程白盒测试步骤:定义一个测试类(测试用例)建议测试类名:被测试类名Test包名 xxx.xxx.xx.test定义测试方法可以独立运行建议: 方法名test测试方法名 testadd()返回值void参数列表 空参给方法加@test导入Junit依赖环境判定结果红色失败绿色成功...原创 2020-05-30 11:30:20 · 210 阅读 · 0 评论 -
序列化和反序列化
序列化ObjectOutStream 对象序列化流 把对象以流的方式写入到文件中保存构造方法ObjectOutputStream(OutputStream out)OutputStream out :自己输出流特有成员方法:writeObjcet(Objcet obj)将指定对象写入ObjcetOutputStream步骤:创建ObjcetOutputStream对象构造方法中传递字节输出流使用writeObjcet把对象写入文件释放资源注意:对象必须实现Serialzable接口 不.原创 2020-05-30 10:36:49 · 170 阅读 · 0 评论 -
转换流
Filereader可以读取默认编码格式的文件(utf-8)读取系统默认的编码(gbk)出现问题使用转换流:可以指定转化码表InputStreamReader 转化的时候 utf-8码表和Gbk都可以OutputStreamWriter 转化的时候 utf-8码表和Gbk都可以OutputStreamWriter继承Writer 是字符流通向字节流的桥梁OutputStreamWriter(Output out , String charsetName)Output out 字节输出流 可原创 2020-05-30 09:34:06 · 165 阅读 · 0 评论 -
缓冲流
缓冲流:用来增强基本输入流的效率图片示意字节缓冲流:BufferedInputStream,BufferedOutputStreamBufferedOutputStream使用步骤:创建FileOutputStream对象 构造方法中绑定要输出的目的地创建BufferedOututStream对象 构造方法中传递FileOutputStream对象 提高效率使用write写入内部缓冲flush刷新释放资源package Demo67;import java.io.Buffere原创 2020-05-27 22:05:17 · 160 阅读 · 0 评论 -
属性集
属性集:Properties类唯一和IO流结合的集合可以使用Properties集合中的方法store 把集合中的临时数据,setProperty(String key, String value)输入数据getProperty(String key)通过key找到value值此方法相当于get()方法 也就是输出Set stringPropertyNames() 返货从属性列表中的链集,其中该键及其对应值是字符串,此方法相当于map的keyset方法...原创 2020-05-27 20:56:06 · 297 阅读 · 0 评论 -
IO
什么是IO流input 输入output输出流(字符字节)一个字符等于两个字节一个字节等于八个二进制位字节流 一切皆字节输入流:outputstream定义了一些共性的成员方法FileoutputStream:文件字节输出流构造方法:FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流FileOutputStream(File file)穿件一个向指定file对象表示的文件中写入数据的文件输出流参数:写入数据的目的Strin原创 2020-05-26 22:29:55 · 165 阅读 · 0 评论 -
文件过滤器
FileFilter(pathname)accept(File name)测试指定抽象路径是否应该包含在某个路径名列表中需要自己的实现类,在类里面的方法定义过滤的条件依旧是过滤文件夹所有的文件 找出后缀是.txt文件需要重写对象的话就可以用匿名内部类FileFilter(File dir, String name)File dir:构造方法中传递的被便利的目录String name :使用ListFiles方法遍历目录 获取每一个文件的名称package Demo63;import ja原创 2020-05-26 11:45:51 · 256 阅读 · 0 评论 -
递归
递归:方法自己调用自己活着就是a调用b b调用c c调用a必须有停止方式构造方法不能递归package Demo62;import com.sun.org.apache.bcel.internal.generic.ARETURN;public class Demo621 { public static void main(String[] args) { b1(1); } private static void b1(int i) {原创 2020-05-26 10:31:00 · 4944 阅读 · 0 评论 -
File
Filejava把电脑中的文件和文件夹封装为一个File类 我们可以使用File类对文件和文件夹进行操作我们可以使用File类方法:创建一个文件、文件夹删除文件获取文件判断文件是否存在对文件夹进行遍历获取文件的大小File 是一个和系统无关的类 任何的操作系统都可以使用这个类的方法记住三个单词:file 文件directory 文件夹path 路径package Demo61;import java.io.File;public class Demo611File原创 2020-05-26 09:30:34 · 280 阅读 · 0 评论 -
Lambda表达式
Lambda 表达式标准格式一些参数一个剪头一段代码格式:(参数列表)->{一些重写方法的代码}解释:() 接口中抽象方法的参数列表 没有参数就空着 多个就用逗号隔开-> 传递的意思 把参数传递给方法体{}{} 重写接口的抽象方法的方法体练习 给定一个厨子Cook接口 内涵唯一的抽象方法makefood 无参数使用Lambda 调用invokecook方法 打印吃饭了...原创 2020-05-25 09:00:08 · 375 阅读 · 0 评论 -
线程通信
多个线程并发执行 在默认情况cpu是随机切换线程的 但是我们需要有规律的执行,那么就需要线程之间的协调通信最终代码呈现:package Demo58;public class Baozi { String xian;//馅 String pi;//皮 boolean flag=false;//包子状态 有没有包子}package Demo58;public class BaoziPu extends Thread{ //创建一个包子对象原创 2020-05-24 11:34:04 · 162 阅读 · 0 评论 -
等待唤醒机制
线程状态新建状态 new 刚创建的时候运行状态 runnable 正在运行阻塞状态 blocked 没有cpu执行时间(没抢过别人)死亡状态 terminated run()结束 或者stop()过时休眠状态 timed_waiting sleep 或者wait无限等待状态 waiting 一直处于waitng等待唤醒案例代码实现:需要同步代码块 同时锁对象要相同 这样等待唤醒是一个锁分析:创建一个顾客线程创建一个老板线原创 2020-05-24 10:45:29 · 216 阅读 · 0 评论 -
线程安全问题
线程安全package Demo57;public class RunnableImpl implements Runnable { private int ticket=100; @Override public void run() { while (true){ if (ticket>0){ System.out.println(Thread.currentThread().getName()+"--原创 2020-05-24 08:43:41 · 158 阅读 · 0 评论 -
多线程
并发:两个或多个时间在同一时间段内发生。并行:两个或多个时间在同一时刻发生(同时发生)并发:并行:进程:进入到内存的程序叫进程线程:是进程的一个执行单元 负责当前进程中程序的执行 一个进程至少一个进程 一个进程可以是多个线程的。举例 电脑管家创建多线程的方式:创建Thread子类Thread类是描述线程的类 我们想要实现多线程程序必须继承Thread类步骤:创建一个Thread 的子类在Thread子类中重写Thread的run方法 设置线程任务创建Thread子类对象调用原创 2020-05-23 20:11:51 · 185 阅读 · 0 评论 -
异常
Throwable 是java语言中所有错误或者异常的超类。Excepion:编译期异常 进行编译(写代码)java程序出现的问题RuntimeException:运行期异常 java程序运行过程中出现的问题异常就相当于程序得了一个小毛病,把异常处理掉 程序可以继续执行(吃点药继续革命)Error :错误错误相当于城西得了一个无法治愈的毛病(非典 艾滋) 必须修改源代码 程序才能继续执行。package Demo55;import java.text.ParseException;impo原创 2020-05-22 18:00:27 · 225 阅读 · 0 评论 -
内部类
一个类内部包含另一个类身体和心脏 汽车和发动机成员内部类局部内部类(匿名内部类)成员内部类 :修饰符class 外部类名称{修饰符 class 内部类名称{、、、、、}、、、、}内用外随意访问 外用内 需要内部类对象如何使用成员内部类间接:在外部类的方法当中 使用内部类然后main只是调用外部类的方法直接 外部类名称.内部类名称 对象名 =new 外部类名称().new 内部类名称package Demo49;public class Body {原创 2020-05-21 22:08:21 · 158 阅读 · 0 评论 -
final
代表最终的不可改变的修饰类方法局部变量成员变量修饰类太监类 不能有任何子类 可以有父类final 类其中所有的成员方法都无法进行覆盖重写(因为没儿子)修饰方法当修饰一个方法的时候 这个方法就是最终方法 不可以被覆盖重写abstract 不可以同时使用修饰局部变量这个变量不能进行更改 只能赋值一次对于基本类型 不可变是数据不可以改变对于引用类型 不可变是地址值不可改变修饰成员变量由于具有默认值 用来final 只后必须手动赋值 不会再给默认值用了构造和直接只能二这选一个原创 2020-05-21 20:26:51 · 142 阅读 · 0 评论 -
多态
举例子小明是一个学生。这句话隐含 小明是一个学生对象。小明是一个人同时学生也是人也就是小明同时是学生对象也是人对象人又是学生的父类。代码体现:package Demo46;public class Fu { public void method(){ System.out.println("父类方法"); } public void methodfu(){ System.out.println("父类特有的方法"); }原创 2020-05-21 17:23:31 · 136 阅读 · 0 评论 -
接口
接口是多个类公共的规范标准是引用数据类型public interface 接口名称{//接口内容}包含:常量 需要用public static final修饰 永远不可改变 必须赋值 名称最好是完全大写且加下划线 MY_INTER_FACE_CONST抽象方法 抽象方法实现 只需要void 修饰 在实现类中实现 创建实现类对象进行调用默认方法 通过实现类对象直接调用 同时也可以呗接口实现类进行覆盖重写静态方法 static修饰 不可以通原创 2020-05-21 15:43:12 · 318 阅读 · 0 评论 -
抽象
抽象如果父类的方法 不确定 如何实现 那么就是抽象方法定义 : 抽象方法 :加上abstract关键字, 然后去掉大括号 直接分号结束抽象类: 抽象方法所在的类 必须是抽象类才可以 在class 之前 写上一个 abstract如何使用不可直接创建 抽象对象必须用一个子类来继承抽象类子类必须覆盖重写抽象父类当中的所有的抽象方法覆盖重写:子类去掉抽象方法的abstract 然后不上方法体大括号创建子类对象进行使用注意事项关于抽象类的使用,以下为语法上要注意的细节,虽然条目较原创 2020-05-21 14:08:10 · 221 阅读 · 0 评论 -
继承
面向对象的三大特征: 封装 继承 多态继承是多态的前提 没有继承就没有多态。继承主要解决的问题就是:共性抽取继承关系的特点:可以拥有父类的“内容”还可以有自己的专有内容例子:在继承关系 子类就是一个父类 子类可以当做父类看待例子例子package Demo37;public class Fu { int num=100; int numfu=200; public void methodFu(){ System.out.print原创 2020-05-21 08:30:36 · 179 阅读 · 0 评论 -
Math常用方法
提供了很多的静态方法 常用的总结一下abs();绝对值ceil();向上取整floor();向下取整round();四舍五入实例public class Demo34 { public static void main(String[] args) { System.out.println(Math.abs(-3.33));//3.33 System.out.println(Math.ceil(2.000000000000001)); Sy原创 2020-05-20 09:46:54 · 167 阅读 · 0 评论 -
static
静态关键类在方法区有一个静态区专门存储static对于没有自己独立的数据(多个对象共享同一份数据)只在类当中保存唯一一份 所有本类对象共享同一份,属于类修饰成员变量类名称访问静态成员变量和对象没有关系之和类有关 而类有事存储在方法区里面package Demo31;public class Student { private String name; private int age; static String room; private int id;/原创 2020-05-19 20:54:38 · 176 阅读 · 0 评论 -
又遇String
String程序当中所有的双引号字符串都是String类的对象 就算没有new也是特点字符串是常量 不可改变可以共享使用效果上是char[ ]字符数组 凡是底层原理是 byte【】自己数组构造方法public String();public String(char[ ]);public String (byte[ ]);String str=“zqh”;package Demo30;public class Demo301 { public static voi原创 2020-05-19 20:01:13 · 125 阅读 · 0 评论 -
ArrayList
数组的长度是不可能改变的但是ArrayList集合的长度是可以随意改变的对于 ArrayList 来说有一个尖括号代表泛型泛型就是集合当中的所有元素 全部是统一的类型泛型只能是引用类型 不能是基本类型对于ArrayList集合直接打印得到的是【】而不是地址常用方法add(E e) 添加元素 对于add添加一定是成功的所有返回值可不用 但是对于其他集合add不一定成功 返回值是是否添加成功get(int index)获取元素 参数是索引编号 返回值是对应的元素remove(int in原创 2020-05-18 20:33:07 · 134 阅读 · 0 评论 -
Random
随机数字导包 import java.util.Random;创建 Rondom r =new Random();使用int num= r.nextInt() ;获取一个随机的int数字范围是int 的所有范围int num =r.nextInt(3); 获取一个随机的int数字(左闭右开)[0,3)也就是0~2import java.util.Random;public class Demo28 { public static void main(String[] args)原创 2020-05-18 17:04:42 · 186 阅读 · 0 评论 -
匿名对象 五星重点读懂
普通对象创建类名称 对象名 = new 类名称;匿名对象就是只有右边的对象 没有左边的名字和赋值运算符new 类名称();匿名对象只能使用唯一的一次 ,下次再用不得不再创建一个新的对象是简略的写法 如果确定一个对象只需要使用唯一的一次就可以使用匿名对象可以作为参数和返回值package Demo27;import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;import java.util.Scanner;public原创 2020-05-18 15:57:15 · 159 阅读 · 0 评论 -
Scanner
Scanner键盘输入数据到程序中去使用步骤(所有引用类型)导包 import包路径.类名称 只有java.lang不需要导包创建 类名称 对象名 =new 类名称();使用 对象名.成员方法();import java.util.Scanner;//导包public class Demo26 { public static void main(String[] args) { Scanner sc=new Scanner(System.in);原创 2020-05-18 15:25:51 · 112 阅读 · 0 评论 -
构造方法
构造方法是专门用来创建对象的方法,当我们通过关键字 new来创建对象 其实就是在调用构造方法格式public 类名称(参数类型 参数名称){方法体}构造方法必须和所在类的名称完全一样 连大小写也要一样构造方法不要写返回值类型 连void 都不用写构造方法不能return一个具体的返回值如果没有编写任何构造方法,编译器会默认赠送一个构造方法,没有参数,方法体什么事情都不做一旦编写至少一个 那么编译器将不再赠送构造方法也是可以重载的package Demo25;public clas原创 2020-05-18 14:44:44 · 143 阅读 · 0 评论 -
this
this主要是重名的时候取到区分的作用package Demo24;public class Person { String name; public void sayHello(String who){ System.out.println(who +"你好我是"+this.name ); } /* public void sayHello(String name){//改参数为name 优先用的是局部变量 如果需要访问本类当中的成原创 2020-05-18 11:37:10 · 113 阅读 · 0 评论 -
方法封装性
封装性方法就是一种封装privare也是一种 封装(私有化)private意味着保护 一旦使用private进行修饰 name本类之中还是可以随意访问 但是超出本来范围之外 就不可以直接访问可以通过间接的方式访问 也就是getxxx和setxxx方法 (命名是确定的 get是获取而set 是赋值)对于 get 不能有参数 返回值和成员变量对应对于set 不能有返回值 参数类型和成员变量对应public class Demo22 { String name; int age;原创 2020-05-18 11:07:53 · 218 阅读 · 0 评论 -
成员变量和局部变量
成员变量与局部变量定义位置不一样局部:方法内部成员:方法外部 或者直接在类当中作用范围不一样局部:只有方法当中可以使用除了方法就不可以再用成员:整个类都可以通用默认值不一样局部:没有默认值 需要手动赋值成员:没有赋值的话会有默认值内存不一样局部:栈内存成员:堆生命周期局部:随着方法进栈诞生方法出栈 而消失成员:随着对象创建而诞生。对象被回收而消失(编译器问题)public class Denmo20 { String name;//成员变量 public原创 2020-05-18 10:42:18 · 141 阅读 · 0 评论 -
类
类成员变量:属性 成员方法: 行为public class 类名{成员方法;成员变量;}通常情况下一个类不可以直接使用 需要根据类创建一个对象 才可以使用导包:也就是指出需要是用的类在什么位置import 包名称.类名称创建类名称 对象名 =new 类名称();使用使用成员变量 :对象名.成员变量名使用成员方法:对象名.成员方法名(参数)`package phone;public class PhoneParam { public stat原创 2020-05-18 10:28:36 · 154 阅读 · 0 评论 -
面向对象
面向对象当需要实现一个功能的时候,不关心具体步骤而是找一个具有该功能的人来做。面向过程当需要实现一个功能的时候,每个具体的步骤都要亲力亲为,详细处理每个细节。public class Demo17 { public static void main(String[] args) { int [] array ={1,2,3,4,5,6}; //打印数组[1,2,3,4,5,6] //面向过程 System.out.println原创 2020-05-18 08:45:36 · 170 阅读 · 0 评论 -
java内存
内存栈(stack):存放的都是方法中的局部变量 方法的参数或者是方法内部的变量 作用域:一旦超出作用域立刻从栈内存中消失。堆(Heap):凡是new出来的东西都在堆里堆内存的东西都有一个地址值 16进制数据都有默认值整数 0浮点数 0.0字符 ‘\u0000’布尔 false引用 null方法去 存储.class 相关信息 包含方法的信息本地方法栈 :和操作系统有关寄存器 与cpu有关...原创 2020-05-17 20:35:40 · 138 阅读 · 0 评论 -
数组
数组是一种容器,可以同时存放多个数据值特点:数组是一种引用数据类型数组当中的多个数据,类型必须统一数组长度在程序运行期间不可改变数组初始化:在内存当中创建一个数组,并且向其中赋予一些默认值两种:动态 (长度)静态 (内容)动态:数据类型 [ ] 数组名称 =new 数据类型[ 数组长度];左侧数据类型:也就是数组当中保存的数据,全都是统一的类型左侧中括号 代表是一个数组左侧数组名称 数组去一个名字右侧的new 创建数组的动作右侧的数据原创 2020-05-17 20:28:24 · 139 阅读 · 0 评论 -
方法重载
重载对于功能类似的方法来说,因为参数列表不一样,却要记住那么多不同的方法名称,太麻烦了所以就是多个方法的名称一样但是参数列表不一样 这就叫做方法的重载。`参数列表:个数不同类型不同参数的多类型顺序不同无关选项:与参数名称无关与返回值无关public class Demo15 { public static void main(String[] args) { System.out.println(sumtwo(10,20)); System.原创 2020-05-17 19:54:28 · 133 阅读 · 0 评论