`
zhaoImpulse
  • 浏览: 80592 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 一些基础

阅读更多

 语言基础

  1. 为了简化代码,Java5提供了静态导入机制。静态导入实现无需在使用其它类的静态成员时前缀其类名,。要使用静态成员(方法和变量),必须给出提供这个方法的类。使用静态导入,可以使被导入类的所有静态变量和方法在当前类中直接使用,使用这些静态成员也无需再给出它们的类名。语法为:import static,不能为static import
    package utils;
    public class Repetition{
        public static String twice(String s){
           return s+s;
        }
    }
     
    import static utils.Repetition;
    public class Example{
        public static void main(String args[]){
            System.out.println(twice("abcd");
        }
    }
  2.       从Java5开始,允许程序呐创建带有数量可变的参数列表的方法,不再需要声明大量的具有同类型、数量不两只的参数列表的过载方法。其语法形式为methodname(datatype...argname)。一个方法只能声明一个可变参数,如果有变通参数,可变参数必须放在最后:getNumber(int a,int b,int ... abc);      
  3.     程序员无法强制调用垃圾回收器明确地回收指定对象,但可以通过将预废弃对象赋值null来通知垃圾回收器回收废弃的对象。至于垃圾回收器何时运行由JVM决定,程序员无从干涉。     程序呐无法强制运行垃圾回收器,但可以调用System.gc()和Runtime.getRuntime().gc()方法来通知垃圾回收器。这两种方法的调用不会强制垃圾回收器立刻执行,而只是一种建议、通知性而非强制性的要求。    线程间通信的两个基本问题是互斥和同步。
    1. 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时就等待,直到消息到达时才被唤醒。
    2. 线程互斥是指对于共享的操作系统资源,各线程访问时的排它性。当有若干线程访问时任何时刻只允许一个线程去使用,其它要使用资源的线程必须等待,直到占用资源者释放资源。
  4.     Java对象的四种引用:(平时很少使用弱引用和虚引用,只用软引用就足够)
    1. 强引用:强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足, Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
      Object obj = new Object
       
    2. 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存(下文给出示例)。
      import java.lang.ref.SoftReferenct;
      ...
         A a = new A();
         //使用a
         ...
         //用完a,将它设置为soft类型,并且释放强引用
         SoftReference sr = new SoftReference(a);
         a = null;//释放强引用
        ...
         //下次使用时
         if(sr!=null){
               a = sr.get();
          }else{
              //GC由于内存资源不足,可能系统回收了a的软引用,因此需要重新装载
               a = new A();
               sr = new softReference(a);
          }
       利:处理一些占用内存较大而且声明周期较长,但使用并不频繁的对象时就尽量应用该技术。弊:应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程中发生了变化,都会带来麻烦。
    3. 弱引用:弱 引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不 管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。                                                                                             弱引用的使用同软引用
    4. 虚引用: 虚引用 顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。 虚引用主要用来跟踪对象被垃圾回收器回收的活动
  5. 尽量少的使用java的析构方法finalize:它是不确定的不及时的,程序员根本不能控制它,还会加大GC的工作量。但我们仍仍可以用它来释放一些不容易控制,并且资源,例如一些I/O操作,数据库的连接,起到双保险的作用。
  6. 字符串的驻留       intern()方法,用来创建一个唯一字符串集合的驻留池username = username.intern(),如果这个驻留池原先并不存在这个值,返回对这个已驻留字符串的引用,这样就可以用“==”来比较,比equals()方法更为廉价,运行速度更快
    public class Main {
    	public static void main(String[] args) {
    		String str = new String("abc");//此处必须new,否则不做驻留处理也会输出true
    		//没有做驻留处理
    		//输出false
    		if(str == "abc"){
    			System.out.println("true");
    		}else{
    			System.out.println("false");
    		}
    		//做了驻留处理
    		String a = str.intern();
    		//输出true
    		if( a == "abc"){
    			System.out.println("true");
    		}else{
    			System.out.println("false");
    		}
    	}
    }
     
  7. static
    1. 可以在非静态方法中引用静态变量
      public class Main {
      	private static String userName = "abc";
      	public String getMessage(){
      		return userName;
      	}
      }
       
    2. 不可以在静态方法中引用非静态变量
      public class Main {
      	private String userName = "abc";
      	public static void main(String[] args) {
      		System.out.println(userName);
      	}
      }
       
    3. 可以在静态方法中创建非静态变量
      public class Main {
      	public static void main(String[] args) {
      		Main m = new Main();
      	}
      }
  8. 实例识别(instanceof)用来判断一个对象的引用是否为某一类型。 (对继承和实现的父类都有效,但不能用于子类,比如B继承了A,那么a instanceof B就是false)
    		A a = new A();
    		System.out.println( a instanceof A);//输出true
    		A a = null;
    		System.out.println( a instanceof A);//输出false,因为a的值为null,null不是任何对象的引用
      
  9.  

    类的实例化顺序

    1.   父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
    2.   子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
    3.   父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
    4.   父类构造方法
    5.   子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
    6.   子类构造方法
  10. hashcode
    1. 当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到一个位置用来存放当前对象,挡在该位置没有一个对象存在的话,那么集合Set认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合中不存在该对象,在进行一次散列,将该对象放到散列后计算出的新地址里,如果equals方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了
    2. 所以改写equals时总是要改写hashCode
    3. java.lnag.Object中对hashCode的约定
      1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
      2. 如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
      3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
    4. Ojbect类的hashCode方法返回的是Object对象的内存地址。可以通过Integer.toHexString(new Object().hashCode);来得到。
  11. 一个问题编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,应该输出为“我ABC”而不是“我ABC+汉的半个”
    1. public class TestSplit {
      public     static String split(String s,int n)
          {
              int d=n,i=0;
              while( i<s.length() && (d>1 || d==1 && s.charAt(i)<256)   )
              {
                  if(s.charAt(i)<256) d--;  
                    else    d-=2;
                 i++;       
              }
              return s.substring(0,i);
          }
          public static void main(String[] args) {
              System.out.println(split("我A汉BC字D",4));
              System.out.println(split("我A汉BC字D",5));
              System.out.println(split("我A汉BC字D",12));
          }
      }
       
    2. 这是解决的代码,只所以不用String的getBytes()方法,是因为它返回是是指定编码集的编码,在windows默认是gbk,而在其它系统下大多数是utf-8,所以,我们要用这用这种charAt方面,它使用的是java指定的unicode编码,每个字符固定为两个字节。

 

 

分享到:
评论

相关推荐

    JAVA零基础到高级进阶特训营 JAVA多线程并发设计+Spring高级+数据库开发+JAVA基础等

    这套课程既可以作为从零基础开始学习的JAVA基础到高级学习教程,对于有JAVA基础的同学来说可以略过前面的JAVA基础章节,直接学习后续的JAVA高级部分课程。更可以灵活的作为章节技术,进行针对性的JAVA学习。还是要...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    京动力节点-Java编程零基础教程-001-编程基础-基本概念-语言、程序、编程.mp4 北京动力节点-Java编程零基础教程-002-编程基础-基本概念-编译.mp4 北京动力节点-Java编程零基础教程-003-编程基础-基本DOS操作.mp4 ...

    JAVA0基础学习

    JAVA学习教程

    java基础整合.docx

    java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础 java语法基础

    完整版java基础入门教程由浅入深讲解 Java语言编程基础 含辅助PPT资料 全套PPT课件 共15个章节.rar

    完整版java基础入门教程由浅入深讲解 Java语言编程基础 第01章 java编程简介(共32页).ppt 完整版java基础入门教程由浅入深讲解 Java语言编程基础 第02章 java数据类型(共40页).ppt 完整版java基础入门教程...

    《Java基础入门》-课后习题答案.doc

    本文将对《Java 基础入门》课后习题答案进行总结,涵盖了 Java 基础知识点,包括 Java 开发入门、Java 基础类、变量类型、运算符、控制流语句、方法重载等。 一、Java 开发入门 * Java EE、Java SE、Java ME 是 ...

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    《Java基础入门(第3版)》是一本针对Java初学者的教材,其课后答案文档提供了对书中习题的解答,旨在帮助读者巩固所学知识。Java是一种面向对象的编程语言,具备跨平台性,由Java虚拟机(JVM)负责解释执行。Java...

    JAVA 基础有由浅入神中高级视频

    市面上目前流传的java基础视频教程都是讲一些最基础的java语法和相关API的应用,然而用人单位对初级程序员的要求越来越高,那些讲解java基础语法的视频教程已经无法满足大众的学习要求。本套视频教程录制完中国第一...

    韩顺平_循序渐进学Java零基础【完整笔记】1

    【标题】:“韩顺平_循序渐进学Java零基础【完整笔记】1” 【描述】:这个课程是为初学者设计的,旨在通过系统的学习帮助学生掌握Java编程的基础。课程分为三个阶段,详细讲解了Java语言的核心概念、就业前景以及在...

    java pdf基础资料

    java pdf基础资料java pdf基础资料java pdf基础资料

    java 基础异常 java 基础异常java 基础异常java 基础异常

    java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常...

    Java编程基础课设 Java打字游戏.zip

    Java编程基础课设 Java打字游戏.zipJava编程基础课设 Java打字游戏.zip 、Java编程基础课设 Java打字游戏.zipJava编程基础课设 Java打字游戏.zip Java编程基础课设 Java打字游戏.zipJava编程基础课设 Java打字游戏....

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    java基础知识 ppt

    java基础知识,帮助初学者更快更好地掌握java。ppt内容具体易懂,希望对刚接触java的初学者有所帮助。

    第2讲 java语言基础知识

    第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第2讲 java语言基础知识第...

    Java基础加强系列视频课程

    资源名称:Java基础加强系列视频课程资源目录:【】黑马程序员Java基础加强(01-10)【】黑马程序员Java基础加强(11-20)【】黑马程序员Java基础加强(21-30)【】黑马程序员Java基础加强(31-40)【】黑马程序员...

Global site tag (gtag.js) - Google Analytics