◆传值与传引
严格来说,Java中所有方法参数都是传值。因为即使是传递的参数是对象的引数时,引数本身也是传值的。所有基本类型都是传值的。
传值:被传入的参数被视为内部的局域变量,其变化不影响外部变量的原始值。
传引:对于引数本身来讲也是传值的,但是在方法内部若对引数所指向的对象属性有改变,则会直接实时地影响所指向的对象属性。
理解传引这一概念的最佳方式就是画出指向图。eg. A (Object)O 对于A本身而言它是传值的,也就是说当A作为参数传递的时候,假若在方法内部把其它的引数赋给了A,但是当方法返回时,A仍旧是指向原来的对象,而不会改变。其次,对于传引来说,假若在方法内部对A所指向的对象属性有改变,那么对象属性的改变会是直接实时的。
再次强调,Java中所有的参数传递都是传值的。
传值这种题型的考试很多,基本类型传值问题考的较多的是对某一变量,故意用某一方法试图改变它,然后方法返回时再打印它。按传值的说法,实际上该变量并没有改变。
◆构造函数
a.构造器没有任何返回类型,哪怕是void也不行。假如指定了返回值,那么Java会视为一个普通的方法。
b.如果没有显示地调用父类的构造器,Java总是自动地调用父类的默认构造器。(也就是第一行会默认为super( ))
c.只要类中显式地定义一个或多个构造器,那么Java不会再为你定义一个默认的构造器d.构造函数可以被重载,并且在其体内可以用this()和super()来调用其它的构造器。但是this()和super()只能放在构造函数体的第一行进行调用。
e.构造器的修饰符只可以是接入控制符public、private、protected、(default)。其它修饰符一律不可。
f.构造方法不可被继承。
◆重载与覆盖
重载的英文为Overload,而覆盖的英文为Override。重载是出现在同一类中多个同名函数,而覆盖是出现在类继承体系中同名函数。(注意:覆盖有时被称为重写)
重载是依据同名方法参数的个数、参数的类型和参数的顺序来确定的。方法的修饰符、返回值、抛出的异常均不能作为区分重载方法的依据。(继承体系中也有重载现象)覆盖是在继承体系中子类覆盖超类中定义的方法。子类中覆盖方法的返回类型和参数类型
必须精确匹配。接入控制符只能更加公有化;抛出的异常是超类抛出的子集或不抛。
(static方法不能覆盖,private方法也不能覆盖。Java视它们为被隐藏)
?参数类型一致,返回类型不同,编译错误,提示“试图用不兼容的返回类型覆盖”。
?只要参数类型不一致,返回类型同与不同,编译都能通过,此不为覆盖而是重载。
◆多态
多态是出现于类的继承层次中,通过向上转型和方法重写的机制来实现的。
面向对象程序设计的目标是:希望所撰写的程序代码都只对基类进行操作。这么一来,当加入新的继承类时,大部分程序代码都不会受影响而改写(也即是说代码具有扩充性)。所以当调用新加入的继承类时,都会首先向上转型为基类。这就是多态的向上转型。
当你希望通过调用基类的方法而能让继承类产生正确的行为时,这显然需要在继承类进行重写该方法。而究竟是该调用哪个继承类,这是由Java的动态绑定决定的。
多态最重要的一点在于run-time binding。多态是面向对象程序设计的目标。
关于多态中覆盖注意如下:
属性既可以继承,也是可以“覆盖”的。但是对属性而言没有动态绑定这一特性,所以覆盖的属性被认为是子类的特别属性。从某种意义上来讲,属性决定了类(性质)。另一方面,申明的类型就决定了对象的属性。这是因为,任何对象或变量等号右面是用来赋值给符合等号左面所申明类型的,所以左面的类型是先决条件,赋值必须要符合申明类型。对于向上转型而言,因为等号右面的对象is a申明类型,所以是成立的。一定要记住,属性永远都是跟着申明类型走。但是,对方法而言是在运行时动态绑定的,它取决于对象自身的实际类型(实际上对方法而言,也是先检查向上转型后的基类该方法,若无该方法的定义,则编译错,然后再动态绑定到继承类的覆盖方法)。
另外,static方法不能覆盖,private方法也不能覆盖。
还需特别注意,方法覆盖时,若覆盖得不对(例如参数一致,仅依靠返回类型不同),则编译会出错,而不是被Java认为方法重载(除非参数类型也不一样,这样java会认为不是override,实际上它是overload)。
◆类初始化
类的初始化大致上有这么几个方面。
a.静态变量的初始化b.一般实例变量的初始化c.构造函数的初始化
初始化的难点在于继承体系中。当有继承体系时,初始化始终要遵循的原则就是,无论如何必先初始化基类
0.当载入当前类时,若当前类有继承体系,则依次无条件载入基类
0’.先从最顶的基类开始顺序初始化其静态static变量,接着初始化当前类的静态static 变量(也就是说,static变量的初始化是伴随着类被装载时而初始化的,它的初始化在任何构造函数执行前)
1.先从最顶端基类,构造基类对象。
(假如构造函数中有this或super调用,则先执行此调用)
1.1.首先按出现次序初始化其实例变量
1.2.再执行其构造函数体
2.依次递归上述步骤
<此外,实例变量可以不显式初始化(系统会赋默认值),但是局部变量必须显式初始化> ◆异常
throws是异常的申明,它置于方法的定义处;throw是异常的掷出,它置于方法体内。异常可分为可检测异常和非检测异常,调用申明为可检测异常的方法时必须捕获异常。
a.方法申明了可检测异常,则调用该方法的块一定要捕获异常,否则编译出错
b.throw后面不能跟任何语句,否则编译提示语句不可到达
c.多个catch语句,要求更具体的异常在前,超类异常在后,否则编译出错
d.finally语句会在return语句之前执行,即在跳出方法之前一定会执行finally语句e.假如遇到的是System.exit(0),则无论如何,程序马上退出,finally语句不会执行f.方法申明了异常,但是在方法体内可以不显示地用throw抛出异常
g.没有申明可检测异常的方法调用时,不可用catch捕获,否则编译出错
其它注意:
a子类中覆盖的方法只能抛出父类方法抛出异常的子集,也可以不抛出任何异常(这本身就是子集)
b 但是对于非检测异常RuntimeException则不会受到上面的约束,它们可以被随时抛出。
也不受范围限制。
c 当继承的子类没有申明异常时,假如它的一个实例被申明为超类(向上转型),这时再
调用子类没有申明异常的方法,而用了catch,程序也会编译通过。(实际运行中调用的还是子类中的方法)
◆equals()和==
对于上述关于equals()总结如下:
a.类型不兼容的两个对象可以用equals(),但是只要比较的对象类型不同(哪怕值相同),永远返回false
b.对于没有覆盖equals()的类,即使对象类型相同,值也相同,但返回的仍旧是false,因为它用的是object的默认equals方法(与==相同)
c然而对于覆盖equals()的类,只要值相同,便返回true。这些类是String,Wrappers,Date,Calendar,BitSet等
对于==总结如下:
a.类型不兼容的两个对象不可以用==,若用则编译错误
b.同种类型的对象,假如不是指引同一个对象,则返回为false(只有指向同一个内存块的对象才返回true)
c.对于String情况有些不同,因为String对象有字面量和构造函数之分。字面量对象是放在缓冲池中的,这意味着,如果两个字面量值相同,则第二个对象会指向第一个已经存在的对象,而不会新产生,所以==返回的是true。用构造器产生的对象同一般对象。对于字面量来说,多个类共享的是同一个缓冲池。这意味着在另外一个类中创建一个先前类中已有的字面量字符串,则仍旧是同一对象。
另外,注意,toUpperCase()、toLowerCase()方法而言,如果大小写形式与原始String 没什么差别,方法返回原始对象,==返回true。
d.对于基本类型而言,系统会自动先归一精度,然后再比较值,若值相同则返回true。
◆String
String类最重要的一点在于“不变性(immutable)”。它的意思是一旦String类产生了就不会再改变了,若试图改变它都会产生新的对象。
String对象有字面量和构造函数之分。字面量对象是放在缓冲池中的,这意味着,如果两个字面量值相同,则第二个对象会指向第一个已经存在的对象,而不会新产生,所以==返回的是true。用构造器产生的对象同一般对象。对于字面量来说,多个类共享的是同一个缓冲池。这意味着即使在另外一个类中创建一个先前类中已有的字面量字符串,则仍旧是同一对象。
考试中需要注意的是:s=new String(“abc”);s+=”def”;System.out.println(s);
s=new String(“abc”);s.concat(“def”);System.out.prinln(s);
前一程序打印为“abcdef”,后一程序打印为“abc”。区别是第一个程序又重新赋值给了s。而第二个程序中s.concat(“def”)只是产生了一个新的对象但没有赋给谁,但原来的s不变。
另外,对于StringBuffer而言是可变的,对它的任何改变都是实时的。
◆包装类
包装类是为了方便对基本数据类型操纵而出现的。有了包装类就可以用很多的方法来操纵基本数据类型(没有包装类想直接对基本数据类型操作是不方便的,除非自己编写方法)。要熟悉包装类应该着种理解下面几点:
a.包装类的构造器。一般说来,包装类的构造器参数有两种:基本数据值、字符串注意:Boolean包装类构造器当传入字符串时,除了不分大小写的true返回true外,其它字符串一律返回false
b.常见的操作方法。例如:转换为本基本类型或其它基本类型的方法
eg. byteV alue(),intV alue()…;parseByte(String s),parseInt(String s)…
c.valueOf(各基本类型或字符串)的使用。V alueOf(str)是包装类的静态方法,作用等同于构造器。它会解析传入的参数,然后构造一个相同类型的包装类,并返回该包装类。
例子:原始类型→字符串(new Integer(101)).toString();String.valueOf(“101”)字符串→(包装类)→原始类型Integer.parseInt(“string”);
(new Integer(“101”)).d oubleV alue();Integer.valueOf(“101”).intV alue()
◆Math类
Math类中都是静态方法。其中最易错的是三个方法:ceil(),floor(),round()
另外还需注意,有许多方法随基本数据类型不同有多个重载版本。eg.abs(),max() a.ceil()方法。该方法返回类型为double,往单一的正坐标方向取最近的整数
b.floor()方法。该方法返回类型类double,取最靠近其负向的整数。
c.round()方法。它有两个重载版本:double和float,返回分别为long和int
long round(double a);int round(float)
round()方法=Math.floor(a+0.5),这意味着正数5入,负数6入
eg.System.out.println(Math.ceil(Double.MIN_VALUE)) //1.0
System.out.println(Math.floor(-0.1)) //-1.0
System.out.println(Math.round(-9.5)) //-9
System.out.println(Math.round(-9.6)) //-10
System.out.println(Math.round(Double.MIN_VALUE)) //0
◆collection类
collection类提供了持有对象的便利性,并对持有对象的操作便利性。正如其名,收集
意为将各种类型的对象收在一起,且数目不限(有点像收集袋)。收集会将放入其中的所有对象均视为Object(向上转型),所以在取出元素对象时,必须显式(即强制转型)指出其类型。
对象收集从整体上分为Collection接口和Map接口。这种分类的标准是:某个元素位置上放置元素对象的个数。显然,Map接口放置的是一对。
Collection接口又可扩展为两个基本接口:List接口和Set接口。
依上所述,对象收集可以划分为四个基本的类型:Collection、List、Set、Map
? Collection 它是一个基类的接口,对元素没有任何的限制,可以重复并且无序。
?List 从其名就知是有序的列表。它描述的是按顺序将对象放入其中。显然,后放入的元素有可能与先前放入的对象是相同的。所以,List是允许对象重复出现的有
序列表。
?Set 其实就是数学上所说的集合,它不允许有重复的元素。其中可以有空集(即null 对象)。Set中的元素不要求有序。
?Map 即映射,借助于key和value来描述对象的搜索。key域中要求唯一性(其实就是一个Set),value域可以允许有重复的元素(其实就是一个Collection)。另
外注意:常见的HashMap是无序的,而TreeMap是有序的。
◆标识符
a.所有标识符的首字符必须是字母(大小写)、下划线_、美元符号$(或符号¥)
b.接下来的可以是由数字(0-9)及首字符相同类型的字符(字母、_、$),其它任何特殊字符均不可
c.标识符不能使用Java关键字和保留字(50个)。但是注意像java,Integer,sizeof,friendly 等都不是Java的关键字
d.标识符大小写是敏感的,但没有长度的限制。
◆Switch(i)
a.switch(i)中的参数最高精度是int(或者short,byte,char),但不可是long,float,double b.default语句可以放置于任何地方(default意为都不匹配case中的值)
c.当语句中未加break语句时,则程序会从匹配的地方开始执行(包括匹配default语句),接下来所有的语句都会被执行(而不管匹配否),直到遇到break语句或switch尾部。
◆垃圾收集
a.只要一个对象失去了所有的reference,就可以考虑收集到垃圾收集堆了。
B.当失去对一个对象的所有引用时,JVM只是考虑垃圾收集,但并不意味着就立刻收回这个对象的内存,甚至根本不收回。JVM仅会在需要更多的内存以继续执行程序时,才会进行垃圾收集。
C.多数情况下,你永远不会知道垃圾收集什么时候会发生。Java将垃圾收集进程作为一个低优先级线程在运行。在Java中垃圾收集是不能被强迫立即执行的。调用System.gc()或Runtime.gc()静态方法不能保证垃圾收集器的立即执行,因为,也许存在着更高优先级的线程。
D.如果你想人工调用垃圾收集,并想在收集对象时执行一些你想要的任务,你就可以覆盖一个叫finalize()的方法。java会为每一个对象只调用一次finalize()方法。
finalize()方法必须被申明为protected的,不返回任何值(viod),而且要申明抛出一个Throwable对象,并一定要调用超类的finalize()方法(super.finalize())。 eg.protected void finalize() throws Throwable(){
super.finalize();
…………;}
◆is a & has a
is a 描述的是一个超类和一个子类的关系,也即是继承的关系。
has a 描述的是一个对象的部分是另一个对象,也即是组合的关系(或称为调用)。
◆内类与匿名类
内类是被包含的类中类,有三个方面需要注意:一般内类、方法内类、静态内类。
?一般内类它可以被当做外类的一个“实例变量”来看待。因此,四个接入控制符public、protected、default、private。只是注意:要在外类的non-static函数外
产生该内类对象,必须以OuterClassName.InnerClassName的形式指定该内
类对象的类型申明。一般内类必须得关联至其外类的某个对象。
一般内类不可拥有static成员。
?方法内类它属于范围型内类,也就是说你无法在方法外来调用内类,从这一点来讲它可视为方法的局部变量。但是,虽然有它的范畴性,毕竟内类还是类,它不
会像局部变量那样随着方法的返回就消失了,它仍旧被java视为类。
A.方法内类可以直接访问外类的任何成员
B.方法内类只能访问该方法中final型局部变量和final型的方法参数
C. 方法内类不可有任何接入控制符修饰(这一点与局部变量相同)
?静态内类它在产生其对象时不需要存在一个外类对象。它可被视为static函数。
static内类可以置于接口中。
?匿名类它实际上是继承自new类的一个无名类。New传回的reference会被自动向上转型。匿名类不能拥有构造器,但是可以通过其基类默认或带参数的构造
器来申明。
匿名类添加任何修饰符(遵循超类的修饰符),也不可实现接口、抛出异常。
◆断言
断言是Java 1.4中新添加的功能,是Java中的一种新的错误检查机制,它提供了一种在代码中进行正确性检查的机制,但是这项功能可以根据需要关闭。断言包括:assert关键字,AssertionError类,以及在https://www.doczj.com/doc/e912174108.html,ng.ClassLoader中增加了几个新的有关assert方法。assert最重要的特点是assert语句可以在运行时任意的开启或关闭,默认情况下是关闭的。断言语句有两种合法的形式:a.assert expression1; b.assert expression1 : expression2; expression1是一条被判断的布尔表达式,必须保证在程序执行过程中它的值一定是真;expression2是可选的,用于在expression1为假时,传递给抛出的异常AssertionError的构造器,因此expression2的类型必须是合法的AssertionError构造器的参数类型。AssertionError除了一个不带参数的缺省构造器外,还有7个带单个参数的构造器,分别为:object(eg.String)boolean char int long float double。第一种形式如果抛出异常,则调用AssertionError的缺省构造器,对于第二种形式,则根据expression2值的类型,分别调用7种单参数构造器中的一种。
A.assert程序的编译:javac -source 1.4 TestAssert.java(提示java按1.4版本编译)B.assert程序的运行:java –ea TestAssert 或者java –ea:TestAssert TestAssert 其它的运行参数:java -ea:pkg0... TestAssert;java –esa;java –dsa(系统类断言),另外,还可以同时组合用。当一个命令行使用多项-ea -da 参数时,遵循两个基本的原则:后面的参数设定会覆盖前面参数的设定,特定具体的参数设定会覆盖一般的参数设定。
C.AssertinError类是Error的直接子类,因此代表程序出现了严重的错误,这种异常通常是不需要程序员使用catch语句捕捉的。
D.使用assert的准则:assert语句的作用是保证程序内部的一致性,而不是用户与程序之间的一致性,所以不应用在保证命令行参数的正确性。可以用来保证传递给private 方法参数的正确性。因为私有方法只是在类的内部被调用,因而是程序员可以控制的,
我们可以预期它的状态是正确和一致的。公有方法则不适用。此外,assert语句可用于检查任何方法结束时状态的正确性,及在方法的开始检查相关的初始状态等等。assert语句并不构成程序正常运行逻辑的一部分,时刻记住在运行时它们可能不会被执行。
◆线程
线程是将程序中容易消耗大量cpu且易陷入死循环的片断代码独立出来作为一个线程来运行(也即线程是一个代码块)。
线程一经启动start,就会进入ready状态(实际上就是runnable状态,只是等待分配cpu)。这也说明线程并不会马上就running,其运行具有不确定性。线程启动后,只要不跳出run()方法,则一直都有机会running,它由系统自动在各线程间分配cpu时间来running。要牢记的是:线程运行与中断具有不确定性,你永远也不知道线程何时会运行,何时会中断。线程从对象的角度来看,它自身也可以是一个对象。它可视为其它对象中的一个代码块。在线程的概念中要特别注意几个概念:单线程、多线程、多线程的运行、多线程间的同步(资源访问)、多线程间的通信。
?单线程对于单线程而言,编写其程序是比较简单的,也比较容易理解,因为它并不涉及到synchronized和communication问题。创建单线程的方法有两种,其一、扩展Thread 类,即class A extends Thread{public void run(){};……};其二、实现Runnable接口,class
B implements Runnable{Thread t=new Thread(this);public void run(){};……};
?多线程相对于单线程而言,多线程会复杂很多,原因就是它们会涉及到多线程间的资源访问和多线程间通信问题。这就涉及到下面所说的三个方面:多线程的运行、多线程间的同步(资源访问)、多线程间的通信
?多线程的运行对于多个可运行runnable的线程来说,运行与中断具有不确定性,永远也无法知道线程何时会运行,何时会中断。但是多线程运行也遵循几个原则:如果多个线程具有同样的优先级,则系统会在它们之间切换cpu时间运行;JVM基于优先级来决定线程的运行,但是这并不意味着一个低优先级的线程一直不运行。
?多线程的同步被线程可访问的每个对象都有一个仅被一个线程访问控制的锁,锁控制着对对象的同步码的存取。这个可被多个线程访问的对象就是所说的资源共享问题。
A.在程序中,可以通过定义一个synchronized代码块或多个synchronized方法来使得调用的线程获得该对象的控制锁。通过获得对象的锁,该线程就会阻止其它线程对该对象所定义的同步块或同步方法进行操作(特别注意的是,此时并不能保证其它线程对该对象的非同步变量和非同步方法进行操作)。
B.线程只有在同步块或同步方法返回后才释放锁。
C.synchronized并不能保证程序的运行连续性,而只是保证同一性。也就是说即使在synchronized块或方法中,线程的运行仍旧会有中断的可能性。尽管如此,但它却能确保别的线程不会再访问该对象的其它同步块和方法,因为对象锁并未释放。这一事实说明了“多线程的运行”与“多线程间的同步”是两个独立的概念。
D.多线程的同步块或方法可以放在任何可被线程访问的对象中(包括线程本身,它实际上也可被其它的线程访问)。
多线程间的通信多线程间的同步消除了一个线程在改变另一个线程的稳定对象状态时发生的并发错误,但是就线程间通信而言,同步不起任何作用,也就是说“多线程间的通信”又是一个独立的概念。多线程间的通信通常是靠wait(),notify()两个方法来实现的,有关这两个方法的总结如下:
1.wait(),notify()属于object方法,并不是线程的方法
2.object.wait() 意为:调用我(指该object)的当前线程你得等等,也就是使...
(调用我的当前线程)...等待
object.notify()意为:该唤醒其它先前调用过我的且在等待的线程
从上述意义可知,wait(),notify()的对象是指线程所要用到的共享对象(当然共享对象也可以是线程对象),但是它的方法动作却是针对调用它的线程。(通常情况下,对象的方法是作用于自己的属性,而很少作用于其它对象。若要作用于其它对象,则用调用object.method())
3.wait(),notify()必须成对出现,出现的方式可有3种形式。
A.{wait();.... notify();}
B.{wait();}... {object.notify();}
C.{notify();}... {object.wait();}
4.wait(),notify()必须出现在synchronized方法或块中,否则会出现异常。原因是
因为wait()会释放对象锁,而锁必然是出现在同步方法或块中。另外,wait()同sleep()一样,也必须捕捉异常InterruptedException。
5.wait(),notify()的执行一般与外在的条件有关,只有条件改变了才触发唤醒等待的
线程。这种条件的改变通常是以旗标(Tag)的方式出现,也即当某一方法执行完后,应当立即改变旗标值。假若需要让线程交替执行,则还需要加入互斥条件的判断。eg.
同步方法1中{if(a)},则同步方法2中{if(!a)}
6.当执行完notify()时,程序并不会立即去运行调用wait()的线程,而直到释放
notify()的对象锁。当释放完锁后,程序重新分配cpu,要注意的是,此时系统并不一定就让wait的线程去运行,而有可能是刚才调用notify()的线程接着继续运行。
这一点正说明了线程运行与中断的不确定性。
7.一般说来,notify()是唤醒等待池中等待时间最长的线程;而notifyAll()是唤醒等
待池中所有等待线程,然后线程去竞争对象锁。这里说的是一般情况,有时情况并非如此,这是由系统中线程运行与中断的不确定性决定的。
8.wait(),notify()通常情况下需要sleep()的配合,否则屏幕中的运行显式会“飞速”。
9.多线程间的通信会出现死锁现象,即wait的线程有可能永远也得不到对象锁。
------------------------------------------------------------------------------- ◆其他注意问题
☆数组
a.数组在使用之前,必须要保证给其分配内存(系统会用默认值初始化),不可只定义。否则编译通过运行也会出现空指针错误。分配内存只需通过new就可以了。
b.二维数组的第二维可以是变长的,而且可以在定义时不指定具体值。这意味着java 中的二维数组不必像矩阵那样要求每一维长度都相同。
☆变量赋值
a.实例变量只可在定义时显式赋值,不可先定义,再赋值(这样的话编译出错)。
b.方法变量既可以在定义时显式赋值,又可以先定义以后再赋值。
c.static变量可以在类的任何地方赋值(若在方法中赋值,实际上是重赋值了)。
d.final变量可以在任何地方赋值,但是一旦赋值,就不允许再次重赋值。
e.static final变量只能在定义处赋值(即:常量)。
☆移位
a.>> 首位的拷贝右移位。等同于有符号的除法。
b.>>> 零填充右移位。
c.<< 左移位。等同于有符号乘法,但是必须遵循整数的溢出原则。
d.>>32 >>>32任何移多少位都是移模32的余数。eg.移32位即不移。
☆byte、char和int
由于char的取值范围和int的正取值范围相同,所以,整型字面量可以直接赋给char。
但是要是明确将一个整型(int)变量直接赋给char变量则编译错误。
另外,int i=5;char c=’a’;c+=i;编译是通过的。
byte类型在强制转型的情况下,当范围超出时会循环溢出。☆求模%
求余只管左边的符号,右边不管。
eg. int a=-5;int b=-2;System.out.println(a%b) //-1
int a=-5;int b=2;System.out.println(a%b) //-1
int a=5;int b=-2;System.out.println(a%b) //1
史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资
深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。
https://www.doczj.com/doc/e912174108.html,ng.Object 类,是所有类的根父类! 2.Object类仅有一个空参的构造器public Object(){ } 3.关于方法: ①equals(Object obj) public boolean equals(Object obj) { return (this == obj); } // == // 1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,反之返回false // 注:两端数据类型可以不同,在不同的情况下,也可以返回true。 // 2.引用数据类型:比较引用类型变量的地址值是否相等。 //equals(): >①只能处理引用类型变量②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等 >像String 包装类File类Date类这些重写Object类的equals()方法,比较是两个对象的 //"实体内容"是否完全相同。 >若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写Object类的 equals(Object obj)方法 ②toString()方法
当我们输出一个对象的引用时,会调用toString()方法。 1.public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置 2.一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回。 3.像String类、Date、File类、包装类都重写了toString()方法。 1. String类:不可变的字符序列(如:String str = "atguigu"; str += "javaEE") 1.关注于String常用的方法! 2.String类与基本数据类型、包装类;与字符数组、字节数组; * 1.字符串与基本数据类型、包装类之间转换 * ①字符串--->基本数据类型、包装类:调用相应的包装类的parseXxx(String str); * ①基本数据类型、包装类--->字符串:调用字符串的重载的valueOf()方法 *
Created by AIwen on 2017/5/14. java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。 实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。 java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。 返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。 static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而
目录 第一章Java入门2? 第二章 Java基础5? 第三章条件转移1?4 第四章循环语句20? 第五章方法 ............................................... 26 第六章数组33? 第七章面向对象........................................... 42第八章异常63? ? 第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个 平台中最核心的部分,包含Java最核 心的类库。?JavaEE:(J2EE,Java 2 Platform, EnterpriseEdition,企业版), 开发、装配、部署企业级应用,包含 Servlet、JSP、JavaBean、JDB C、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platfor mMicro Edition,微型版),用于 小型电子设备上的软件开发。
2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径,J VM在运行时通过classpath加载需 要的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将 编写好的Java文件(.java)编译成 Java字节码文件(.class); ?java.exe:Java运行工具,启动Java 虚拟机进程,运行编译器生成的字节 码文件(.class) 5、一切程序运行的入口 publicstatic voidmain(String args []){ System.out.println(“Hel lo World!”); } 课堂笔记 练习题 一、填空题 1、Java的三个技术平台分别是(J2SE )、(J2EE)、(J2ME)。 2、Sun公司针对领域不同,提供了三个Java版本,其中对于个人计算机程序开发的是( J2SE ), 对于企业开发应用的是(J2EE),对于嵌入式设备应用开发的是( J2ME )。 (classpath )。 3、建立Java开发环境,安装JDK,一般需要设置环境变量(path)、 4、编写一个Java源程序,其文件名为Test.java,则编译该源程序的命令为(javac ),运行 该程序的命令为( java),生成文档注释的命令为( javadoc)。 5、Java程序的运行环境简称之为( JRE)。
目录 第一章 Java入门 (2) 第二章 Java基础 (5) 第三章条件转移 (16) 第四章循环语句 (22) 第五章方法 (28) 第六章数组 (35) 第七章面向对象 (44) 第八章异常 (65)
第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个平台中最核心 的部分,包含Java最核心的类库。 ?JavaEE:(J2EE,Java 2 Platform, Enterprise Edition,企业版),开发、装 配、部署企业级应用,包含Servlet、JSP、 JavaBean、JDBC、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platform Micro Edition,微型版),用于小型电子设备 上的软件开发。 2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径, JVM在运行时通过classpath加载需要 的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将编 写好的Java文件(.java)编译成Java 字节码文件(.class); ?java.exe:Java运行工具,启动Java虚 拟机进程,运行编译器生成的字节码 文件(.class) 5、一切程序运行的入口 public static void main(String args []){ System.out.println(“Hello World!”); } 课堂笔记
j a v a面向对象知识点总 结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998
1 类和对象 类: 类是用来描述一类事物的共性内容的, 类是抽象的; 创建类,如何描述 属性功能 用变量来描述属性 用方法来描述功能 对象: 就是现实中具体的事物,对象是具体的; 创建对象 类名对象名 = new 类名(); 如何通过对象访问类中属性和方法呢 对象名.变量名 对象名.方法名(); 只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间匿名对象 创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的; 匿名对象使用场景
1 调用方法 2 作为参数传递 3 添加进容器中 This 关键字 This. 类中的普通方法访问到的成员前边都有this.这个关键字This. 就代表当前对象, 普通方法, 创建对象调方法, 谁调用就代表谁 This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项: 1 this() 只能是构造函数的第一条执行语句 2 this() 不能在构造函数之间相互调用 3 this() 不能调用自己 构造函数(方法) 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值) 构造函数何时执行 对象一创建就会调用与之相对应的构造函数
构造函数语法 修饰符没有返回值类型类名(参数列表){ 具体执行的代码 } 构造函数自动添加 当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 如果我们指定了,就不添加了 构造函数和普通函数的区别 执行时机不同 对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行 return 1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致) 2 即便方法的返回值类型是void,方法中也可以出现 return; 3 构造函数中也可以有return关键字 成员变量和局部变量 1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用 局部变量是定义在方法中的,在所在代码块起作用
一、单选题 1.对类:(B) public class Test( //...do something } 下面那个正确地定义了类Test的构造函数。 A)public void Test() () B)publicTest()(} C ) public static Test() (} D) publicTest(); 2.下面哪个函数是public void example()(...)的重载函数。(A) A)public void example( float f)(...) B)public int example() (...) C)public void example2()(...} D)public int example_overLoad ()(...) 3.下面的代码段中,执行之后i和j的值是_C_。 int i = 1; intj; j = i++; A)1, 1 B) 1,2 C) 2, 1 D) 2,2 4.以下for循环的执行次数是_B o for(int x=0,y=0;(y !=0)&&(x<4) ;x++); A)无限次B) 一次也不执行 C)执行4次D)执行3次 5.下面程序的输出结果是—C o public class People( String name; int id; public People( String str, int n )( name = str; id = n; } public String toString(){ return id + " :” + name; } public String print()(
Java基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。demo 4,该技术什么时候用?test。 ----------------------------------------------------------------------------------------------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;
JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 1,JDK:Java Development Kit,java的开发和运行环境,java 的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java 运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\ 2):临时配置方式:set classpath=.;c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;
java知识点总结 应同学要求,特意写了一个知识点总结,因比较匆忙,可能归纳不是很准确,重点是面向对象的部分。 java有三个版本:JAVA SE 标准版\JAVA ME移动版\JAVA EE企业版 java常用命令:java, javac, appletview java程序文件名:.java, .class java的两类程序:applet, application; 特点,区别,这两类程序如何运行 java的主方法,主类,共有类;其特征 java的数据类型,注意与C++的不同,如字符型,引用型,初值 java与C++的不同之处,期中已总结 java标记符的命名规则 1)标识符有大小写字母、下划线、数字和$符号组成。 2)开头可以是大小写字母,下划线,和$符号(不能用数字开头) 3)标识符长度没有限制 4)标识符不能使关键字和保留字 面向对象的四大特征 抽象、封装、继承、多态 封装,类、对象,类与对象的关系,创建对象,对象实例变量 构造函数,默认构造函数,派生类的构造函数,构造函数的作用,初始化的顺序,构造方法的重载 构造函数:创建对象的同时将调用这个对象的构造函数完成对象的初始化工作。把若干个赋初值语句组合成一个方法在创建对象时一次性同时执行,这个方法就是构造函数。是与类同名的方法,创建对象的语句用new算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。 构造函数是类的特殊方法: 构造函数的方法名与类名相同。 构造函数没有返回类型。 构造函数的主要作用是完成对类对象的初始化工作。 构造函数一般不能由编程人员显式地直接调用。 在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。 类的修饰符:public类VS 默认; abstract类; final类; 1)类的访问控制符只有一个:public,即公共的。公共类表明它可以被所有其他类访问和引用。 若一个类没有访问控制符,说明它有默认访问控制特性,规定该类智能被同一个包中的类访问引用(包访问控制)。 2)abstract类:用abstract修饰符修饰的类被称为抽象类,抽象类是没有具体对象的概念类,抽象类是它所有子类的公共属性集合,用抽象类可以充分利用这些公共属性来提高开发和维护效率。 3)final类:被final修饰符修饰限定的,说明这个类不能再有子类。所以abstract与final 不能同时修饰一个类。 域和方法的定义 1)域:定义一个类时,需要定义一组称之为“域”或“属性”的变量,保存类或对象的数据。
复习题2 如有雷同,纯属巧合! 1.下列哪一种叙述是正确的() A. abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 2.下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 3.以下哪个表达式是不合法的() A、String x=”Hello”; int y=9; x+=y; B、String x=”Hello”; int y=9; if(x= =y) { } C、String x=”Hello”; int y=9; x=x+y; D、String x=null; int y=(x!=null)&&(x.length()>0) ? x.length() : 0 4.下列关于修饰符混用的说法,错误的是() A.abstract不能与final并列修饰同一个类 B.abstract类中不可以有private的成员 C.abstract方法必须在abstract类中 D.static方法中能处理非static的属性 5.()修饰符允许对类成员的访问不依赖于该类的任何对象 A、abstract B、static C、return D、public 6.关于被私有访问控制符private修饰的成员变量,以下说法正确的是() A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类 B.可以被两种类访问和引用:该类本身、该类的所有子类 C.只能被该类自身所访问和修改 D.只能被同一个包中的类访问
javaweb知识点总结 篇一:javaweb期末复习知识点整理 1、 Web应用概述 1. URL与URI URL: 统一资源定位器 URI:统一资源定位符 2. 常见HTML标签 3. 表单的处理 4. 静态文档与动态文档的概念:静态文档是一种以文件的形式存放在服务器端的文档,客户发出对该文档的请求,服务器返回这个文档。动态文档是指文档的内容可根据需要动态生成,又可分为服务器端动态文档和客户端动态文档技术。 5. Servlet概念:服务器端小程序,是使用ServletAPI 以及相关类编写的java程序,主要用来扩展web服务器的功能。 6. 处理404错误:查看给定的路径名是否正确,查看Servlet类文件是否在classes目录下,查看文件内容是否正确,查看tomcat是否启动 2、 Servlet技术模型 1. Servlet的API:包,包 Servlet接口及方法 :
1) public void init(ServletConfig config):完成Servlet初始化并准备提供服务。容器传给该方法一个ServletConfig类型的参数。 2)public void service(ServletRequest req,ServletResponse res)throw ServletException,IOException:对每个客户请求容器调用一次该方法,它允许Servlet为请求提供响应。 3) public void destroy()该方法由容器调用,指示Servlet清除本身,释放请求的资源并准备结束服务。 4) public ServletConfig getServletConfig()返回关于Servlet的配置信息,如传递给init()方法的参数。 5) public String getServletInfo()返回关于Servlet 的信息,如作者,版本及版权信息。 ServleConfig接口作用及方法 HttpServlet类 :新的service方法,doGet,doPost HttpServletRequest接口及常用方法 HttpServletResponse接口及常用方法 2. Servlet的开发步骤 编写一个Servlet类 编译 部署 (1)在tomcat的虚拟目录下,创建Web目录
基础 1.object类的方法有哪些 clone() protect 创建并返回一个对象的副本 equals()用来比较某个对象是否与调用此方法的对象相等 finalize() protect getClass() 返回一个对象的运行时类 hashCode()返回一个对象的hash值 notify()唤醒在此对象监听器上等待的单个线程。如果有多个,则随机唤醒一个 notifyAll()唤醒在此对象监听器上等待的所有线程 registerNatives() 本地私有方法,在类初始化是会调用此方法 toString() 返回当前对象的字符串表示 wait()使当前线程处于等待直到其他线程调用这个对象的notify或notifyAll方法或者超过指定的时间量 2.接口和抽象类的区别 1.首先描述接口和抽象类的特性 抽象类:是子类通用特性的集合 接口:是抽象方法的集合l 从某种意义上说抽象类包含了接口的所有功能。但是通过实现接口可以实现多继承
什么时候用抽象类和接口 1.如果一些方法必须提供默认的实现,就必须用抽象类,比如在dao层,每个类都有增删查改这几个操作,我们可以把这些操作写在抽象类里,并让抽象类提供默认的实现。 否则的话用接口 2.假如要实现多继承,则必须要用接口,java不支持多继承但是可以通过实现多个接口来解决 3.如果基本功能在不断改变,那么就用抽象类。如果不断改变基本功能并且使用接口,子类就必须不停的更改 03.抽象类是否有构造方法 抽象类有构造方法只是抽象类不能够实例化 4.Final finally finalize()方法的区别 5.Sleep()和wait()的区别 ①这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。 ②锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS 分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。 Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。 ③使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,配合synchronized实现等待通信机制,而sleep可以在任何地方使用。 synchronized(x){ x.notify() //或者wait() }
Java基础测试题 一、选择题(每题2分) 1、在JAVA编程中,Java编译器会将java程序转换为()。 A. 字节码; B. 可执行代码; C. 机器代码; D. 以上所有选项都不正确。 2、下列那些不是合法的标识符?() A. Tel_num B. 8ABc C. Emp_1 D. b123.6 E. NULL F. Hello World 3、以下字符常量中不合法的是( )。 A. '|' B. '\'' C."\n" D.'我' 4、下列语句编译没有错误的是:() A. float a=1.5; B.byte a=129; C.byte a=5; D.byte a=(byte)200; 5、java中int数据类型在内存中表示为() A. 2个字节 B.4个字节 C. 由程序员指定 D. 以上都不正确 6、下列程序段执行后t5的结果是( )。 int t1 = 9, t2 = 11, t3=8; int t4,t5; t4 = t1 > t2 ? t1 : t2+ t1; t5 = t4 > t3 ? t4 : t3; A. 8 B.20 C.11 D.9 7、若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( )。 A. 0 B. 4 C. 8 D.–4 8、设 a, b, c, d 均为 int 型的变量,并已赋值,下列表达式的结果属于非逻辑值的是( ) A. a!=b & c%d < a B.a++ = =a+b+c+d C.++a*b--+d D.a+b>=c+d 9、以下代码段执行后的输出结果为() int x=3; int y=10; System.out.println(y%x); A.0 B.1 C.2 D.3 10、下列语句序列执行后,k 的值是( )。 int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A. 31 B. 32 C. 2 D.33 11、假定有变量定义: int k=7,x=12; 则能使值为3的表达式是()。 A. x%=(k%=5) B.x%=(k-k%5) C. x%=k-k%5 D. (x%=k)-(k%=5) 12、设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是()。 A. 把x和y按从大到小排列 B. 把x和y按从小到大排列
JSE第一部分 分享者:张振羽 2017.6.30
1.什么是 JDK API (1) Application Programming Interface ,应用程序编程接口 (2) 是一些预先定义的函数,开发人员可提供直接调用的功能。 2.JDK包结构 便于维护,按照功能划分,不同功能的累划分在不同功能的包中,常用的包如下表: 3.字符串的基本操作 3.1 String 及其API
3.1.1 String (1) String是不可变对象 (2) https://www.doczj.com/doc/e912174108.html,ng.String使用了final修饰,不能被继承。 (3)字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中 (4) 任何一个字符对应2个字节的长度,1个字节 = 8位二进制。 3.1.2 String s=new String (“abc”) (1) 众所周知,答案是:创建两个对象 (2) why?举例子: 分析步骤: a) 栈中开辟一块空间存放引用str1(地址信息); b) String池中有一块空间,存放String常量"abc"; c) 引用str1指向池中String常量"abc"; d) str1所指代的地址即常量"abc"所在地址,输出为true; 结论:创建了一个引用对象str1
分析步骤: 1) 栈中开辟一块空间存放引用str3; 2) 堆中开辟一块空间存放一个新建的String对象"abc"; 3) 引用str3指向堆中的新建的String对象"abc"; 4) str3所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出false; 3.2 StringBuilder常见API
Java期末知识点整理总结 计科2班苏锐师编号47 学号201330551464 第一章 Java语言概述 1. Java语言发展历史和现状及前景 2. Java语言的特点: 简单、面向对象、分布式、健壮性、结构中立、 安全性、可移植、解释的、高性能、多线程、多态性 3. Java虚拟机概念(JVM),Java程序的执行过程 4. Java应用程序分类:Application和Applet 5. Java程序的开发环境:JDK,IDE 第二章 Java数据类型及其运算 1. 标识符与保留字 1.2 标识符命名语法规则与Java推荐的标识符命名规则 1.3 Java中的关键字 2. 数据类型byte, short, int long, char, float, double, boolean 注意点:Java中所有数据类型是确定的,与平台无关,没有sizeof操作,其中特别注意char 类型是2字节Unicode编码,与C++ 不同;知道基本类型都有对应的默认值。 整型数的十进制、八进制、十六进制值的表示。 实型数的十进制、十六进制与科学计数法表示,注意实型常量默认类型为double型。 3. 运算符与表达式算术运算符: + - * / % ++ -- 关系运算符:> >= < <= == != 逻辑运算符:&& || !& | 注意短路计算与非短路计算的差别 位运算符: >> << >>> & | ^ ~ 要认识异或(^)与按位取反(~)运算符 赋值运算符: += -= *= /= %= &= |= ^= <<= >>= >>>= 要注意赋值运算符中包含了强制转换: 若: int k = 1; k += 44.232D; 则相当于: k = (int) ( k + 44.232D); 条件运算符:exp ?stat1 :stat2 要注意stat1与stat2要求类型相兼容且不能为void类型。运算符的优先级:算术运算 > 关系运算> 逻辑运算
Java知识点总结 1环境搭建与开发 1.1 环境变量 JA V A_HOME:Java的安装目录; CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件); PATH:指定一个路径列表,用于搜索可执行文件。 1.2 Java SDK应用 编译:Javac 类名.class; 运行:Java 类名; 打包:jar cf test.jar test (把当前目录下的test目录下的所有文件压缩到test.jar文件中)。 2变量与常量 Java中的常量用保留字final来实现。 变量:局部变量(local variable)、实例变量(instance variable)、类变量(class variable);任何变量在使用前都必须初始化,局部变量必须显示初始化,实例变量在类的构造方法被调用时初始化(分配默认值),类变量在类被加载时被初始化。 3标识符 3.1 命名 在Java语言中,标识符的定义规则是以字母、下划线、美元符开始,后面可以跟字母、下划线、美元符、数字。 因为Java语言使用Unicode字符集,所以对字母不仅限于英文,还可以是日文、韩文、阿拉伯文、中文等。 区分大小写,没有字数限制。
3.2 关键字 3.2.1static static方法中不能有this和super关键字(static方法不是“面向对象”的,而是“面向类”的)。 static方法中只能访问所属类的static方法和变量。 static数据成员的初始化:在第一次生成该类的对象时初始化。 3.2.2final 1)final数据 a)static final ●更加典型的定义方式是public static final; ●占用一段不能改变的存储空间; ●代表编译时常量,即在编译器就能知道其值(如果只声明为final或 者static,是在运行时才知道值)。 ●全部用大写字母命名,单词之间用下划线隔开。 b)final数据与final引用 ●final数据的值不能被改变; ●final引用是指无法将其指向一个新的对象(数组也是一种引用),对 象本身的值是可以改变的。 c)空白final(声明为final却未赋初始值) ●可以做到根据对象有所不同,又保持恒定不变的特性; ●必须保证使用前已经初始化:在定义处赋值或者在构造器中赋值。 2)final参数 ●无法在方法中更改引用所指向的对象。 3)final方法 ●禁止覆盖,防止任何继承类修改它的定义; ●private方法都是final的,因此private方法无法覆盖。 4)final类 ●不允许继承该类; ●final类中的所有方法都隐式指定为final的。
基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。 4,该技术什么时候用?。 一:概述: 1991 年公司的等人开始开发名称为的语言,希望用于控制嵌入在有线电视交换盒、等的微处理器; 1994年将语言更名为; 的三种技术架构: :,开发企业环境下的应用程序,主要针对程序开发; :,完成桌面应用程序的开发,是其它两者的基础; :,开发电子消费产品和嵌入式设备,如手机中的程序; 1,:,的开发和运行环境,的开发工具和。 2,:,程序的运行环境,运行的所需的类库(虚拟机)。 3,配置环境变量:让\目录下的工具,可以在任意目录下运行,原因是,将该工具
所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:安装路径%\\ \ 2):临时配置方式::\ \\\ 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去中设置的路径下找。 的配置: 1):永久配置方式::\:\ 2):临时配置方式::\:\ 注意:在定义环境变量时,需要注意的情况 如果没有定义环境变量,启动后,会在当前目录下查找要运行的类文件; 如果指定了,那么会在指定的目录下查找要运行的类文件。 还会在当前目录找吗?两种情况: 1):如果的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。 2):如果的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。 一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。 4,命令和命令做什么事情呢? 要知道是分两部分的:一个是编译,一个是运行。 :负责的是编译的部分,当执行时,会启动的编译器程序。对指定扩展名的文件进
JAVA知识点总结 1.JAVA的特点: ○1简单易用、完全面向对象; ○2与平台无关性、可扩展性强; ○3可移植性高、支持分布式编程; ○4健壮、安全可靠并性能优异; ○5支持多线程开发技术; ○6支持动态开发。 2.JVM:Java虚拟机(JVM是Java实现跨平台的基础)。 Java的源程序(*.java)编译(命令:java+文件名.java)Java字节码(*.class编译时自动形成,与源程序名一致) 运行(命令:java+源程序的文件名)JVM(Windows、Linux) 开发工具,Javac及基础核心类 JDK 运行环境,Java及基础核心类 3.编写第一个Java程序: Java源文件扩展名为:”.java” 一个源文件中最好只有一个java类,但是可以包含多个类 public修饰的类,文件名与类名必须一致(包括大小写) 被运行的类中需要有一个方法: public static void main(String[ ] args){} 一个源文件中最多有一个public修饰的类
例如:public class Test{ public static void main(String args[]){ System.out.println(“这个编写的第一个java程序!!!”); } } 在运行程序之前先配置环境变量: path变量值为:JDK安装目录下\bin; classpath变量值为:JDK安装目录下\lib; 或 .;JDK安装目录下\lib\tools.jar 在dos命令窗口中输入以下命令进行运行: 编译命令:javac Test.java 运行命令:java Test 生成文档命令:javadoc Test.java 4.Java编程规范 A、命名规定 包:包名应该是小写的名词。 如:package shipping.objects 类:类名应该是名词,大小写混合,每个单词的首字母大写。 如:class AccountBook 接口:接口名的大小写应该与类名一样。 如:interface Account 方法:方法名应该动词,大小写混合,首字母小写。每个方法名中,以大写字母区分单词。限制使用下划线。
java常用类知识点总结 Java常用类 要求: 1、掌握String和StringBuffer的区别,可以熟练使用String和StringBuffer的各 种方法进行相关操作。 2、能够自己编写一个得到日期的操作类,并将日期进行格式化操作。 3、掌握比较器及其基本原理,并可以通过比较器进行对象数组的比较操作。 4、掌握对象克隆技术及其实现 5、能够灵活应用正则表达式对字符串的组成进行判断 6、掌握Math、Random、基本数据类型的包装类的使用 7、描述出Object System对垃圾收集的支持 8、使用NumberFormat、DecimalFormat、BigInteger、BigDecimal进行数字的操 作 String和StringBuffer String的内容一旦声明不可改变,如果要改变,改变的是String的引用地址,如果一个字符串要经常改变,必须使用StringBuffer。 在一个字符串内容需要频繁修改时,使用StringBuffer可以提升操作性能,因为StringBuffer内容可以改变,而String内容不可改变。StringBuffer支持的方法大部分与String类似。 StringBuffer常见用法: (1) 字符串的连接操作
String类可以通过“+“进行字符串的连接,而StringBuffer中却只能使用append方法进行字符串的连接,而且此方法返回一个StringBuffer类的实例,这样就可以采用代码链的形式一直调用append方法。 (2) 在任意位置处为StringBuffer添加内容 可以使用insert方法在指定位置上为StringBuffer添加内容 字符串的反转操作(较为常见的操作,使用reverse方法) (3) 替换指定范围的内容 replace方法可对指定范围的内容进行替换。在String中如果要替换,使用的是replaceAll (4) 字符串截取(使用subString方法从指定范围中截取内容) (5) 删除指定范围的字符串(使用delete方法删除指定范围内容) (6) 查找指定内容是否存在(indexOf查找指定内容,查找到返回内容的位置, 没查到返回-1) 问题:(1)String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有, 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢,答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改, 或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符