第一篇:java路径问题小结
1.user.dir Java代码
1.//通过来获取;此目录并非是固定的,而是根据该代码所属类运行时的环境而定。
2.//普通的java程序中获得的是该类所属项目的根目录(d:workspaceapp)3.//在特定服务器下发布运行的javaweb程序则获得的是该服务器下提供运行环境的目录
4.//(如用Tomcat将获得F:Tomcat 6.0bin)5.System.getProperties(“user.dir”)
2.classes目录
顾名思义指存放类文件的根目录。
普通java程序的classes目录指appbin web项目的classes目录是指appWebRootWEB-INFclasses
Java代码
1.//在普通项目或web项目中
2.//s:获得classes目录绝对路径(包括TestClass类所属包目录)3.// appbincomtest 4.// 或appWebRootWEB-INFclassescomtest 5.//ss:获得classes目录绝对路径 6.// appbin 7.// 或appWebRootWEB-INFclasses 8.com.test.TestClass c=new com.test.TestClass();9.String s=c.getClass().getResource(“").getPath();10.String ss=c.getClass().getClassLoader().getResource(”“).getPath();
3.web项目根目录(在服务器发布后)app
(1)根据ServeletContext的getRealPath()方法获得绝对路径 Java代码
1.//第一种获得”app“绝对路径f:tomcat 6.0webappsapp 2.//第二、三种获得”app“绝对路径f:tomcat 6.0webappsapp 3.getServletContext.getRealPath(”“);4.getServletContext.getRealPath(”“);5.getServletContext.getRealPath(”/“);
(2)根据HttpServletRequest的getContextPath()方法获得相对路径 Java代码
1.getRequest().getContextPath();
4.在struts2框架中获得发布后web项目的根目录 Java代码
1.//利用ServletActionContext的静态方法
2.String real=ServletActionContext.getServletContext().getRealPath(”");3.String relative=ServletActionContext.getRequest().getContextPath());
如果使用user.dir的值的话获得的路径为%Tomcat_Home%bin,所以不推荐使用user.dir这一环境变量来获取路径。
对于新手来说,搞清楚java项目的开发目录和发布目录的信息是十分必要的,特别是使用集成开发环境下,目录的安排十分透明,如果脱离开发环境的话,很多新手都会对项目目录结构很迷茫。
第二篇:java路径总结
平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下
一 相对路径的获得
说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
String relativelyPath=System.getProperty(“user.dir”);上述相对路径中,java项目中的文件是相对于项目的根目录 web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录bin)
二 类加载目录的获得(即当运行时某一类时获得其装载目录)1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStream is=TestAction.class.getClassLoader().getResourceAsStream(“test.txt”);(test.txt文件的路径为 项目名srctest.txt;类TestAction所在包的第一级目录位于src目录下)
上式中将TestAction,test.txt替换成对应成相应的类名和文件名字即可
1.2)通用方法二(此方法和1.1中的方法类似,不同的是此方法必须以'/'开头,参考http://riddickbryant.iteye.com/blog/436693)InputStream is=Test1.class.getResourceAsStream(“/test.txt”);
(test.txt文件的路径为 项目名srctest.txt,类Test1所在包的第一级目录位于src目录下)
三 web项目根目录的获得(发布之后)1 从servlet出发
可建立一个servlet在其的init方法中写入如下语句 ServletContext s1=this.getServletContext();String temp=s1.getRealPath(“/”);(关键)
结果形如:D:工具Tomcat-6.0webapps 02_ext(002_ext为项目名字)如果是调用了s1.getRealPath(“")则输出D:工具Tomcat-6.0webapps 02_ext(少了一个”“)2 从httpServletRequest出发
String cp11111=request.getSession().getServletContext().getRealPath(”/“);结果形如:D:工具Tomcat-6.0webapps 02_ext
四 classpath的获取(在Eclipse中为获得src或者classes目录的路径)方法一
Thread.currentThread().getContextClassLoader().getResource(”“).getPath()
eg: String t=Thread.currentThread().getContextClassLoader().getResource(”“).getPath();System.out.println(”t---“+t);输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/
方法二 JdomParse.class.getClassLoader().getResource(”“).getPath()(JdomParse为src某一个包中的类,下同)eg:String p1=JdomParse.class.getClassLoader().getResource(”“).getPath();System.out.println(”JdomParse.class.getClassLoader().getResource--“+p1);输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/
另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)
eg String p2=JdomParse.class.getResource(”“).getPath();System.out.println(”JdomParse.class.getResource---“+p2);输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/(JdomParse为src目录下jdom包中的类)
四 属性文件的读取: 方法 一
InputStream in = lnew BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();p.load(in);
注意路径的问题,做执行之后就可以调用p.getProperty(”name“)得到对应属性的值
方法二
Locale locale = Locale.getDefault();ResourceBundle localResource = ResourceBundle.getBundle(”test/propertiesTest“, locale);String value = localResource.getString(”test“);System.out.println(”ResourceBundle: " + value);工程src目录下propertiesTest.properties(名字后缀必须为properties)文件内容如下: test=hello word
第三篇:Java中文&编码问题小结
2006-03-07 | Java中文&编码问题小结
Java字符编码转换过程说明
常见问题 JVM JVM启动后,JVM会设置一些系统属性以表明JVM的缺省区域。user.language,user.region,file.encoding等。可以使用 System.getProperties()详细查看所有的系统属性。
如在英文操作系统(如UNIX)下,可以使用如下属性定义强制指定JVM为中文环境
-Dclient.encoding.override=GBK-Dfile.encoding=GBK-Duser.language=zh-Duser.region=CN
.javaà.class编译
说明:一般javac根据当前os区域设置,自动决定源文件的编码.可以通过-encoding强制指定.错误可能: 1 gbk编码源文件在英文环境下编译,javac不能正确转换.曾见于java/jsp在英文 unix下.检测方法:写u4e00格式的汉字,绕开javac编码,再在jvm中,将汉字作为 int打印,看值是否相等;或直接以UTF-8编码打开.class文件,看看常量字符串
是否正确保存汉字。
文件读写
外部数据如文件经过读写和转换两个步骤,转为jvm所使用字符。
InputStream/OutputStream用于读写原始外部数据,Reader/Writer执行读写和转
换两个步骤。文件读写转换由java.io.Reader/Writer执行;输入输出流
InputStream/OutputStream 处理汉字不合适,应该首选使用Reader/Writer,如 FileReader/FileWriter。
2`FileReader/FileWriter使用JVM当前编码读写文件.如果有其它编码格式,使用
InputStreamReader/OutputStreamWriter PrintStream有点特殊,它自动使用jvm缺省编码进行转换。
读取.properties文件
.propeties文件由Properties类以iso8859-1编码读取,因此不能在其中直接写汉
字,需要使用JDK 的native2ascii工具转换汉字为uXXXX格式。命令行:
native2ascii –encoding GBK inputfile outputfile
读取XML文件 XML文件读写同于文件读写,但应注意确保XML头中声明如 xml version=” 1.0” encoding=”gb2312” ?>与文件编码保持一致。javax.xml.SAXParser类接受InputStream作为输入参数,对于Reader,需要用 org.xml.sax.InputSource包装一下,再给SAXParser。对于UTF-8编码 XML,注意防止编辑器自动加上uFFFE BOM头, xml parser会报
告content is not allowed in prolog。
字节数组 使用 new String(byteArray,encoding)和 String.getBytes(encoding)在
字节数组和字符串之间进行转换
也可以用ByteArrayInputStream/ByteArrayOutputStream转为流后再用 InputStreamReader/OutputStreamWriter转换。
错误编码的字符串(iso8859-1转码gbk)如果我们得到的字符串是由错误的转码方式产生的,例如:对于gbk中文,由
iso8859-1方式转换,此时如果用调试器看到的字符串一般是 的样子,长度一般
为文本的字节长度,而非汉字个数。
可以采用如下方式转为正确的中文:
text = new String(text.getBytes(“iso8859-1”),”gbk”);
JDBC 转换过程由JDBC Driver执行,取决于各JDBC数据库实现。对此经验尚积累不够。对于ORACLE数据库,需要数据库创建时指定编码方式为gbk,否则会出现汉字转
码错误 对于 SQL Server 2000,最好以nvarchar/nchar类型存放文本,即不存在中文 /编码转换问题。连接 Mysql,将 connectionString 设置成 encoding 为 gb2312:
String connectionString = “jdbc:mysql://localhost/test? useUnicode=true&characterEncoding=gb2312”;
WEB/Servlet/JSP 1 对于JSP,确定头部加上 <%@ page
contentType=“text/html;charset=gb2312”%>这样的标签。对于Servlet,确定 设置setContentType(“text/html;charset=gb2312”),以上两条用于使得输出汉字没有问题。为输出HTML head中加一个 ,让浏览器正确确定HTML编码。为Web应用加一个Filter,确保每个Request明确调用setCharacterEncoding方
法,让输入汉字能够正确解析。
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.UnavailableException;import javax.servlet.http.HttpServletRequest;/** * Example filter that sets the character encoding to be used in parsing the * incoming request */ public class SetCharacterEncodingFilter implements Filter { public SetCharacterEncodingFilter(){} protected boolean debug = false;protected String encoding = null;protected FilterConfig filterConfig = null;public void destroy(){ this.encoding = null;this.filterConfig = null;}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException { // if(request.getCharacterEncoding()== null)// { // String encoding = getEncoding();// if(encoding!= null)// request.setCharacterEncoding(encoding);// // } request.setCharacterEncoding(encoding);if(debug){ System.out.println(((HttpServletRequest)request).getRequestURI()+“setted to ”+encoding);} chain.doFilter(request, response);}
public void init(FilterConfig filterConfig)throws ServletException { this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter(“encoding”);this.debug = “true”.equalsIgnoreCase(filterConfig.getInitParameter(“debug”));}
protected String getEncoding(){ return(this.encoding);} }
web.xml中加入:
encoding gb2312 debug false
其一:在web.xml里加上如下脚本: weblogic.httpd.inputCharset./* GBK
SWING/AWT/SWT 对于SWING/AWT,Java会有些缺省字体如Dialog/San Serif,这些字体到系统真实
字体的映射在$JRE_HOME/lib/font.properties.XXX文件中指定。排除字体显示问
题时,首先需要确定JVM的区域为zh_CN,这样font.properties.zh_CN文件才会发
生作用。对于 font.properties.zh_CN , 需要检查是否映射缺省字体到中文字体
如宋体。
在Swing中,Java自行解释TTF字体,渲染显示;对于AWT,SWT显示部分交由操作系
统。首先需要确定系统装有中文字体。汉字显示为”□”,一般为显示字体没有使用中文字体,因为Java对于当前字
体显示不了的字符,不会像Windows一样再采用缺省字体显示。部分不常见汉字不能显示,一般为显示字库中汉字不全,可以换另外的中文字
体试试。对于AWt/SWT,首先确定JVM运行环境的区域设置为中文,因为此处设计JVM与操
作系统api调用的转换问题,再检查其它问题。
JNI JNI中jstring以UTF-8编码给我们,需要我们自行转为本地编码。对于Windows,可以采用WideCharToMultiByte/MultiByteToWideChar函数进行转换,对于Unix,可以采用iconv库。
这里从SUN jdk 1.4 源代码中找到一段使用jvm String 对象的getBytes的转换方
式,相对简单和跨平台,不需要第三方库,但速度稍慢。函数原型如下:
/* Convert between Java strings and i18n C strings */ JNIEXPORT jstring NewStringPlatform(JNIEnv *env, const char *str);
JNIEXPORT const char * GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy);
JNIEXPORT jstring JNICALL JNU_NewStringPlatform(JNIEnv *env, const char *str);
JNIEXPORT const char * JNICALL JNU_GetStringPlatformChars(JNIEnv *env, jstring jstr, jboolean *isCopy);
JNIEXPORT void JNICALL
JNU_ReleaseStringPlatformChars(JNIEnv *env, jstring jstr, const char *str);
附件jni_util.h,jni_util.c
TUXEDO/JOLT JOLT对于传递的字符串需要用如下进行转码
new String(ls_tt.getBytes(“GBK”),“iso8859-1”)
对于返回的字符串
new String(error_message.getBytes(“iso8859-1”),“GBK”);jolt 的系统属性 bea.jolt.encoding不应该设置,如果设置,JSH会报告说错误的
协议.JDK1.4/1.5新增部分
字符集相关类(Charset/CharsetEncoder/CharsetDecoder)jdk1.4开始,对字符集的支持在java.nio.charset包中实现。
常用功能: 列出jvm所支持字符集:Charset.availableCharsets()2 能否对看某个Unicode字符编码,CharsetEncoder.canEncode()
Unicode Surrogate/CJK EXT B Unicode 范围一般所用为U0000-UFFFF范围,jvm使用1个char就可以表示,对于 CJK EXT B区汉字,范围大于U20000,则需要采用2个char方能表示,此即
Unicode Surrogate。这2个char的值范围 落在Character.SURROGATE 区域内,用 Character.getType()来判断。
jdk 1.4尚不能在Swing中正确处理surrogate区的Unicode字符,jdk1.5可以。对
于CJK EXT B区汉字,目前可以使用的字库为”宋体-方正超大字符集”,随Office 安装。
常见问题
在JVM下,用System.out.println不能正确打印中文,显示为??? System.out.println是PrintStream,它采用jvm缺省字符集进行转码工作,如果 jvm的缺省字符集为iso8859-1,则中文显示会有问题。此问题常见于Unix下,jvm 的区域没有明确指定的情况。
在英文UNIX环境下,用System.out.println能够正确打印汉字,但是内部处理错误 可能是汉字在输入转换时,就没有正确转码:
即gbk文本à(iso8859-1转码)àjvm char(iso8859-1编码汉字)à(iso8859-1转码)à
输出。
gbk汉字经过两次错误转码,原封不动的被传递到输出,但是在jvm中,并未以正
确的unicode编码表示,而是以一个汉字字节一个char的方式表示,从而导致此类
错误。
GB2312-80,GBK,GB18030-2000 汉字字符集
GB2312-80 是在国内计算机汉字信息技术发展初始阶段制定的,其中包含了大部
分常用的一、二级汉字,和 9 区的符号。该字符集是几乎所有的中文系统和国际
化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位
0xa1-0xfe,低位也是 0xa1-0xfe;汉字从 0xb0a1 开始,结束于 0xf7fe;
GBK 是 GB2312-80 的扩展,是向上兼容的。它包含了 20902 个汉字,其编码范
围是 0x8140-0xfefe,剔除高位 0x80 的字位。其所有字符都可以一对一映射到
Unicode 2.0,也就是说 JAVA 实际上提供了 GBK 字符集的支持。这是现阶段
Windows 和其它一些中文操作系统的缺省字符集,但并不是所有的国际化软件都
支持该字符集,感觉是他们并不完全知道 GBK 是怎么回事。值得注意的是它不是
国家标准,而只是规范。随着 GB18030-2000国标的发布,它将在不久的将来完成
它的历史使命。
GB18030-2000(GBK2K)在 GBK 的基础上进一步扩展了汉字,增加了藏、蒙等少数
民族的字形。GBK2K 从根本上解决了字位不够,字形不足的问题。它有几个特点,它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。
编码是变长的,其二字节部分与 GBK 兼容;四字节部分是扩充的字形、字位,其
编码范围是首字节 0x81-0xfe、二字节0x30-0x39、三字节 0x81-0xfe、四字节
0x30-0x39。
UTF-8/UTF-16/UTF-32
UTF,即Unicode Transformer Format,是Unicode代码点(code point)的实际表 示方式,按其基本长度所用位数分为UTF-8/16/32。它也可以认为是一种特殊的外
部数据编码,但能够与Unicode代码点做一一对应。
UTF-8是变长编码,每个Unicode代码点按照不同范围,可以有1-3字节的不同长度。
UTF-16长度相对固定,只要不处理大于U200000范围的字符,每个Unicode代码点
使用16位即2字节表示,超出部分使用两个UTF-16即4字节表示。按照高低位字节
顺序,又分为UTF-16BE/UTF-16LE。
UTF-32长度始终固定,每个Unicode代码点使用32位即4字节表示。按照高低位字
节顺序,又分为UTF-32BE/UTF-32LE。
UTF编码有个优点,即尽管编码字节数不等,但是不像gb2312/gbk编码一样,需要
从文本开始寻找,才能正确对汉字进行定位。在UTF编码下,根据相对固定的算法,从当前位置就能够知道当前字节是否是一个代码点的开始还是结束,从而相对
简单的进行字符定位。不过定位问题最简单的还是UTF-32,它根本不需要进行字
符定位,但是相对的大小也增加不少。
关于GCJ JVM GCJ并未完全依照sun jdk的做法,对于区域和编码问题考虑尚不够周全。GCJ启动
时,区域始终设为en_US,编码也缺省为iso8859-1。但是可以用Reader/Writer做
正确编码转换。
第四篇:java小结
//1.累加 public class 累加 {
}
//2.阶乘
public class 30的阶乘 {
} public static void main(String[] args){
} int product=1;for(int i=1;i<=30;i++){ product=*i;} public static void main(String[] args){
} int i=1;for(int counter=1;counter<=100;counter++){ } System.out.println(i);i+=counter;
//3.倒序输出
法1 用char数组思想 import java.util.Scanner;public class 逆序输出 {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);// String input[]=new String[4];input=scan.nextLine();// huiche
// String result=“";char[] Array=input[4].toCharArray();for(int i=Array.length-1;i>=0;i--){
} result+=Array[i];} System.out.println(result);} //倒序输出 法2 用reverse()方法 import javax.swing.JOptionPane;public static void main(String[] args){
}
String a = null;StringBuffer b;//输入
a=JOptionPane.showInputDialog(a);StringBuffer c1=new StringBuffer(a);b=c1.reverse();System.out.println(b);
//4.输出100 121 144...361 public class平方输入数组 {
}
//5.求最大公约数
private static int gys(int m,int n)
{
if(n==0)
return m;else public static void main(String[] args){
} int[] array=new int[10];for(int i=0;i<10;i++){ } array[i]=Math.pow((i+10),2.0);
for(int k=0;k return gcd(n,m%n); } //6.求最小公倍数 public static int gbs(int n1,int n2){ int a =(n1>n2)? n1 : n2; for(int j=a;j<=n1*n2;j++) { if(j%n1==0 && j%n2==0) { return j; } } return 0;} //7.1)十进制整数转化为二进制整数采用“除2取余,逆序排列” import java.util.Scanner;public class Main { public static void main(String[] args){ //第一行输入要几组测试数据 int N=0,a;//N为输入几组数据,a为输入的十进制数字 } String b = null;Scanner scan=new Scanner(System.in);N=scan.nextInt();Main num=new Main();for(int i=1;i<=N;i++){ } a=scan.nextInt();b=num.deimalBinary(a);int d=num.Calcute(b);if(d%2==0)System.out.println(”Even“);else System.out.println(”Odd“); /*一个方法得到二进制数,用递归 *用2去除十进制整数,可以得到一个商和余数; *再用2去除商,又会得到一个商和余数,} *如此进行,直到商为零时为止,*然后把先得到的余数作为二进制数的低位有效位,*后得到的余数作为二进制数的高位有效位,依次排列起来 */ public String deimalBinary(int a){ } public int Calcute(String b){ } char[] Array=b.toCharArray();for(int i=0;i } if(Array[i]=='1'){ } counter+=1;return counter; //7.2)十进制小数转换为二进制小数采用“乘2取整,顺序排列” /*用2乘十进制小数,可以得到积,*将积的整数部分取出,再用2乘余下的小数部分,//8.矩阵运算(加减乘)//矩阵运算 *又得到一个积,再将积的整数部分取出,*如此进行,直到积中的小数部分为零,*或者达到所要求的精度为止。 *然后把取出的整数部分按顺序排列起来,*先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。*/ import java.util.Scanner;public class Main { public static void main(String[] args){ int N1,M1,N2,M2,K;Scanner scan=new Scanner(System.in);N1=scan.nextInt();M1=scan.nextInt();int[][] a=new int[N1][M1];for(int i=0;i for(int j=0;j N2=scan.nextInt();M2=scan.nextInt();int[][] b=new int[N2][M2];for(int i=0;i { } b[i][j]=scan.nextInt();} K=scan.nextInt();if(K==1)//加法 { int[][] c=new int[N1][M1];for(int i=0;i } { for(int j=0;j } System.out.println();} } if(K==2)//减法 { int[][] c=new int[N1][M1];for(int i=0;i } for(int j=0;j for(int j:i){ System.out.print(j+” “);} System.out.println();} } if(K==3)//乘法 { int[][] c=new int[N1][M2];for(int i=0;i } { for(int j=0;j } for(int p=0;p c[i][j]+=a[i][p]*b[p][j];for(int[] i:c)for(int j:i){ System.out.print(j+” “);} System.out.println();} } } } 9.//保留确定位数输出 import java.text.DecimalFormat;//非四舍五入 DecimalFormat myformat=new DecimalFormat(”#0.00"); myformat.format(double num);//四舍五入,例为保留2位 double f=3.1415926; BigDecimal a=new BigDecimal(f); double af=a.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); java重要知识点总结如下: 1,抽象,封装,继承,多态是面向对象程序设计中得四个特点.2,面向对象得软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现.可概括为如下过程:分析用户需求,从问题中抽取对象模型;细化模型,设计类,包括类的属性和类间的 相互关系,同时观察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现 上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案.3,面向对象程序设计方法的优点是:可重用性,可扩展性,可管理性.4,类的定义:class前的修饰符分为访问控制符和非访问控制符两大类.访问控制符包括public和private.非访问控制符包括abstract(抽象),final(最终).5,final类是最终类,是不能有子类的类.abstract和final不能同时修饰一个类,因为抽象类本身没有具体对象,需要派生出子类后在创建子类的对象.而最终类不可能有子类.6,创建对象的格式为: 类名 对象名=new 构造方法(参数);注意前面是类名后面是构造方法.注意构造方法没有返回类型,也不能写void,主要用于完成类对象的初始化工作,一般不能直接由编程 直接调用,而是用new运算符来调用.7,如果class前面由public修饰符,则默认构造方法的前面也应该有public修饰符.8,类中有static修饰的域或方法,可用类名或对象名访问,否则只能用对象名访问.9,修饰域的访问控制符可以是:public,private,protected,private protected.非访问控制符可以是: static,final,volatile(易失域) 10,类变量的最本质的特点是:他们是类的域,不属于任何一个类的具体对象实例.不是保存在某个对象实例的内存空间中,而是保存在类的内存区域的公共存储单元中.11,局部变量是在方法体内声明的,只有当方法被调用时他们才存在,因而只能在本方法内使用,不存在访问控制符,也不能声明为静态变量(static),但可以声明为final变量.局部变量必须初始化.12,修饰方法的访问控制符可以是:public,private,protected,private protected,修饰方法的非访问控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。 13,用static修饰的变量或方法都为类成员,类成员可以用类名或实例名访问,实例成员只能用实例名来访问。 14,如果一个类中含有抽象方法,则此类必须为抽象类,如果抽象类的子类不为抽象类,则子类必须实现父类的所有抽象方法。抽象方法不能用静态方法和最终方法。抽想方法只有函数头的声明,而用分号来替代方法体,没有大括号。如abstract void abstractmethod(); 15,this变量用在一个方法的内部,指向当前对象,当前对象指的是调用当前正在执行的方法的那个对象。super变量是直接指向父类的构造方法,用来引用父类种的变量和方法。(由于他们指的是对象,所以不能通过它来引用类变量和类方法) 16,如果要引用一个包中的多个类,可以用星号来代替。使用星号只能表示本层次的所有类,而不包括子层次下的类。所以经常需要用两条语句来引入两个层次的类:import java.awt.*;import java.awt.event.*; 17,访问修饰符: --类中限定为public的成员可以被所有的类访问。 --类中先定位private的成员只能被这个类本身访问。同一个类的不同对象可以访问对方的private域变量或调用对方的域方法,这是因为访问保护控制在类的级别上,而不是对象的级别上。 --类中限定为protected的成员可以被这个类本身,它的子类(包括同一个包中和不同包中的子类),以及同一个包中的其他类访问。 --用private protected修饰的成员可以被该类本身访问,也可以被该类的所有子类访问。 --默认访问控制符规定只能被同一个包中的类访问和引用,而不能被其他包的类访问。即他的访问权限是friendly。 18,注意: ----abstract和private,static,final,native不能并列修饰同一个方法。 ----abstract类中不能有private修饰的域和方法 ----static方法不能处理非static的域。 19,重载方法的参数必须不同,或者是参数个数不同,或者是参数类型不同。重载的多个方法必须返回相同的数据类型。 20,在java中,一个类获取某一接口定义的功能并不是通过直接继承这个接口的属性和方法来实现的。因为接口中的属性都是常量,接口的方法都是没有方法体的抽象方法,没有具体定义操作。第五篇:java知识点小结