一个备案号多个网站,自适应网站如何做mip网页,wordpress付费下载功能,网站做水印有没有影响文章目录 第1章 Java开发入门第2章 Java编程基础第3章 面向对象#xff08;上#xff09;第4章 面向对象#xff08;下#xff09;第5章 异常第6章 Java API第7章 集合类第8章 泛型第9章 反射第10章 IO#xff08;输入输出#xff09;第11章 JDBC第12章 多线程第13章 网络… 文章目录 第1章 Java开发入门第2章 Java编程基础第3章 面向对象上第4章 面向对象下第5章 异常第6章 Java API第7章 集合类第8章 泛型第9章 反射第10章 IO输入输出第11章 JDBC第12章 多线程第13章 网络编程 第1章 Java开发入门
一、 1对象 2面向对象、跨平台性 3javac 4Java虚拟机或JVM 5JRE 二、 1错 2错 3错 4对 5对 三、 1C 2ABCD 3D 4ABD 5D 四、 1简答性、面向对象、安全性、跨平台性、支持多线程、分布性。 2. Java程序运行时必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译生成后缀名为.class的字节码文件然后Java虚拟机将字节码文件进行解释执行并将结果显示出来。 五、 HelloWorld.java public class HelloWorld {public static void main(String[] args) {System.out.println(这是第一个Java程序!);}}第2章 Java编程基础
一、 1class 2单行注释、多行注释、文档注释 34 4 5容器、0 二、 1对 2错 3对 4错 5对 三、 1AC 2A 3BD 4C 5C 四、 1.Java语言的八种基本数据类型有byte字节型占一个字节。short短整型占两个字节。int整型占4个字节。long长整型占8个字节。float单精度浮点型占4个字节。double双精度浮点型占8个字节。char字符型占两个字节。boolean型表示逻辑值有true和false两个值分别占一个字节。 2. 在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时作用是终止某个case并跳出switch结构。当它出现在循环语句中作用是跳出循环语句执行循环后面的代码continue语句用在循环语句中它的作用是终止本次循环执行下一次循环。 五、 1. public class getSum {public static void main(String[] args) {int sum 0;for (int i 1; i 100; i) {if (i % 2 ! 0)sum i;}System.out.println(sum);}}public class Test {public static void main(String[] args) {int i 1;long sum 1;do {sum * i;i;} while (i 5);System.out.println(sum);}}第3章 面向对象上
一、 1封装、继承、多态 2private、default、protected、public 3static 4private 5参数类型 参数个数 6this 二、 1对 2对 3错 4对 5对 三、 1C 2B 3D 4B 5C 四、 1 面向对象的特点主要可以概括为封装性、继承性和多态性。 其中封装是面向对象核心思想,“将对象的属性和行为封装起来”,“不需要让外界知道具体实现细节”,“这就是封装思想。 继承性主要描述的是类与类之间的关系”,“通过继承”,“可以在无需重新编写原有类的情况下”,“对原有类的功能进行扩展。 多态性指的是在程序中允许出现重名现象”,“它指在一个类中定义的属性和方法被其它类继承后”,“它们可以具有不同的数据类型或表现出不同的行为”,这使得同一个属性和方法在不同的类中具有不同的语义。 2 (1)构造方法名与类名相同 (2)在构造方法名的前面没有返回值类型的声明 (3)在构造方法中不能使用return语句返回一个值 五、 Example.java
class Resume {private String name;private String sex;private int age;public Resume(){}public Resume(String name,String sex,int age){this.name name;this.sex sex;this.age age;}public String getName(){return name;}public String getSex(){return sex;}public int getAge(){return age;}public void introduce(){System.out.println(姓名this.getName()\n性别this.getSex()\n年龄this.getAge());}
}
public class Example{public static void main(String[] args){Resume re new Resume(李四,男,20);re.introduce();}
}第4章 面向对象下
一、 1继承 2重写 3final 4implements 5抽象类 6super 二、 1错 2对 3对 4对 5对 6错 7对
三、 1B 2D 3C 4D 5C 四、 1概念在Java中,“类的继承是指在一个现有类的基础上去构建一个新的类”,“构建出来的新类被称作子类”,“现有类被称作父类”,“子类会自动拥有父类所有可继承的属性和方法。 好处继承性主要描述的是类与类之间的关系”,“通过继承”,“可以无需重新编写原有类的情况下”,“对原有类的功能进行使用和扩展。 2应用程序不必为每一个子类编写功能调用”,“只需要对抽象父类进行处理即可。大大提高程序的可复用性。 子类的功能可以被父类的方法或引用变量所调用”,“这叫向后兼容”,“可以提高可扩充性和可维护性。 使用多态可以解决项目中紧偶合的问题”,提高程序的课扩展性.是OCP原则的一个具体的实现。 3. 成员定义的差异抽象类可以包含抽象方法和非抽象方法其中非抽象方法可以直接实现从而提高代码的复用性。而接口中只能定义抽象方法所有方法在接口中都不能有实现。
成员变量的差异抽象类的成员变量可以是任何类型包括私有成员变量。但是接口中的成员变量只能是public和static的也就是只能是常量。
继承的差异一个类只能继承一个抽象类从而确保了Java单继承的体系结构。然而一个类可以实现多个接口这就提供了一种多重继承的机制。 五、 Employee.java
abstract class Employee{private String name; //定义姓名name并私有化属性private int month; //定义生日月份month并私有化属性public Employee(){} //无参构造器public Employee(String name,int month){ //有参构造方法this.name name; //给属性name初始化赋值this.month month; //给属性month初始化赋值}//获取属性name的方法public String getName(){return name; //返回name属性}//获取属性month的方法public int getMonth(){return month; //返回month属性}//给属性name赋初始值public void setName(String name){this.name name; //本类中的属性name}//给属性month赋初始值public void setMonth(int month){this.month month; //本类中的属性month}//创建一个方法getSalary()用来计算工资参数month是月份如果当月是员工生日奖 励100元public double getSalary(int month){double salary 0; //定义工资变量//判断当前月份是否是员 工的生日月份如果是奖励100元if(this.month month){salary salary 100; return salary; //返回工资salary}}
}SalariedEmployee.java
class SalariedEmployee extends Employee{private double monthSalary; //封装monthSalary属性public SalariedEmployee(){} //无参构造方法//有参构造方法 参数 姓名 生日月份 月薪public SalariedEmployee(String name,int month,double monthSalary){super(name,month); //调用父类有参构造方法this.monthSalary monthSalary; //为属性monthSalary初始化赋值}//获取monthSalary的值public double getMonthSalary(){return monthSalary;}//给monthSalary赋值public void setMonthSalary(double monthSalary){this.monthSalary monthSalary;}//覆盖父类中的方法public double getSalary(int month){double salary monthSalarysuper.getSalary(month); //定义工资变量return salary; }
}HourlyEmployee.java
class HourlyEmployee extends Employee{private double hourlySalary; //定义属性hourlySalary每小时的工资private int hours; //定义属性hours每月工作的小时数public HourlyEmployee(){} //无参构造方法//有参构造方法 参数 姓名 生日月份 每小时的工资 每月工作的小时数 public HourlyEmployee(String name,int month,double hourlySalary,int hours){super(name,month); //调用父类有参构造方法 this.hourlySalary hourlySalary ; //为属性hourlySalary初始化赋值this.hours hours; //为属性hours 初始化赋值}public double getHourlySalary(){ //获取hourlySalary的值return hourlySalary;}public int getHours(){ //获取hours的值return hours;}//定义set方法设置hourlySalary hours的值public void setHourlySalary(double hourlySalary){this.hourlySalary hourlySalary;}public void setHourly(int hours){this.hours hours;}//覆盖父类方法public double getSalary(int month){if(hours 0){ //如果工作小时数小于0 输出数据错误System.out.println(数据错误);return 0;} //小于160个小时的 按照每个月的工作小时数乘以每小时的工资else if(hours 160) return hourlySalary*hourssuper.getSalary(month); //超出160个小时的小时数 按照1.5倍计算 else return hourlySalary*160hourlySalary*1.5*(hours- 160)super.getSalary(month);}
}SalesEmployee.java
class SalesEmployee extends Employee{private double sales ; //定义销售额salesprivate double rate; //定义提成率ratepublic SalesEmployee(){}public SalesEmployee(String name,int month,double sales,double rate){super(name,month);this.sales sales;this.rate rate;}public double getSales(){return sales;}public double getRate(){return rate;}public void setSales(double sales){this.sales sales;}public void setRate(double rate){this.rate rate;}public double getSalary(int month){return this.getSales()*(1this.getRate())super.getSalary(month);}
}BasePlusSalesEmployee.java
class BasePlusSalesEmployee extends SalesEmployee{private double baseSalary; //定义基础工资baseSalary//无参构造方法public BasePlusSalesEmployee(){}//有参构造方法public BasePlusSalesEmployee(String name,int month,double sales,double rate,double baseSalary){super(name,month,sales,rate);this.baseSalary baseSalary;}//get/set方法对私有属性的调用和设置public double gatBaseSalary(){return baseSalary;}public void setBaseSalary(){this.baseSalary baseSalary;}public double getSalary(int month){return baseSalarysuper.getSalary(month);}
}Test.java
//定义一个测试类
public class Test{public static void main(String[] args){//声明一个Employee类型的数组并创建不同子类型的对象Employee[] employee {new SalariedEmployee(“张三”,1,6000),new HourlyEmployee(“李四”,2,50,180),new SalesEmployee(“王五”,3,6500,0.15),new BasePlusSalesEmployee(“赵六”,4,5000,0.15,2000)};//打印每个员工的工资for(int i 0; i employee.length ;i)System.out.println(Math.round(employee[i].getSalary(10)));}
}第5章 异常
一、 1RuntimeException 2运行时异常 编译时异常 3throw 4throws 5Exception 二、 1错 2对 3对 4对 5错 三、 1C 2A 3C 4C 5A 四、 1. try、catch、finally、throw、throws。 2. 程序通过try语句捕获可能出现的异常如果try语句没有捕获到异常则直接跳出try…catch语句块执行其他程序如果在try语句中捕获到了异常则程序会自动跳转到catch语句中找到匹配的异常类型进行相应的处理。如果try语句捕获到的异常与catch语句例的异常匹配则先执行catch中的语句最后执行其他程序语句。 处理编译时期的异常有两种方式如下 1使用try…catch语句对异常进行捕获处理。 2使用throws关键字声明抛出异常调用者对异常进行处理。
第6章 Java API
一、 1String StringBuffer StringBuilder 2length() 3DateFormat 4Random 5edcba 二、 1错 2错 3对 4对 5错 三、 1B 2C 3A 4B 5A 四、 1 String类表示的字符串是常量一旦创建后内容和长度都是无法改变的。而StringBuilder和StringBuffer表示字符容器其内容和长度可以随时修改。在操作字符串时如果该字符串仅用于表示数据类型则使用String类即可但是如果需要对字符串中的字符进行增删操作则使用StringBuffer与StringBuilder类。如果有大量字符串拼接操作不要求线程安全的情况下采用StringBuilder更高效。相反如果需要线程安全则需要使用StringBuffer。 2 基本数据类型 对应的包装类
byte Byte
char Character
int Integer
short Short
long Long
float Float
double Double
boolean Boolean五、 1. Example.java import java.util.Random;public class Example {public static void main(String[] args) {for(int i0;i10;i){System.out.println(new Random().nextInt(100));}}}Test.java import java.text.DateFormat;import java.util.Calendar;import java.util.Date;public class Test {public static void main(String[] args) {Calendar calendar Calendar.getInstance();calendar.add(Calendar.DATE, 100);Date date calendar.getTime();DateFormat format DateFormat.getDateInstance(DateFormat.FULL);String string format.format(date);System.out.println(string);}}第7章 集合类
一、 1Collection 2hashNext() next() 3Comparable 4Key键、Value值 5数组 二、 1错 2对 3对 4对 5对 三、 1D 2D 3C 4A 5C 四、 1 List的特点是元素有序、可重复。List接口的主要实现类有ArrayList和LinkedList。Set的特点是元素无序、不可重复。Set接口的主要实现类有HashSet和TreeSet。Map的特点是存储的元素是键(Key)、值(Value)映射关系元素都是成对出现的。Map接口的主要实现类有HashMap和TreeMap。 2 由于ArrayList集合的底层是使用一个数组来保存元素在增加或删除指定位置的元素时会导致创建新的数组效率比较低因此不适合做大量的增删操作。但这种数组的结构允许程序通过索引的方式来访问元素因此使用ArrayList集合查找元素很便捷。 五、 1. Example.java public class Example {public static void main(String[] args) {ArrayList list new ArrayList();list.add(a);list.add(b);list.add(c);list.add(a);for(Iterator it list.iterator();it.hasNext();){System.out.println(it.next());}}}Test.java import java.util.*;class Student {private int age;private String name;public Student(int age, String name) {this.age age;this.name name;}public String toString() {return age : name;}public int hashCode() {return name.hashCode() age;}public boolean equals(Object obj) {if (this obj)return true;if (!(obj instanceof Student))return false;Student stu (Student) obj;return this.name.equals(stu.name) this.age stu.age;}}public class Test {public static void main(String[] args) {HashSetStudent hs new HashSetStudent();hs.add(new Student(18, zhangsan));hs.add(new Student(20, lisa));hs.add(new Student(20, lisa));System.out.println(hs);}}第8章 泛型
一、 1参数化 2泛型类 泛型接口 泛型方法 3泛型方法 4实现 二、 1错 2对 3对 4对 5对 三、 1D 2A 3A 4AC 四、 1 1提高类型的安全性。 泛型的主要目标是提高Java程序的类型安全性即可以通过泛型定义对变量类型进行限制在对变量类型限制之后编译器可以更好的进行类型验证。 2避免强制类型转换。 使用泛型的另一个好处是避免源代码中的许多强制类型转换。这使得代码可读性更高并且减少出错机会。尽管减少强制类型转换可以降低使用泛型类代码的复杂度但是声明泛型变量会带来相应的复杂操作。 五、 1. interface GenericT{ public abstract void get(T t){} } class GenericT implements Generic{ public void get(T t){} }第9章 反射
一、 1动态 2newInstance() 3Method 4getDeclaredFields() 5Class 二、 1对 2对 3对 4错 5对 三、 1D 2C 3AC 4A 5C 四、 1 Java的反射reflection机制是指在程序的运行状态中可以构造任意一个类的对象可以得到任意一个对象所属的类的信息可以调用任意一个类的成员变量和方法可以获取任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。 2 1根据类名获取类名.class 2根据对象获取对象.getClass() 3根据全限定类名获取Class.forName(“全限定类名”)。
第10章 IO输入输出
一、 1字节流 字符流 2Reader 3BufferedInputStream BufferedOutputStream 4InputStreamReader OutputStreamWriter 5OutputStream 二、 1对 2错 3错 4对 5错 三、 1A 2A 3B 4C 5C 四、 1 字节流的两个基类是InputStream和OutputStream字符流的两个基类是Reader和Writer它们都是Object类的直接子类字节流是处理以8位字节为基本单位的字节流类Reader和Writer类是专门处理16位字节的字符流类。 2 InputStreamReader是Reader的子类它可以将一个字节输入流转换成字符输入流方便直接读取字符。OutputStreamWriter是Writer的子类它可以将一个字节输出流转换成字符输出流方便直接写入字符。 五、 1. Test01.Java import java.io.*;public class Test01 {public static void main(String[] args) throws Exception {// 字节流拷贝FileInputStream in new FileInputStream(E:/src.txt);FileOutputStream out new FileOutputStream(E:/des1.txt);byte[] buf new byte[1024];int len;while ((len in.read(buf)) ! -1) {out.write(buf, 0, len);}in.close();out.close();// 字符流拷贝BufferedReader bf new BufferedReader(new FileReader(E:/src.txt));BufferedWriter bw new BufferedWriter(new FileWriter(E:/des2.txt));String str;while ((str bf.readLine()) ! null) {bw.write(str);bw.newLine();}bf.close();bw.close();}}第11章 JDBC
一、 1java.sql.DriverManager 2classpath 3update 4预编译 51 二、 1错 2对 3对 4对 5错 三、 1B 2B 3C 4C 5A 5AD
四、 1 1、加载并注册数据库驱动2、通过DriverManager获取数据库连接3、通过Connection对象获取Statement对象4、使用Statement执行SQL语句5、操作ResultSet结果集6、回收数据库资源。2 所谓预编译,就是说当相同的SQL语句再次执行时,数据库只需使用缓冲区中的数据,而不需要对SQL语句再次编译,从而有效提高数据的访问效率。
第12章 多线程
一、 1Thread Runnable 2新建状态New、就绪状态Runnable、运行状态Running 3start() 4sleep() 5synchronized 二、 1对 2对 3对 4错 5错 三、 1C 2B 3B 4D 5BC 四、 1 一种是继承java.lang包下的Thread类覆写Thread类的run()方法在run()方法中实现运行在线程上的代码。
new Thread() {public void run(){}
}.start();另一种就是实现java.lang.Runnable接口同样是在run()方法中实现运行在线程上的代码。
class MyThread implements Runnable{public void run(){}
}2 同步代码块的作用是控制线程保证同步代码块中只能有一个线程在运行保证了多线程操作数据的安全性。 五、 1. Example.java public class Example {public static void main(String[] args) {TicketWindow tw new TicketWindow();new Thread(tw, 线程1).start();new Thread(tw, 线程2).start();}}class TicketWindow implements Runnable {private int num 100;public void run() {while (num 0) {Thread th Thread.currentThread();String th_name th.getName();System.out.println(th_name 正在发售第 num-- 张票 );}}
}第13章 网络编程
一、 1链路层、网络层、运输层、应用层 2UDP 3TCP 4DatagramSocket 5ServerSocket 二、 1错 2错 3对 4对 5对 三、 1D 2A 3D 4C 5D 四、 1UDP通信与TCP通信的区别在于UDP中只有发送端和接收端不区分客户端与服务器端计算机之间可以任意地发送数据而TCP通信是严格区分客户端与服务器端的在通信时必须先由客户端去连接服务器端才能实现通信服务器端不可以主动连接客户端并且服务器端程序需要事先启动等待客户端的连接。 2在TCP连接中必须要明确客户端与服务器端由客户端向服务器端发出连接请求每次连接的创建都需要经过“三次握手”。第一次握手客户端向服务器端发出连接请求等待服务器确认第二次握手服务器端向客户端回送一个响应通知客户端收到了连接请求第三次握手客户端再次向服务器端发送确认信息确认连接。 五、 AskServer.java
/**** 在线客服咨询人员**/public class AskServer {public static void main(String[] args) {//创建DatagramSocket发送接收数据都依赖他DatagramSocket socket null;try {socket new DatagramSocket(8888);Scanner input new Scanner(System.in);while (true) {//准备一个空的数据包用来接收数据byte[] buf new byte[1024];DatagramPacket packet new DatagramPacket(buf, buf.length);//接收数据使用空的数据包socket.receive(packet);//输出信息String info new String(packet.getData(), 0, packet.getLength());System.out.println(客户端请求 info);//判断是否退出if (bye.equals(info)) {break;}//发送数据String result input.nextLine();byte[] buf2 result.getBytes();DatagramPacket packet2 new DatagramPacket(buf2, buf2.length,packet.getAddress(), packet.getPort());socket.send(packet2);}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//关闭socketsocket.close();}}}AskClient.java
/**** 在线客服客户**/public class AskClient {public static void main(String[] args) {//创建DatagramSocket发送接收数据都依赖他DatagramSocket socket null;try {socket new DatagramSocket(9999);Scanner input new Scanner(System.in);while (true){//准备要发送的数据String str input.nextLine();//bye//使用数据包把数据封装起来byte[] buf str.getBytes();DatagramPacket packet new DatagramPacket(buf, buf.length,InetAddress.getByName(192.168.1.252), 8888);//发送数据包socket.send(packet);//判断是否退出if (bye.equals(str)) {break;}//接收数据byte[] buf2 new byte[1024];DatagramPacket packet2 new DatagramPacket(buf2, buf2.length);socket.receive(packet2);System.out.println(服务器端反馈new String(packet2.getData(), 0, packet2.getLength()));}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//关闭socketsocket.close();}}
}