- 浏览: 39353 次
- 性别:
- 来自: 武汉
最新评论
-
ifox:
唉,我们不可以。。。
都是配置好的
Cannot convert value '0000-00-00"的解决方案 -
zhanghaidang:
非常感谢,已经可以了,谢谢指点
怎么让矩形顺着我画的线溜下来 -
robin_luyi:
// 松开时调用
private class ...
怎么让矩形顺着我画的线溜下来 -
zhanghaidang:
// 松开时调用
@Override
publ ...
怎么让矩形顺着我画的线溜下来 -
robin_luyi:
单写个线程修改小方块的坐标变量
怎么让矩形顺着我画的线溜下来
l JBS
1.列举出 10个JAVA语言的优势
a:免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用
2.列举出JAVA中10个面向对象编程的术语
a:包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型
3.列举出JAVA中6个比较常用的包
Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing
4.JAVA中的标识符有什么作用和特点
作用:标识符用作给变量、类和方法命名
特点:可以以字母、下划线“_”和”$”符开头
首字符外,可以跟上字母、下划线“_”和”$”符或数字
Java是大小写敏感的,标识符也不例外
5.JAVA中的关键字有什么特点,列举出至少20个关键字
Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)
所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字 ;
goto和const 虽然从未被使用,但也作为Java关键字保留;
• 中一共有51个关键字Java
abstract assert boolean break byte continue
case catch char class const double
default do extends else final float
for goto long if implements import
native new null instanceof int interface
package private protected public return short
static strictfp super switch synchronized this
while void throw throws transient try
volatile
6.JAVA中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:数值型(byte,short,int,long,float double),字符型(char),布尔型(boolean);
引用数据类型:类,接口,数组.
7.JAVA中运算符的分类及举例
• 分割符:,,;,[],()
• 算术运算符: +,―,*,/,%,++,――
• 关系运算符: >, <,>=, <=,==,!=
• 布尔逻辑运算符: !,& , ¦ , ^ , &&, ¦ ¦
• 位运算符: &, ¦,^,~ , >>, < <,>>>
• 赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
• 字符串连接运算符: +
• 造型操作符:()
8.super,this关键字的作用及用法
• 在Java类中使用super来引用父类的成分
– 可用于访问父类中定义的属性super
– 可用于调用父类中定义的成员方法super
– 可用于在子类构造器中调用父类的构造器super
– 的追溯不仅于直接父类super
• 中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。Java
– 构造器中指该构造器所创建的新对象
– 方法中指调用该方法的对象
• 关键字的用法this
– 在类本身的方法或构造器中引用该类的实例变量和方法
– 将当前对象作为参数传递给其它方法或构造器
– 用来调用其他的重载的构造器
9.什么是JAVA中的表达式?有什么作用?
• 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
• 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。
• 一些表达式的例子:
– X
– X+10
– Y=x+10
– Arr[10]
– student.geName()
10.做表列出JAVA中所有修饰符和他们的适用范围(能不能修饰构造器,属性,自由块等)
class 属性 方法 构建器 自由块 内部类
public Y Y Y Y Y
protected Y Y Y Y
(Default) Y Y Y Y Y Y
private Y Y Y Y
final Y Y Y Y
abstract Y Y Y
static Y Y Y
11.写一个方法,用一个for循环打印九九乘法表
/**
*一个for循环打印九九乘法表
*/
publicvoid nineNineMultiTable()
{
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j)
{
i=0;
j++;
System.out.println();
}
}
}
12.给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串
/**
*将某个日期以固定格式转化成字符串
*@paramdate
*@returnstr
*/
public String dateToStr(java.util.Date date)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
return str;
}
13.写一个方法,能够判断任意一个整数是否素数
/**
*判断任意一个整数是否素数
*@paramn
*@returnboolean
*/
publicboolean isPrimes(int n)
{
for (int i = 2; i <= Math.sqrt(n); i++) {
if(n%i==0)
{
returnfalse;
}
}
returntrue;
}
14.写一个方法,输入任意一个整数,返回它的阶乘
/**
*获得任意一个整数的阶乘
*@paramn
*@returnn!
*/
publicint factorial(int n)
{
//递归
if(n==1)
{
return 1;
}
return n*factorial(n-1);
//非递归
// int multi = 1;
// for (int i = 2; i <= n; i++) {
// multi*=i;
// }
// return multi;
}
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
if(data <dataset[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else
{
return midIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} elseif(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else
{
return midIndex;
}
}
return -1;
}
16.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
package com.softeem.demo;
/**
*@authorleno
*动物的接口
*/
interface Animal
{
publicvoid eat(Food food);
}
/**
*@authorleno
*一种动物类:猫
*/
class Cat implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小猫吃"+food.getName());
}
}
/**
*@authorleno
*一种动物类:狗
*/
class Dog implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小狗啃"+food.getName());
}
}
/**
*@authorleno
*食物抽象类
*/
abstractclass Food
{
protected String name;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
/**
*@authorleno
*一种食物类:鱼
*/
class Fish extends Food
{
public Fish(String name) {
this.name = name;
}
}
/**
*@authorleno
*一种食物类:骨头
*/
class Bone extends Food
{
public Bone(String name) {
this.name = name;
}
}
/**
*@authorleno
*饲养员类
*
*/
class Feeder
{
/**
*饲养员给某种动物喂某种食物
*@paramanimal
*@paramfood
*/
publicvoid feed(Animal animal,Food food)
{
animal.eat(food);
}
}
/**
*@authorleno
*测试饲养员给动物喂食物
*/
publicclass TestFeeder {
publicstaticvoid main(String[] args) {
Feeder feeder=new Feeder();
Animal animal=new Dog();
Food food=new Bone("肉骨头");
feeder.feed(animal,food); //给狗喂肉骨头
animal=new Cat();
food=new Fish("鱼");
feeder.feed(animal,food); //给猫喂鱼
}
}
17.描述JAVA中异常处理的机制
• 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。Java
• 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
• 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
• 程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
18.做一个单子模式的类,只加载一次属性文件
package com.softeem.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
*@authorleno
*单子模式,保证在整个应用期间只加载一次配置属性文件
*/
publicclass Singleton {
privatestatic Singleton instance;
privatestaticfinal String CONFIG_FILE_PATH = "E:\\config.properties";
private Properties config;
private Singleton()
{
config = new Properties();
InputStream is;
try {
is = new FileInputStream(CONFIG_FILE_PATH);
config.load(is);
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
publicstatic Singleton getInstance()
{
if(instance==null)
{
instance = new Singleton();
}
returninstance;
}
public Properties getConfig() {
returnconfig;
}
publicvoid setConfig(Properties config) {
this.config = config;
}
}
l J2SE
19.拷贝一个目录(文件)到指定路径
/**
*拷贝一个目录或者文件到指定路径下
*@paramsource
*@paramtarget
*/
publicvoid copy(File source,File target)
{
File tarpath = new File(target,source.getName());
if(source.isDirectory())
{
tarpath.mkdir();
File[] dir = source.listFiles();
for (int i = 0; i < dir.length; i++) {
copy(dir[i],tarpath);
}
}else
{
try {
InputStream is = new FileInputStream(source);
OutputStream os = new FileOutputStream(tarpath);
byte[] buf = newbyte[1024];
int len = 0;
while((len = is.read(buf))!=-1)
{
os.write(buf,0,len);
}
is.close();
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
20.用JAVA中的多线程示例银行取款问题
packagecom.softeem.demo;
/**
*@authorleno
*账户类
*默认有余额,可以取款
*/
class Account {
privatefloatbalance = 1000;
publicfloat getBalance() {
returnbalance;
}
publicvoid setBalance(float balance) {
this.balance = balance;
}
/**
*取款的方法需要同步
*@parammoney
*/
publicsynchronizedvoid withdrawals(float money)
{
if(balance>=money)
{
System.out.println("被取走"+money+"元!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
balance-=money;
}
else
{
System.out.println("对不起,余额不足!");
}
}
}
/**
*@authorleno
*银行卡
*/
class TestAccount1 extends Thread {
private Account account;
public TestAccount1(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(800);
System.out.println("余额为:"+account.getBalance()+"元!");
}
}
/**
*@authorleno
*存折
*/
class TestAccount2 extends Thread {
private Account account;
public TestAccount2(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(700);
System.out.println("余额为:"+account.getBalance()+"元!");
}
}
publicclass Test
{
publicstaticvoid main(String[] args) {
Account account = new Account();
TestAccount1 testAccount1 = new TestAccount1(account);
testAccount1.start();
TestAccount2 testAccount2 = new TestAccount2(account);
testAccount2.start();
}
}
21.用JAVA中的多线程示例火车站售票问题
package com.softeem.demo;
/**
*@authorleno
*售票类
*/
class SaleTicket implements Runnable {
inttickets = 100;
publicvoid run() {
while (tickets > 0) {
sale();
//或者下面这样实现
// synchronized (this) {
// if (tickets > 0) {
// System.out.println(Thread.currentThread().getName() + "卖第"
// + (100 - tickets + 1) + "张票");
// tickets--;
// }
// }
}
}
publicsynchronizedvoid sale() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖第"
+ (100 - tickets + 1) + "张票");
tickets--;
}
}
}
publicclass TestSaleTicket {
publicstaticvoid main(String[] args) {
SaleTicket st = new SaleTicket();
new Thread(st, "一号窗口").start();
new Thread(st, "二号窗口").start();
new Thread(st, "三号窗口").start();
new Thread(st, "四号窗口").start();
}
}
22.用JAVA中的多线程示例生产者和消费者问题
package com.softeem.demo;
class Producer implements Runnable
{
private SyncStack stack;
public Producer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for (int i = 0; i < stack.getProducts().length; i++) {
String product = "产品"+i;
stack.push(product);
System.out.println("生产了: "+product);
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable
{
private SyncStack stack;
public Consumer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for(int i=0;i <stack.getProducts().length;i++)
{
String product =stack.pop();
System.out.println("消费了: "+product);
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class SyncStack
{
private String[] products = new String[10];
privateintindex;
publicsynchronizedvoid push(String product)
{
if(index==product.length())
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
products[index]=product;
index++;
}
publicsynchronized String pop()
{
if(index==0)
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
index--;
String product = products[index];
return product;
}
public String[] getProducts() {
returnproducts;
}
}
publicclass TestProducerConsumer {
publicstaticvoid main(String[] args) {
SyncStack stack=new SyncStack();
Producer p=new Producer(stack);
Consumer c=new Consumer(stack);
new Thread(p).start();
new Thread(c).start();
}
}
23.编程实现序列化的Student(sno,sname)对象在网络上的传输
package com.softeem.demo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
class Student implements Serializable {
private int sno;
private String sname;
public Student(int sno, String sname) {
this.sno = sno;
this.sname = sname;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "学号:" + sno + ";姓名:" + sname;
}
}
class MyClient extends Thread {
@Override
public void run() {
try {
Socket s = new Socket("localhost", 9999);
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
Student stu = (Student) ois.readObject();
System.out.println("客户端程序收到服务器端程序传输过来的学生对象>> " + stu);
ois.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyServer extends Thread {
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());
Student stu = new Student(1, "赵本山");
ops.writeObject(stu);
ops.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestTransfer {
public static void main(String[] args) {
new MyServer().start();
new MyClient().start();
}
}
l JDBC
24.用dom4j组件解析如下XML格式的文件:
<?xml version="1.0" encoding="UTF-8"?>
<generator>
<table name="login" operation="1">
<column name="username" handle="0">aaa </column>
<column name="password" handle="0">123 </column>
</table>
<table name="login" operation="2">
<column name="id" handle="1">1 </column>
<column name="username" handle="0">bbb </column>
<column name="password" handle="0">444 </column>
</table>
<table name="login" operation="3">
<column name="id" handle="1">4 </column>
</table>
</generator>
规则: <table>operation 1表insert,2表update,3表delete.
<column>handle 1表作为where条件,0表作为操作字段。
要求:按照规则生成三条SQL语句!(即做一个方法解析xml文件生成一个含有三条SQL语句的字符串)
/**
*解析XML文件生成一个含有可执行SQL语句的字符串
*@paramxmlFileName
*@returnSQL
*/
public String parseXmltoSQL(String xmlFileName) {
StringBuffer sbsql = new StringBuffer();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(xmlFileName));
Element element = document.getRootElement();
Iterator it = element.elementIterator("table");
while (it.hasNext()) {
element = (Element) it.next();
//获得对表的操作
String oper = element.attributeValue("operation");
//获得表名
String tableName = element.attributeValue("name");
if ("1".equals(oper)) {
sbsql.append("insert into ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
sbsql.append("("+columnName1+","+columnName2+")"+" values('"+columnValue1+"','"+columnValue2+"')\n");
} elseif ("2".equals(oper)) {
sbsql.append("update ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
String columnName3 = null;
String columnValue3 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName3 = element.attributeValue("name");
columnValue3 = element.getText();
}
sbsql.append(" set "+columnName2+"='"+columnValue2+"',"+columnName3+"='"+columnValue3+"' where "+columnName1+"="+columnValue1+"\n");
}elseif ("3".equals(oper)) {
sbsql.append("delete from ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
sbsql.append(" where "+columnName1+"="+columnValue1);
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sbsql.toString();
}
l JSP/SERVLET
25.写出JSP的内置对象并说明他们的作用
request:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header数据的有用的方法。 response:response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out:out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext:pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session:session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 application:applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config:config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 page:page表示从该页面产生的一个servlet实例。
exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
谢谢楼主,确实不错!
不过
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
if(data <dataset[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else
{
return midIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} elseif(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else
{
return midIndex;
}
}
return -1;
}
这道题是不是还有点问题呢,因为是任意数组,所以data <dataset[midIndex]这个就有问题,不一定是小就在左边,大就在右边,在应用这之前是否应该先排序下
1.列举出 10个JAVA语言的优势
a:免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用
2.列举出JAVA中10个面向对象编程的术语
a:包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型
3.列举出JAVA中6个比较常用的包
Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing
4.JAVA中的标识符有什么作用和特点
作用:标识符用作给变量、类和方法命名
特点:可以以字母、下划线“_”和”$”符开头
首字符外,可以跟上字母、下划线“_”和”$”符或数字
Java是大小写敏感的,标识符也不例外
5.JAVA中的关键字有什么特点,列举出至少20个关键字
Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)
所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字 ;
goto和const 虽然从未被使用,但也作为Java关键字保留;
• 中一共有51个关键字Java
abstract assert boolean break byte continue
case catch char class const double
default do extends else final float
for goto long if implements import
native new null instanceof int interface
package private protected public return short
static strictfp super switch synchronized this
while void throw throws transient try
volatile
6.JAVA中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:数值型(byte,short,int,long,float double),字符型(char),布尔型(boolean);
引用数据类型:类,接口,数组.
7.JAVA中运算符的分类及举例
• 分割符:,,;,[],()
• 算术运算符: +,―,*,/,%,++,――
• 关系运算符: >, <,>=, <=,==,!=
• 布尔逻辑运算符: !,& , ¦ , ^ , &&, ¦ ¦
• 位运算符: &, ¦,^,~ , >>, < <,>>>
• 赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
• 字符串连接运算符: +
• 造型操作符:()
8.super,this关键字的作用及用法
• 在Java类中使用super来引用父类的成分
– 可用于访问父类中定义的属性super
– 可用于调用父类中定义的成员方法super
– 可用于在子类构造器中调用父类的构造器super
– 的追溯不仅于直接父类super
• 中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。Java
– 构造器中指该构造器所创建的新对象
– 方法中指调用该方法的对象
• 关键字的用法this
– 在类本身的方法或构造器中引用该类的实例变量和方法
– 将当前对象作为参数传递给其它方法或构造器
– 用来调用其他的重载的构造器
9.什么是JAVA中的表达式?有什么作用?
• 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
• 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。
• 一些表达式的例子:
– X
– X+10
– Y=x+10
– Arr[10]
– student.geName()
10.做表列出JAVA中所有修饰符和他们的适用范围(能不能修饰构造器,属性,自由块等)
class 属性 方法 构建器 自由块 内部类
public Y Y Y Y Y
protected Y Y Y Y
(Default) Y Y Y Y Y Y
private Y Y Y Y
final Y Y Y Y
abstract Y Y Y
static Y Y Y
11.写一个方法,用一个for循环打印九九乘法表
/**
*一个for循环打印九九乘法表
*/
publicvoid nineNineMultiTable()
{
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j)
{
i=0;
j++;
System.out.println();
}
}
}
12.给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串
/**
*将某个日期以固定格式转化成字符串
*@paramdate
*@returnstr
*/
public String dateToStr(java.util.Date date)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
return str;
}
13.写一个方法,能够判断任意一个整数是否素数
/**
*判断任意一个整数是否素数
*@paramn
*@returnboolean
*/
publicboolean isPrimes(int n)
{
for (int i = 2; i <= Math.sqrt(n); i++) {
if(n%i==0)
{
returnfalse;
}
}
returntrue;
}
14.写一个方法,输入任意一个整数,返回它的阶乘
/**
*获得任意一个整数的阶乘
*@paramn
*@returnn!
*/
publicint factorial(int n)
{
//递归
if(n==1)
{
return 1;
}
return n*factorial(n-1);
//非递归
// int multi = 1;
// for (int i = 2; i <= n; i++) {
// multi*=i;
// }
// return multi;
}
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
if(data <dataset[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else
{
return midIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} elseif(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else
{
return midIndex;
}
}
return -1;
}
16.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
package com.softeem.demo;
/**
*@authorleno
*动物的接口
*/
interface Animal
{
publicvoid eat(Food food);
}
/**
*@authorleno
*一种动物类:猫
*/
class Cat implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小猫吃"+food.getName());
}
}
/**
*@authorleno
*一种动物类:狗
*/
class Dog implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小狗啃"+food.getName());
}
}
/**
*@authorleno
*食物抽象类
*/
abstractclass Food
{
protected String name;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
/**
*@authorleno
*一种食物类:鱼
*/
class Fish extends Food
{
public Fish(String name) {
this.name = name;
}
}
/**
*@authorleno
*一种食物类:骨头
*/
class Bone extends Food
{
public Bone(String name) {
this.name = name;
}
}
/**
*@authorleno
*饲养员类
*
*/
class Feeder
{
/**
*饲养员给某种动物喂某种食物
*@paramanimal
*@paramfood
*/
publicvoid feed(Animal animal,Food food)
{
animal.eat(food);
}
}
/**
*@authorleno
*测试饲养员给动物喂食物
*/
publicclass TestFeeder {
publicstaticvoid main(String[] args) {
Feeder feeder=new Feeder();
Animal animal=new Dog();
Food food=new Bone("肉骨头");
feeder.feed(animal,food); //给狗喂肉骨头
animal=new Cat();
food=new Fish("鱼");
feeder.feed(animal,food); //给猫喂鱼
}
}
17.描述JAVA中异常处理的机制
• 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。Java
• 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
• 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
• 程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
18.做一个单子模式的类,只加载一次属性文件
package com.softeem.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
*@authorleno
*单子模式,保证在整个应用期间只加载一次配置属性文件
*/
publicclass Singleton {
privatestatic Singleton instance;
privatestaticfinal String CONFIG_FILE_PATH = "E:\\config.properties";
private Properties config;
private Singleton()
{
config = new Properties();
InputStream is;
try {
is = new FileInputStream(CONFIG_FILE_PATH);
config.load(is);
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
publicstatic Singleton getInstance()
{
if(instance==null)
{
instance = new Singleton();
}
returninstance;
}
public Properties getConfig() {
returnconfig;
}
publicvoid setConfig(Properties config) {
this.config = config;
}
}
l J2SE
19.拷贝一个目录(文件)到指定路径
/**
*拷贝一个目录或者文件到指定路径下
*@paramsource
*@paramtarget
*/
publicvoid copy(File source,File target)
{
File tarpath = new File(target,source.getName());
if(source.isDirectory())
{
tarpath.mkdir();
File[] dir = source.listFiles();
for (int i = 0; i < dir.length; i++) {
copy(dir[i],tarpath);
}
}else
{
try {
InputStream is = new FileInputStream(source);
OutputStream os = new FileOutputStream(tarpath);
byte[] buf = newbyte[1024];
int len = 0;
while((len = is.read(buf))!=-1)
{
os.write(buf,0,len);
}
is.close();
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
20.用JAVA中的多线程示例银行取款问题
packagecom.softeem.demo;
/**
*@authorleno
*账户类
*默认有余额,可以取款
*/
class Account {
privatefloatbalance = 1000;
publicfloat getBalance() {
returnbalance;
}
publicvoid setBalance(float balance) {
this.balance = balance;
}
/**
*取款的方法需要同步
*@parammoney
*/
publicsynchronizedvoid withdrawals(float money)
{
if(balance>=money)
{
System.out.println("被取走"+money+"元!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
balance-=money;
}
else
{
System.out.println("对不起,余额不足!");
}
}
}
/**
*@authorleno
*银行卡
*/
class TestAccount1 extends Thread {
private Account account;
public TestAccount1(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(800);
System.out.println("余额为:"+account.getBalance()+"元!");
}
}
/**
*@authorleno
*存折
*/
class TestAccount2 extends Thread {
private Account account;
public TestAccount2(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(700);
System.out.println("余额为:"+account.getBalance()+"元!");
}
}
publicclass Test
{
publicstaticvoid main(String[] args) {
Account account = new Account();
TestAccount1 testAccount1 = new TestAccount1(account);
testAccount1.start();
TestAccount2 testAccount2 = new TestAccount2(account);
testAccount2.start();
}
}
21.用JAVA中的多线程示例火车站售票问题
package com.softeem.demo;
/**
*@authorleno
*售票类
*/
class SaleTicket implements Runnable {
inttickets = 100;
publicvoid run() {
while (tickets > 0) {
sale();
//或者下面这样实现
// synchronized (this) {
// if (tickets > 0) {
// System.out.println(Thread.currentThread().getName() + "卖第"
// + (100 - tickets + 1) + "张票");
// tickets--;
// }
// }
}
}
publicsynchronizedvoid sale() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "卖第"
+ (100 - tickets + 1) + "张票");
tickets--;
}
}
}
publicclass TestSaleTicket {
publicstaticvoid main(String[] args) {
SaleTicket st = new SaleTicket();
new Thread(st, "一号窗口").start();
new Thread(st, "二号窗口").start();
new Thread(st, "三号窗口").start();
new Thread(st, "四号窗口").start();
}
}
22.用JAVA中的多线程示例生产者和消费者问题
package com.softeem.demo;
class Producer implements Runnable
{
private SyncStack stack;
public Producer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for (int i = 0; i < stack.getProducts().length; i++) {
String product = "产品"+i;
stack.push(product);
System.out.println("生产了: "+product);
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable
{
private SyncStack stack;
public Consumer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for(int i=0;i <stack.getProducts().length;i++)
{
String product =stack.pop();
System.out.println("消费了: "+product);
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class SyncStack
{
private String[] products = new String[10];
privateintindex;
publicsynchronizedvoid push(String product)
{
if(index==product.length())
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
products[index]=product;
index++;
}
publicsynchronized String pop()
{
if(index==0)
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
index--;
String product = products[index];
return product;
}
public String[] getProducts() {
returnproducts;
}
}
publicclass TestProducerConsumer {
publicstaticvoid main(String[] args) {
SyncStack stack=new SyncStack();
Producer p=new Producer(stack);
Consumer c=new Consumer(stack);
new Thread(p).start();
new Thread(c).start();
}
}
23.编程实现序列化的Student(sno,sname)对象在网络上的传输
package com.softeem.demo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
class Student implements Serializable {
private int sno;
private String sname;
public Student(int sno, String sname) {
this.sno = sno;
this.sname = sname;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "学号:" + sno + ";姓名:" + sname;
}
}
class MyClient extends Thread {
@Override
public void run() {
try {
Socket s = new Socket("localhost", 9999);
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
Student stu = (Student) ois.readObject();
System.out.println("客户端程序收到服务器端程序传输过来的学生对象>> " + stu);
ois.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyServer extends Thread {
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());
Student stu = new Student(1, "赵本山");
ops.writeObject(stu);
ops.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestTransfer {
public static void main(String[] args) {
new MyServer().start();
new MyClient().start();
}
}
l JDBC
24.用dom4j组件解析如下XML格式的文件:
<?xml version="1.0" encoding="UTF-8"?>
<generator>
<table name="login" operation="1">
<column name="username" handle="0">aaa </column>
<column name="password" handle="0">123 </column>
</table>
<table name="login" operation="2">
<column name="id" handle="1">1 </column>
<column name="username" handle="0">bbb </column>
<column name="password" handle="0">444 </column>
</table>
<table name="login" operation="3">
<column name="id" handle="1">4 </column>
</table>
</generator>
规则: <table>operation 1表insert,2表update,3表delete.
<column>handle 1表作为where条件,0表作为操作字段。
要求:按照规则生成三条SQL语句!(即做一个方法解析xml文件生成一个含有三条SQL语句的字符串)
/**
*解析XML文件生成一个含有可执行SQL语句的字符串
*@paramxmlFileName
*@returnSQL
*/
public String parseXmltoSQL(String xmlFileName) {
StringBuffer sbsql = new StringBuffer();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(xmlFileName));
Element element = document.getRootElement();
Iterator it = element.elementIterator("table");
while (it.hasNext()) {
element = (Element) it.next();
//获得对表的操作
String oper = element.attributeValue("operation");
//获得表名
String tableName = element.attributeValue("name");
if ("1".equals(oper)) {
sbsql.append("insert into ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
sbsql.append("("+columnName1+","+columnName2+")"+" values('"+columnValue1+"','"+columnValue2+"')\n");
} elseif ("2".equals(oper)) {
sbsql.append("update ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
String columnName3 = null;
String columnValue3 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName3 = element.attributeValue("name");
columnValue3 = element.getText();
}
sbsql.append(" set "+columnName2+"='"+columnValue2+"',"+columnName3+"='"+columnValue3+"' where "+columnName1+"="+columnValue1+"\n");
}elseif ("3".equals(oper)) {
sbsql.append("delete from ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
sbsql.append(" where "+columnName1+"="+columnValue1);
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sbsql.toString();
}
l JSP/SERVLET
25.写出JSP的内置对象并说明他们的作用
request:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header数据的有用的方法。 response:response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out:out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext:pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session:session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 application:applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config:config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 page:page表示从该页面产生的一个servlet实例。
exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
谢谢楼主,确实不错!
不过
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
if(data <dataset[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else
{
return midIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex] ¦ ¦data>dataset[endIndex] ¦ ¦beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} elseif(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else
{
return midIndex;
}
}
return -1;
}
这道题是不是还有点问题呢,因为是任意数组,所以data <dataset[midIndex]这个就有问题,不一定是小就在左边,大就在右边,在应用这之前是否应该先排序下
发表评论
-
JS数字键盘
2011-08-02 15:35 2974现在需要一个只是数字的软键盘,呵呵,自己花了几个小时,搞出来了 ... -
深度遍历目录
2011-06-23 10:58 932有一年多没有搞Java了,一直在搞数据库与JS,今天突然要写一 ... -
关于一个多线程的码表问题
2009-10-18 23:00 862import java.awt.BorderLayou ... -
SWING简易计算器
2009-03-31 10:44 1223import java.awt.BorderLayout; i ... -
请帮忙看一下这个String的问题.
2008-06-27 21:44 847String str1 = "abc"; ... -
Cannot convert value '0000-00-00"的解决方案
2008-06-19 20:13 2021MySQL数据库,如果数据库中Date字段为空为值为'0000 ... -
关于多附件上传的问题
2008-04-23 11:20 1472现在做一个邮件系统,需要实现126邮箱似的多附件上传,截图 ... -
JQuery传中文参数解决办法
2007-12-24 14:40 3431$(document).ready(function(){ ... -
Ajax + Struts 实现省市联动详解
2007-07-20 16:10 4822想实现一个省市联动菜单,断断续续研究了好长时间,现在终于通过自 ...
相关推荐
### Java经典面试题知识点 #### Java数据结构容器 - **核心知识点**:Java集合框架,包括List、Set、Map等接口及其实现类。List接口代表有序的集合,例如ArrayList和LinkedList;Set接口代表不允许重复元素的集合,...
Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案...
这份10万字的PDF文档包含了208道Java经典面试题,旨在帮助开发者们系统地复习和提升自己的技能,以应对包括阿里、腾讯、字节跳动、京东等知名互联网公司的面试。以下是部分题目及其涉及的知识点: 1. **JDK和JRE的...
Java经典面试试题
以下是对"Java经典面试题.pdf"中可能包含的一些关键知识点的详细解释: 1. **基础语法**:面试中可能会考察Java的基础概念,如数据类型(基本类型与引用类型)、变量、运算符、流程控制语句(if-else、switch、for...
### Java经典面试题详解 #### 1. 面向对象的特征有哪些方面? 面向对象编程的核心特征主要有四个:封装、继承、多态以及抽象。 - **抽象**:抽象是面向对象编程的基础之一,它主要关注对象的关键特性和行为,忽略...
资源名称:Java经典面试题大全资源目录:【】!good2011-4-27-tarena【】Java面试题【】java面试题及答案(基础题122道,代码题19道)【】java面试题大全-葵花宝典-培训班总结出现率比较高的面试题【】华为Java面试题...
Java经典面试题总结附带答案 以下是从给定文件中生成的相关知识点: Java基础 1. JDK 和 JRE 的区别是什么?(JDK 是 Java Development Kit,JRE 是 Java Runtime Environment) 2. `==` 和 `equals` 的区别是...
本文总结了《高级Java经典面试题2019》中关于并发编程、JVM和Spring框架等方面的重要知识点。通过深入理解这些概念和技术,可以帮助开发者更好地掌握Java核心技术,提高面试竞争力。希望本文能为读者提供有益的帮助...
本篇将详细解析"Java经典面试题"中的关键知识点,帮助求职者充分准备,顺利通过面试。 1. **Java基础** - **数据类型**:Java有两大类数据类型——基本数据类型(如int、char)和引用数据类型(如类、接口、数组)...