java教学练习题_GitHub - dbhou/java-study: java学习练习题

java学习笔记

#一、java环境搭建

##1.jdk

-->了解目录结构

----->bin

----->src.zip

----->lib目录下是jar包

----->jre 运行环境

-------->lib/rt.jar

----->一个java应用程序

---------->类名一般就是文件名,如果类是public 类名就必须是文件名。

---------->一般来说一个类就是一个文件。

--------->编译

----------->javac命令

--------->设置环境变量path

--------->进入.java文件所在的目录

--------->javac 文件名.java

---------------->产生.class --->java字节码(包含了javacpu-->jvm的指令)

------>运行

-------- ---->java 类名

-------- ---->classpath环境变量

--------------------->寻找类的路径

-------- ----->默认是点代表当前目录

-------->jvm类加载机制

-------- ----->jvm是通过类加载器机制加载类的

--------------------->根类加载器

--------------------->负责加载jre/lib/rt.jar中的类

-------- ----->扩展类加载器

--------------------->负责加载jre/lib/ext/*.jar中的类

-------- ----->应用类加载器

---------------- ---->负责加载classpath下能找到的类

-------- ------>加载类的时候总是先从根类加载器找类,没有才去扩展类加载器,扩展没有才去应用类加载器

------->包的概念

---- ----->包名是类名的一部分

---- ---->javac -d . 类名.java---- 自动生成包。

------->eclipse工具

--------->先安装jdk

--------->下载eclipse (for jee)

#二、java语法基础

##1.数据类型是强类型的

##2.数组

##3.在哪个{}声明的作用域就在哪个{}内

#三、java的面向对象

----->类

---------->相同属性(变量)、相似行为(函数)的抽象

---------->抽取人类

-------- ----->h,w

-------- ----->eat(),walk()

---- ----->抽取钟类

-------- ----->h,m,s

-------- ----->showTime();

----->对象

---- ----->类的实例

----->构造函数

---- ----->函数名与类名相同,无任何返回类型

---- ----->创建对象的时候会自动调用,创建一次对象就会调用一次

---- ----->一般是用来给成员变量进行初始化的

---- ----->如果没有给出构造函数,jvm会给一个默认的无参数的构造函数

---------------- public 类名(){}

-------- 一旦给了构造函数这个默认无参数的就不存在了。

----->函数重载

---- ----->同一个类中的一组函数,函数名称相同

---- ------>形式参数不同

---- ------>与返回值类型无关

---- ------>把这样的一组函数称为函数重载

---- ------>调用的时候会根据参数的类型和个数自动匹配决定调用哪个函数

---------------->这种匹配先找最精确的,如果没有找匹配得上的。

---------->补充:可变参数,可变参数必须是参数的最后一个,当做数组处理

------->访问权限

---- ----->public

------------ ---->修饰类和成员

------------>在不同包下访问

---- ----->默认的

------------ ----->修饰类和成员

---- ----->在同一包下访问

---- ----->private

------------ ----->只能在类的内部访问

---- ----->一般用来修饰成员变量

------>this引用

---- ----->当前对象(的引用)

---- ----->调用这个函数的那个对象(的引用)

---- ----->非静态的成员函数访问非静态的成员都省略了

---- ----->this(参数)

------------ ----->调用重载的另外一个构造函数

------>初始化的问题

---- ------>给成员变量直接初始化就是定义初始化

------------ ----->先定义初始化再构造函数

---- ------>静态的成员变量

------------ ---->所有对象公用一份

------------>可以通过对象.访问(不建议),也可以类.访问

---- ------>静态定义初始化(静态定义初始化块)

------------ ----->用到一个类就会加载器静态成员属性

---- ----->且只加载一次

---- ------>静态的成员函数

------------ ---->可以使用类名直接调用,对象调用也可以不建议

---- ---->静态的成员函数只能访问静态的成员

----->练习1:写一个矩形类(左上角坐标,宽度、高度)

---------------------------- 判断一个点是不是在矩形内

---------------- 求面积、求周长,让使用者更方便的使用

------->继承

--------->体现代码的复用

--------->使用extends关键字

--------->子类的构造函数会去掉用父类的构造函数

------------ ----->如果没有显示去调用父类的构造函数,默认就调用父类无参数的构造函数

--------->方法的重写or覆盖

--------->动态绑定

----------------->父类的引用引用了子类的对象

--------------->面向对象的语言都可以是父类的引用引用任何子类的实例

---- ----->调用方法的时候,如果方法构成重写,调用子类的方法。

--------->java中只能单一继承,java中的继承具有传递性

-------- ---->java中如果一个类没有父类,父类就是Object

------------->java.lang.Object类是一起类的父类

------>总体的初始化顺序(有父类有子类)

-------- ----->用到类先父类静态,再子类静态且只一次

-------- ----->然后是父类的定义初始化,父类的构造函数

-------- ----->最后是子类的定义初始化,子类的构造函数

------->抽象类

---- ----->抽象方法的概念

------------ ----->一个方法只有声明没有实现,就是抽象方法必须用abstract关键字声明

---- ----->如果一个类中有抽象方法,那么该类就是抽象类,必须用abstract声明

------------>抽象类不能直接实例化,但是可以实例化子类的对象

#总结:

----->环境搭建

---- ----->用记事本写代码测试classpath环境变量,包,访问权限。

----->java的数据类型

---------->基本数据类型---- char,boolean,其它

---------->数组的使用

---------->可变参数

------>函数重载

------>类和对象

--------->构造函数

--------->构造函数的重载

--------->this引用

--------->定义初始化(定义初始化块)

--------->静态成员变量

------------ ----->静态定义初始化

---- ---->静态定义初始化块

---- ----->静态成员函数

------->继承

---- ----->继承中的构造函数问题

---- ----->方法重写(覆盖)

---- ----->动态绑定

---- ----->初始化顺序

------->抽象类

------->eclipse

---------------->快捷键----alt+/

---- ---->导入项目

--------------->File--->import---->General---->Existing projects into..--->bowser--->选中项目--->确定--->finish

--------------->如果jre报错

-------------------->右击项目--->Properties---->Java Builder Path--->右边选项卡选择Libraries--->选中jre----->remove

-------- ---->add lib --->Jre system lib---->next--->...

#接口

------>接口体现的是一种标准

---------- ----->统一行为

------>用interface关键字声明

------------>内部声明的方法都是public abstract的即使你没有这样声明

------>标准的具体实现

------------>implements关键字

----- ---->实现接口(遵循标准)

------ ---->要重写接口中的方法

------->接口不能直接有实例,只能引用实现了该接口的类的实例

--------- ----->语法上理解为父类的引用引用了子类的对象

------->接口可以继承其它接口,并且可以多继承

-------->内部类

-------------->成员内部类

-------------->静态内部类

-------------->局部内部类

------------ ----->看到函数的参数或者返回值类型是接口

---------------- ----->实现了这个接口的类的对象

---- ----->看到函数的参数或者返回值类型是抽象类

-------------------->继承了该抽象类的对象

---- ------->匿名内部类

--------------------->创建匿名内部类的对象

------------ ----->已知父类(普通类、抽象类、接口)

------------->要获取其子类的实例

------------->new 父类(){子类的实现部分}

---->this

---- ---->当前对象的引用(调用这个函数的那个对象的引用)

---- ---->非静态的成员变量访问非静态的成员都省略了this

---- ---->this(参数)

---- ---->类名.this

#习1:定义一个接口CanFight 有fight方法

------------1.创建类实现该接口

---- 2.定义一个人类,声明一个方法返回值是CanFight

---- 3.再声明一个方法参数类型是CanFight

---- 4.使用匿名类的对象完成2,

---- 5.在主函数中调用方法3使用匿名类的对象完成

------>final

-------- ---->修饰类,该类不能被继承

-------- ---->修饰方法,该方法不能被重写

-------- ----->修饰变量,变量只能赋值一次

#四、java集合专题(封装的数据结构的操作)

##1.java.util包下一些类的操作

------>Collection接口

-------- ----->List接口

------------------------->ArrayList类

------------------------ ----->包装的是数组的操作

---------------- ---->插入元素、移除元素、扩容... ...

----------------->常用的API

---------------- ---->add方法、size方法,get(index)方法

---------------- ---->如何遍历(三种方式)

------------------------------------->注意点:

-------------------- ----->尽量预估大小避免扩容操作。

-------------------- ----->只要遇到以数组作为低层数据结构的,都要预估大小避免扩容。

------------ ----->LinkedList类

-------------------- ------>操作和ArrayList类似

------------ ------->封装链表的操作

------------ ------->头尾操作比较高效

---------------------------->提供了丰富的头尾操作的方法

-------- ----->Set接口

-------------------------->HashSet类

-------------------- ----->不能存放重复元素

------------ ----->重复元素如何定义

---------------------------->jvm默认就比较地址

---------------- ---->jvm提供了一种方式,让应用告诉JVM什么是重复对象

-------------------- ---->equals方法

-------------------->hashCode方法

-------------------->保证如果连个对象equals返回true,那么hashCode必须返回相同值

---------------- ------->TreeSet

---------------- ----->放进去的对象要能够进行排序

----------------->如何排序

---------------- ---->比较器java.util.Comparable

------------------------>compareTo方法如果放回0

------------------------>比较的两个对象equals为true

---------------->比较器java.util.Comparator

----->Map接口

-------- ------->HashMap(key/value)

-------- ---->基础API

---------------- ---->存,取,遍历

-------- ---->如果key相同value会覆盖

-------- ---->HashMap的数据结构(数组+链表)

#五、一些基础的常用类

##1.java.lang.Math

##2.静态导入

##3.java.util.Random

##4.java.util.UUID

##5.java.util.Date

##6.java.util.Calendar

##7.java.lang.String,java.lang.StringBuilder,java.langStringBuffer

-----------------------------12.5----------------------------------------------

#六、java异常处理

##1.类的结构

----->java.lang.Throwable

-------- ----->java.lang.Error

--------->java.lang.Exception

----->java中对所有的异常都进行了分门归类

-------- ----->产生任何一个异常都是一个类的具体实例

--------->Exception是一切异常的父类

----->Exception 又分为两类

-------- ----->一类如果程序不处理编译都不通过

-------- ----->另外一类可以程序不处理,jvm自动处理,

-------------------- ,也可以通过程序处理

-------- ---->java.lang.RuntimeException

##2.try,cache,finally

##3.异常常用的方法

---->getMessage()

---->toString()

---->printStackTrace();

##4.throw ,throws 关键字

------>throw

-------- ---->某个条件下人为制造出异常

-------- ---->throw 异常对象

------>throws

-------- ----->回避异常

------------------------->有异常自己不处理,交给使用者处理

------------ ----->通过throws 回避异常以便通过编译,并告知使用者可能有这样的异常

------->自定义异常

-------- ------>创建一个类继承已有的异常类

------>子类重写父类方法时,不能throws 比父类更多的异常,

------------ ----->除非该异常是RuntimeException类型的。

------------ ----->里式替换原则

-------------------- ----->任何父类都可以引用子类对象

--------------------->但是子类不能比父类有更多的约束。

#七、java io处理

##1.了解编码

------>utf-8,gbk,utf-16be

------>文件是什么编码序列,转换成字符串必须用该编码,否则就会出现乱码

##2.java.io.File类

------->基本的API操作查看帮助文档

---- ----->判断是否存在、是否是文件or目录

---- ----->创建

------->list方法

------->练习删除一个文件夹

---- ----->文件夹为空才能删除

---- ----->把删除的目录和文件打印到控制台

##3.输入、输出

------>字节流(以字节为单位进行读取)

---- ----->输入流

---------------- InputStream ----->read()

---------------- ---->FileInputStream

-------- ---->DataInputStream

---- ----->输出流

---------------- OutputStream----->write()

--------------------->FileOutputStream

-------- ----->DataOutputStream

---- ----->所有的字节流都是通过最原始的读写(一个字节一个字节)

----------------一步一步装饰而来。

---- ------>装饰模式

------------------------->在不改变原有代码的基础上,让功能不断强大

------------ ----->类型不变

--------->字符流(以字符为单位进行读取)

-------- ----->只对文本文件。

--------->输出流

------------ ------>Writer

------------ ---->OutputStreamWriter

------------ ---->BufferedWriter/PrintWriter

--------->输入流

------------ ------>Reader

----------------->InputStreamReader

----------------->BufferedReader

------->标准的输入输出

---------->System.in

---- ----->System.out

##练习1:拷贝一个文本文件到另外一个目录

---- ----- 用一次读一行的字符流来进行操作

##4.对象序列化和反序列化

-------->就是把对象的状态保存起来就是序列化

-------->从保存的地方把对象恢复出来就是反序列化

-------->java.io.ObjectOutputStream

-------->java.io.ObjectInputStream

-------->java.io.Serializable

-------->transient修饰的属性就不会做虚拟机默认的序列化工作

#八、java的反射机制

##1.java.lang.Class类

------>Class Type 是类的类型

------>Class.for("类的全称")

---------------->动态加载类,在运行时刻加载类

------------ ---->只有一种方式Class.forName("字符串");

---- ---->静态加载是在编译时刻加载

-------------------->所有new的对象都是静态加载的

------>框架的原理

---- ----->框架是半成品,通过了编译。

---- ----->运行起来的时候需要调用我们写的类和方法

---- ----->框架出现的时候我们还没有写类和方法呢

---- ----->框架是如何调用我们的类和方法的呢?

---- ----->框架是在运行时刻动态加载我们的类,并创建对象,调用方法。

------------ ----->Class.forName("类名");

-------->int,double...----,void

-------->通过java.lang.Class可以获取类的所有信息

-------- --->要获取类的信息,先获取类的类类型

##2.java.lang.reflect.Method

------>如果获取一个方法

------>method.invoke()

##3.java.lang.reflect.Field

------->如果获取一个成员变量

------->field.get(obj)/field.set(obj,value)

练习2:写一个方法public static void changeValue(Object object)

##4.数组的反射

##5.构造函数的反射

#九、java多线程

##1.如何创建线程

--->第一种方式

------->创建一个类实现Runnable接口

------->以实现了Runnable接口的类的对象作为创建Thread类对象的构造函数的参数

---->主函数本身就是一个线程

----->第二种方式

----->创建一个类继承Thread

----->从写run方法

#JDBC,设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值