java_net.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java_net
- 资源描述:
-
1:instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子: String s = "I AM an Object!"; boolean isObject = s instanceof Object; 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。 instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类: public class Bill {//省略细节} public class PhoneBill extends Bill {//省略细节} public class GasBill extends Bill {//省略细节} 在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断: public double calculate(Bill bill) { if (bill instanceof PhoneBill) { //计算电话账单 } if (bill instanceof GasBill) { //计算燃气账单 } ... } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了: public double calculate(PhoneBill bill) { //计算电话账单 } public double calculate(GasBill bill) { //计算燃气账单 } 所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。 2:字符转换有关 字符串转换为字节数组 getByte() 字符串转换为字符数组toCharArray() 数组直接打印 Arrays.toString(arr) 3:java内部类 Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 3.1:成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。 注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。 public class Outer{ private static int i = 1; private int j=10; private int k=20; public static void outer_f1(){ //do more something } public void out_f2(){ //do more something } //成员内部类 class Inner{ //static int inner_i =100; //内部类中不允许定义静态变量 int j=100;//内部类中外部类的实例变量可以共存 int inner_i=1; void inner_f1(){ System.out.println(i);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量 System.out.println(j);//在内部类中访问内部类自己的变量直接用变量名 System.out.println(this.j);//也可以在内部类中用"this.变量名"来访问内部类变量 //访问外部类中与内部类同名的实例变量可用"外部类名.this.变量名"。 System.out.println(k);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量 outer_f1(); outer_f2(); } } //外部类的非静态方法访问成员内部类 public void outer_f3(){ Inner inner = new Inner(); inner.inner_f1(); } //外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样 public static void outer_f4(){ //step1 建立外部类对象 Outer out = new Outer(); //***step2 根据外部类对象建立内部类对象*** Inner inner=out.new Inner(); //step3 访问内部类的方法 inner.inner_f1(); } public static void main(String[] args){ outer_f4(); } } 成员内部类的优点: ⑴ 内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。) ⑵ 用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。 3.2:局部内部类: 即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。 注意:局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。 public class Outer { private int s = 100; private int out_i = 1; public void f(final int k){ final int s = 200; int i = 1; final int j = 10; class Inner{ //定义在方法内部 int s = 300;//可以定义与外部类同名的变量 //static int m = 20;//不可以定义静态变量 Inner(int k){ inner_f(k); } int inner_i = 100; void inner_f(int k){ System.out.println(out_i);//如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量 System.out.println(k);//*****可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的***** // System.out.println(i); System.out.println(s);//如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量 System.out.println(this.s);//用"this.变量名" 访问的也是内部类变量 System.out.println(Outer.this.s);//用外部"外部类类名.this.变量名" 访问的是外部类变量 } } new Inner(k); } public static void main(String[] args) { //访问局部内部类必须先有外部类对象 Outer out = new Outer(); out.f(3); } } 注意: 在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。 3.3:静态内部类: 静态内部类定义在类中,任何方法外,用static定义。 注意:静态内部类中可以定义静态或者非静态的成员 public class Outer { private static int i = 1; private int j = 10; public static void outer_f1(){ } public void outer_f2(){ } // 静态内部类可以用public,protected,private修饰 // 静态内部类中可以定义静态或者非静态的成员 static class Inner{ static int inner_i = 100; int inner_j = 200; static void inner_f1(){ System.out.println("Outer.i"+i);//静态内部类只能访问外部类的静态成员 outer_f1();//包括静态变量和静态方法 } void inner_f2(){ // System.out.println("Outer.i"+j);//静态内部类不能访问外部类的非静态成员 // outer_f2();//包括非静态变量和非静态方法 } } public void outer_f3(){ // 外部类访问内部类的静态成员:内部类.静态成员 System.out.println(Inner.inner_i); Inner.inner_f1(); // 外部类访问内部类的非静态成员:实例化内部类即可 Inner inner = new Inner(); inner.inner_f2(); } public static void main(String[] args) { new Outer().outer_f3(); } } 注意:*******生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成: Outer.Inner in=new Outer.Inner(); 而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。静态内部类不可用private来进行定义。******* 例子: 对于两个类,拥有相同的方法: class People { run(); } class Machine{ run(); } 此时有一个robot类: class Robot extends People implement Machine. 此时run()不可直接实现。 注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。 3.4:匿名内部类 匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。 IA被定义为接口。 IA I=new IA(){}; 匿名内部类的特点: 1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。 2,只是为了获得一个对象实例,不需要知道其实际类型。 3,类名没有意义,也就是不需要使用到。 public class Outer { private static int i = 1; private int j = 10; public static void outer_f1(){ } public void outer_f2(){ } // 静态内部类可以用public,protected,private修饰 // 静态内部类中可以定义静态或者非静态的成员 static class Inner{ static int inner_i = 100; int inner_j = 200; static void inner_f1(){ System.out.println("Outer.i"+i);//静态内部类只能访问外部类的静态成员 outer_f1();//包括静态变量和静态方法 } void inner_f2(){ // System.out.println("Outer.i"+j);//静态内部类不能访问外部类的非静态成员 // outer_f2();//包括非静态变量和非静态方法 } } public void outer_f3(){ // 外部类访问内部类的静态成员:内部类.静态成员 System.out.println(Inner.inner_i); Inner.inner_f1(); // 外部类访问内部类的非静态成员:实例化内部类即可 Inner inner = new Inner(); inner.inner_f2(); } public static void main(String[] args) { new Outer().outer_f3(); } } 注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。 3.5:内部类总结: 1.首先,把内部类作为外部类的一个特殊的成员来看待,因此它有类成员的封闭等级:private ,protected,默认(friendly),public 它有类成员的修饰符: static,final,abstract 2.非静态内部类nested inner class,内部类隐含有一个外部类的指针this,因此,它可以访问外部类的一切资源(当然包括private) 外部类访问内部类的成员,先要取得内部类的对象,并且取决于内部类成员的封装等级。 非静态内部类不能包含任何static成员. 3.静态内部类:static inner class,不再包含外部类的this指针,并且在外部类装载时初始化. 静态内部类能包含static或非static成员. 静态内部类只能访问外部类static成员. 外部类访问静态内部类的成员,循一般类法规。对于static成员,用类名.成员即可访问,对于非static成员,只能用对象.成员进行访问 4.对于方法中的内部类或块中内部类只能访问块中或方法中的final变量。 类成员有两种static , non-static,同样内部类也有这两种 non-static 内部类的实例,必须在外部类的方法中创建或通过外部类的实例来创建(OuterClassInstanceName.new innerClassName(ConstructorParameter)),并且可直接访问外部类的信息,外部类对象可通过OuterClassName.this来引用 static 内部类的实例, 直接创建即可,没有对外部类实例的引用。 内部类不管static还是non-static都有对外部类的引用 non-static 内部类不允许有static成员 方法中的内部类只允许访问方法中的final局部变量和方法的final参数列表,所以说方法中的内部类和内部类没什麽区别。但方法中的内部类不能在方法以外访问,方法中不可以有static内部类 匿名内部类如果继承自接口,必须实现指定接口的方法,且无参数 匿名内部类如果继承自类,参数必须按父类的构造函数的参数传递 4: java静态代码块和构造方法执行顺序 先看看下面几个类,然后判断它们的输出 public class A { static{ System.out.print(1); } public A(){ System.out.print(2); } } public class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class C { public static void main(String[] args){ A a = new B(); a = new B(); } } 父类与子类执行的先后顺序 静态变量的执行特性 方法重写(override)的注意事项 当父类与子类都有静态代码块和构造函数的时候,执行顺序如下: 父类静态代码块 > 子类静态代码块 父类构造函数 > 子类构造函数(先有父亲,后有孩子) 如果是多级继承关系的话,最高层的父类首先执行,然后依次递减 总结:静态优先执行,父类优先执行 注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次 5: abstract class和interface有什么区别? 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 6: String,StringBuffer与StringBuilder的区别?? String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的 StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




java_net.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/7040514.html