javaSE_1

来源:互联网 发布:unity3d 3dsmax 编辑:程序博客网 时间:2024/05/29 18:32

 

java工具类:

java  BeanCodeGenerator  aa.java  SetterGetter 疯狂JAVA版)

 

重写equals方法  DEMO2

 

 

文字编辑器设计 C#

文字编辑器设计 JAVA

图片管理器

 

 

负数在计算机里以 补码 存在 (正数的补码和原码相同,也就是以原码的形式存在)

负数 转为 补码

原码符号位外取反得到反码

反码加1得到补码

 

 

左移运算符: <<

整体左移指定位数,右边空出来的位以0来补充(左边移出去的被去除)

右移运算符: >>

右移指定位数后,左边空出来的位以原来的符号位来填充(原来是正数,则补0;原来 是负数则补1)(右移出去的被去除)

无符号右移运算符: >>> (这个C语言里好像没有,java有)

右移指定位数后,左边空出来的位以0来填充(右移出去的被去除)

 

Java移位运算符规则:

对于低于int类型的(byte/shor/char)操作数总是先自动转换为int类型后再移位

对于int类型的移位a>>b,当b>32,系统先用b32求余(因为int类型只有32位),得到的结果才是真正移位的位数。例如a>>33a>>1的结果完全一样,而a>>32的结果和a相同

对于long型的整数移位时a>>b,当b>64,与上面的规则一样。

 

左移n 相当于 乘以2n次方

右移,则是除以2n次方

进行位移运算不会改变操作数本身,它只是得到了一个新的运算结果,而原来的操作数本身是不会改变的。

 

逻辑运算符:

&& 

&   不短路与,作用与&&相同,但不会短路

||      

|        不短路或,作用与||相同,但不会短路  [W1] 

         

^       或与 (当两个操作数不同时才返回true ,两操作数相同时返回false

 

 

开发注意事项:

 

if (a>0){

    a++;

}

else{

    b++;

}                 //要加上大括号,防止后来的bug

 

 

Java程序里创建对象的4个常规方式如下:

         通过new 调用构造器创建java对象

         通过class对象的newInstance()方法调用构造器创建

         通过java 的反序列化机制从IO流中恢复java对象

         通过java对象提供的clone()方法复制一个新的

此外,可以以直接量的方式创建java对象,  String str = “abc”

此外,也可以通过简单的算法表达式,连接运算来创建java对象  String str2 = “abc” + “xyz”

数组.....

 

可变参数:  [W2] 

DEMO

缓存和集群

使用缓存前提:   缓存本质就是牺牲空间,换取时间

1.内存够

2.缓存数据量要可控

3.数据的读操作频繁,但写操作较少

4.系统允许部分脏数据

缓存设计过程中,重要的指标:命中率

 

运用内部类 [W3] 

匿名类  DEMO

 

GC垃圾收集器Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

 

内存管理: (分配 + 回收)

       JVM在何时决定回收一个java对象所占据的内存

         JVM会不会漏掉回收某些java对象,使之造成内存泄漏

         JVM回收java对象所占用内存的实现细节

         JVM能否对不同java对象占用的内存区分对待、回收

         常见垃圾回收机制的实现细节

yound

old

Permanent (永生代,默认64K)

 

         只要有引用变量引用此对象,垃圾机制就不会回收它

         垃圾回收机制采用有向图的方式来管理内存的,即从main节点开始, 具有较高的精度,但效率较低

        

         上面的图,考虑到static ,所以多了一个可恢复状态,应该是这样 (疯狂讲义)

 

         JDK1.2开始,j ava.lang.ref包下提供了3个类:SoftReference/PhantomReference/WeakReference

         它们分别代表了系统对对象的3种引用方式:软引用,虚引用,弱引用。、]

         归纳起来,java语言对对象的引用有如下4种:

                   强引用StrongReference (一般的new,这种最容易造成内存泄漏)

软引用SoftReference通过SoftReference类实现   DEMO创建1000Person对象

         当一个对象只具有软引用时,它有可能被垃圾机制回收。对于只有软引用的对象,当系统有足够的内存空间时,它不会被系统回收;当内存不足时,系统将会回收它 (通常用于对内存敏感的系统中)

弱引用 WeakReference 比软引用的引用级别更低,不管系统内存是否足够的  DEMO

虚引用 PhantomReference 完全类似于没有引用,主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,必须和引用队列(ReferenceQueue)联合使用  DEMO

引用队列由java.lang.ref.ReferenceQueue类表示,它用于保存被回收后对象的引用。当把软引用、弱引用和引用队列联合使用时,系统在回收被引用的对象之后,将把被回收对象对应的引用添加到关联的引用队列中。   与软引用、弱引用不同的是,虚引用在对象被释放之前,将把它对应的虚引用添加到它关联的引用队列中,这使得可以在对象被回收之前采取行动

        

         Runtime.getRuntime().runFinalization() ;   //System. runFinalization()

//强制垃圾回收机制调用系统中去活对象的finalize方法

      

java Xmx1024m MemoryTest

StringStringBuffer           ( Str1 + str2 ).intern()  

二维数组比一维数组占用更多内存空间

哈希表进行内存中的数据搜索 [W4]  hashmap

arrayCopy()提高数组截取速度 [W5] 

Foreach  [W6] 

位运算,++

Import static   DEMO

位运算,提高程序效率实例: int占有4个字节:00000000 00000000 00000000 00000000

              判断用户输入是否为奇数

              XOR字符加密例子

              2次方运算示范

 

尽量使用Stack()方法内部的局部变量

 

垃圾回收机制:[W7]         回收实例A     回收实例B

JAVA中没有析构函数,但有Finalize() 在回收前执行,它被声明为protected

只是不知道什么时候执行,但会自动执行,可以设置它的清除动作。

(如果确定不再使用某个对象,可以在参考到此对象的名称上指定null,表示这个名称不再参考至任何对象,不被任何名称参考的对象将会被回收资源。可以使用System.gc()建议程序进行垃圾回集,如果建议被采纳,则对象资源会被回收,回收前会执行Finalize()

 

提高运行效率(安全性)

PHP

JAVA

ZendOpmind,pear

JSON数据格式

索引/存储过程/事务/全文搜索 [W8] 

mysql缓存查询 [W9]   sqlserver缓存依赖

多线程

并发控制 加锁 解锁

精简代码 (位运算,++)

(界面尺寸,CSS样式表的优化)

使用索引查询 [W10]  聚集索引

索引视图(sql server )、全文索引[W11] XML索引(sql server

 

存储过程/事务/

数据库连接池

 

多线程

精简代码

自动加载对象:

_autoload();   /javascript

 

 

 

JAVA调试: 命令行:java -? 查看Java命令帮助

读取内存信息函数       MemoryTest

1Runtime.getRuntime().maxMemory()

得到虚拟机可以控制的最大内存数量。

2Runtime.getRuntime().totalMemory()

得到虚拟机当前已使用的内存数量。

Java虚拟机在默认的情况下只能控制66650112 byte63.56MB内存。

CMD命令               java -Xmx1024m –classpath [W12] 

测试

long start=System.currentTimeMillis(); //取得当前时间

long get=System.currentTimeMillis();  //取得当前时间

System.out.println("总用时间:"+(get-start)+"ms");

 

 

异常处理:

 

JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

 

try { }

catch( e ) { alert(  )};

[finally{   }]

可控式异常[X13] checked exception)(编译异常)(检查性异常) 可预期会发生的,编译器要求你必须处理的

java.lang.exception

执行时异常runtime exception (非可控式异常)(运行期异常)发生在程序执行期间,不一定可预测发生,编译器不要求一定处理

java.lang.RuntimeException

错误

java.lang.Error

 

在出现异常的地方,就终止执行代码,然后进入catch

如果有多个catch语句,则进入匹配异常那个catch

 

Finally不一定会执行  System.exit

 

自定义异常类

Entends Exception

抛出异常只能比父类的少、不能比父类的多s

[W14] 

程序应该使用如下的结构的代码实现   DEMO

 

 

抛出异常:throw语句

异常的继承架构:

JAVA所处理的异常主要分为两大类:

严重的错误:Error类用其子类

非严重的错误:Exception及其子类

都继承自Throwable类,Throwable类拥有几个取得相关异常信息的方法

getLocalizedMessage() 取得异常对象的信息化描述

getMessage()                         取得异常对象的信息描述

PrintStackTrace()                   显示异常的堆栈信息

 

JAVA中用2种方法处理异常:

1.在发生异常的地方直接处理

2.将异常抛给调用者,让调用者处理

 

一些重要异常的继承架构:

Throwable

Error(严重的系统错误)

LinkageError

ThreadDeath

VirtualMachineError

...

Exception

ClassNotFoundException

CloneNotSupportedExcetion

IllegalAccessException

...

RuntimeException(执行时异常)

ArithmeticException

ArrayStoreExceotion

ClassCastException

 

捕捉异常对象时,如果父类异常对象在子类异常对象之前被捕捉,则catch子类异常对象的区域将永远不会被执行,事实上编译器也会帮你检查此错误       ExceptionDemo            掉转顺序后ExceptionDemo2[W15] 

 

 

jad 反编译

javap  深入了解编译器机制

-c 分解方法代码

-l 指定行号和局部变量列表

 

class Base{

private int i = 2 ;

public Base(){

this.display() ;

}

public void display(){

...

}

}

//经过编译器处理后,类对象的构造器就变为

public Base(){

int i = 2 ;

this.display() ;

}

 

 

 

           断言(断点调试):AssertionDemo

              Assert x>=0: “dddddd” ;

               Java -source 1.4  –ea  ..    

              断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

     javac -source 1.4 Test.java

 

              assert boolean-expression

              assert boolean-expressioninformation-expression [W16] 

 

              动态开启断言:

           ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);

 

           决定如何让所需的断言是有意义的:

           static

           {

              boolean assertionEnabled = false;

              assert assertionEnabled = true;

              if(!assertionEnabled )

                     throw new RuntimeException("assertion disabled!");

              }

 

 

Junit测试:(测试驱动Test-Driven)     junit源文件

官方网站下载:         junit.org

单元测试 Unit Test

设置:       复制junit.jar文件; 设置classpath指向juint.jar

集成JUnitJCreator:

首先打开选项,在工具那一项,添加一个工具,选DOS命令,然后输入名字:JUnit

在参数那一行填上:java -cp %JUNIT_HOME%/junit.jar;. junit.textui.TestRunner $[CurClass]
前提是要配置好%JUNIT_HOME%这个环境路径。这里用的JUnit的字符界面,当然也可以用图形界面,把textui改为swingui就可以了。
实例类  单元测试实例

上例要先编译出一个class出来,才能进行测试这个class
         assertEquals()     
断定你的预期值与实际返回的结果是否相同,如果不同,TestRunner会捕捉异常,

文字窗口:junit.textui.TestRunner.run(MathToolUnitTest.class);

Swing窗口:junit.swingui.TestRunner.run(MathToolUnitTest.class);

 

netbeans:

assertEquals(x,y)

测试x是否等于y,xy要求是简单类型数值

或者必须为实现了equals方法的类

assertFalse(x)

测试x是否为falsex是一个布尔类型的值

assertTrue(x)

 

assertNull(x)

测试x是否为空,x是一个对象或者null

assertNotNull(x)

 

assertNull(x)

 

assertSame(x,y)

测试xy是否相同

assertNotSame(x,y)

 

 

MyClass.java

MyClassTest.java

 

陶宝哥Junit教程: Xp思想的体现 敏捷思想

      3.8里使用的是反射机制,必须test开头

         4.0里使用的是@Test注释,可以tttest等开关

        

SetUp TearDown及断言方法

3.8    DEMO

4.0    DEMO

 

3.8系列第一个类都继承了一人叫做TestCase的类,而TestCase的父类是Assert

4.x系列第一个可以不继承任何的类,但是仍然可以直接使用import static org.junit.Assert.*;

 

Junit4中测试用例的要求:

         测试用例类必须是public

         测试用例的测试方法应该是public

         测试用例的测试方法必须没有返回值

         测试用例的测试方法必须没有形参列表

 

 

注释Annotation

         @Test                                    定义一个要测试的方法

         @Before                                测试用例的对象初始化时,在第一个测试之前都会被执行的方法,这个方法常用来进行一些测试环境的准备,比如说读入输入数据,

         @After                                  测试用例的对象销毁时,

@BeforeClass                       在所有的测试开始之前执行,这个方法在运行的时候运行,而且只会运行一次,所以常用来做一些所有的方法都要依赖的工作,比如说,数据库的链接

         @AfterClass                         类被销毁时执行一次

         @Ignore                                可以忽略的测试 [W17] 

         @Test( expected  |  )       异常处理     3.8 DEMO  4.0 DEMO

                   @Test(expected = ArithmeticException.class)                //检查此方法是不是抛出了对应的异常

         @Test(timeout = 100)          要求测试必须在此100毫秒内

 

Failure 断言中出现预想值与实际值不同

Error断言前已经出错了

 

JunitEasyMock框架进行单元测试   DEMO

模拟对象取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能

EasyMock.expect(calcMethodMock.calc(Position.BOSS)).andReturn(7000.00).times(2) ;

 

 

HttpUnit

测试1:测试网页是否存在

要测试一個网页是否存在,只要简单的通过WebConversationgetResponse()方法即可,例如:

WebConversation webConversation = new WebConversation();

webConversation.getResponse(

牋牋牋牋牋牋 "http://localhost:8080/httpUnit/");

如果找不到网页,則會引发HttpNotFoundException,由于不是断言错误,所以这会在JUnit中产生一個Error

测试2GetPost

您可以分別使用GetMethodWebRequestPostMethodWebRequest來发出GetPost请求,例如:

WebConversation webConversation = new WebConversation();

WebRequest request =new GetMethodWebRequest("http://localhost:8080/httpUnit/");

WebResponse response =webConversation.getResponse(request);

要在请求中加上參數,可以使用setParamter()方法,例如:

request.setParameter("username","taobaoge");

测试3:取得表格信息

 

您可以从WebResponse中取得相关的HTML信息,假设网页中有如下这样的一个表格:

书籍名称

设计模式(Design Pattern)

软件版本

书籍版次

第二版

修改时间

2004/12/26

 

下面的程序演示如何取得表格相关信息进行测试:

WebConversation webConversation = new WebConversation();

WebResponse response = webConversation.getResponse("http://localhost:8080/httpUnit/tableTest.jsp");

WebTable webTable = response.getTables()[0];  //getForms()[0]

assertEquals(2, webTable.getColumnCount());

TableCell cell = webTable.getTableCell(2, 0);

assertEquals("书籍版次", cell.getText());

测试4:跟随超链接

网页中有很多的超链接,我们可以使用HttpUnit来模拟超链接的点击,例如网页中如果有个超链接如下:

<a href="httpUnitABC.jsp">HttpUnit ABC</a>

则可以使用下面的程序来吵到链接,然后模拟一个click动作来跟随这个超链接:

WebConversation webConversation = new WebConversation();

WebResponse response = webConversation.getResponse("http://localhost:8080/httpUnit/");

WebLink link = response.getLinkWith("HttpUnit ABC");

WebRequest clickRequest = link.getRequest();

WebResponse linkPage =webConversation.getResponse(clickRequest);

测试5:测试Cookie

如果被测试的网页需要Cookie信息,您可以使用WebConversationaddCookie()方法发送Cookie信息

给网页,例如:

WebConversation webConversation = new WebConversation();

webConversation.addCookie("user", "taobaoge");

WebResponse response = webConversation.getResponse("http://localhost:8080/httpUnit/");

如果网页中包含了Cookie,您可以使用getCookieValue()方法取得网页中包含的Cookie信息,若网页包括下面的Scriptlet

<%

Cookie cookie = new Cookie("customerId", "12345");

response.addCookie(cookie);

%>

可使用下面的方式來测试传回的Cookie信息:

assertEquals("taobaoge",webConversation.getCookieValue("user"));

测试6Authorization

如果您的网页中有预设的HTTP基本验证,则可以使用WebConversationsetAuthorization ()方法來设定验证信息,例如:

webConversation.setAuthorization("justin", "123456");

测试7:设定代理

有的時候,您测试的目的网页可能必须通过代理服务器才能连上,你可以通过设定系统属性来设定HttpUnit使用代理,例如:

System.getProperties().put("proxySet", "true");

System.getProperties().put("proxyHost", "proxy.ntu.edu.tw");

System.getProperties().put("proxyPort", "8080");

如此之來,HttpUnit就會通过指定的代理服务器來发送请求与接受相应。

 

TDD   Test Driven Development

TFD    Test First Development

 

Antjunit结合测试:

建议直接将JUnitjunit.jar直接放置在Antlib目录下,并记得改变原先有关junitClasspath的路径,

例如:重新指向%ANT_HOME%/lib/junit.jar(假设已经设置了ANT_HOME

Ant使用<junit>标签来设置junit测试。实例 printsummary会将测试结果简单地显示出来)

自动生成测试报告:

加入<formatter>标志设置即可

<target   >

  <junit  printsumary="yes">

    <formatter type="plain"  usefile="false" />

    <test    />

    <classpath    />

  <junit>

</target>

usefile属性设置为true时,会自动将结果保存到文件中,默认为TEST-*.txt*为测试案例类名称

 

<formatter type="XML"  usefile="false" />    将测试结果保存到report目录中,文件名称为  .xml

 

<junitreport>标签使用XSLTXML文件转换为HTML文件:

<target name="report" depends="test">

<junitreport  todir="${report.dir}">

<fileset dir="${report.dir}">

<include name="TEST-*.xml" />

</fileset>

<report format="frames" todir="${report.dir}/html" />

</junitreport >

</target>

<include>设置搜寻TEST-*.xml文件,将之转换为HTML文件,而结果保存在report/html目录下

format="frames" 表示HTML报告文件有边框

 

单元测试与Java Team开发的结合:
Java
下的team开发,一般采用cvs(版本控制) + ant(项目管理) + junit(单元测试、集成测试)的模式:
每天早上上班,每个开发人员从 cvs server 获取一个整个项目的工作拷贝。
拿到自己的任务,先用 junit 写今天的任务的测试代码。
然后写今天任务的代码,运行测试(单元测试),直到测试通过。
任务完成在下班前一两个小时,各个开发人员把任务提交到cvs server
然后由主管对整个项目运行自动测试(集成测试),哪个测试出错,就找相关人员修改,直到所有测试通过。

定义变量时指定的初始值和初始化中指定的初始值,与它们在源程序中的排列顺序相同


 

Int a = 5 ;

Int b = 6 ;

If (a>4 || b++>10)   //不会执行b++

If(a>4 | b++>10)           //尽管已经得到true了,但还会执行b++,不短路   

 

 

可变参数只能放在参数列表的最后;

位于变量类型和变量名之间,前后有无空格都无所谓;

在方法体中以数组的方式访问可变参数。

内部类给我们的最大的好处就是,能非常方便地访问到外部类的成员。

DEMO3

如果仅仅是为了数据存储,用普通数组是比较适合的,但是如果为了频繁查询的目的,HashMap是必然的选择。

 

普通数组查询例子

哈希表查询例子

Hashmap用法

 

for(int i=0;i<10000000;i++ ){

    System.arraycopy(oldArray,100,newArray,0,120);

   }

JDK6中,也为Arrays类新增了数组复制的copyOf()方法

Arrays.copyOf

只要是实现Collection接口的对象,都可以使用J2SE5.0以后增强的for循环功能

垃圾回收器只知道释放那些经由new 分配的内存

c#有析构方法

mysql数据库引擎:memory (数据存储在内存)

 

php mysql 缓存技术:       5.13. MySQL查询高速缓冲

   基本的缓存是用PHP的两个函数serialize()unserialize()(译注:这二个函数分别代表序列化与反序列化)

   php+mysql缓存技术的实现

 

SELECT SQL_CACHE id, name FROM customer;

SELECT SQL_NO_CACHE id, name FROM customer;

 

 

sqlserver 缓存技术:  

注意     DBCC   PINTABLE   可以提供性能改进,但是使用时务必小心。如果驻留大表,则该表在开始时会使用一大部分高速缓存,而不为系统中的其它表保留足够的高速缓存。如果所驻留的表 比高速缓存大,则该表会填满整个高速缓存。sysadmin   固定服务器角色的某个成员必须关闭而后重新启动   SQL   Server,然后使表不驻留。驻留太多的表和驻留比高速缓存大的表会产生同样的问题。 

 

oracle缓存技术:

oracle里,建table的时候,可以用带cache 的命令,把表放在buffter cache 里,在查询该表的时候就可以直接从buffer cache里读取,而不需要再从磁盘里读,从而加快查询的速度。   

使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
 Where Status='B'

sqlserver调用全文索引

select top 1000 * from news where contains(title ,'"*M*"')

普通查询

select top 1000 * from news where title like '%M%'

 

mysql调用全文索引

CREATE TABLE articles (
  -> 
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  -> 
title VARCHAR(200),
  -> 
body TEXT,
  -> 
FULLTEXT (title,body)
  -> );

SELECT * FROM articles
  ->     WHERE MATCH (title,body) AGAINST ('database');

 

//全文索引在 MySQL 中是一个FULLTEXT类型索引。FULLTEXT索引用于MyISAM表,可以在CREATE TABLE时或之后使用ALTER TABLECREATE INDEXCHARVARCHARTEXT列上创建。

将数据装载到一个已经有FULLTEXT索引的表中,将是非常慢的。

 

 

java –mx1024m MemoryTest

这种异常好像只有JAVA

程序不应该把底层的异常传到用户界面,原因如下二:

  不想看到,没任何帮助,不友好

  暴露出来 来安全

 

程序应该先捕获原始的异常,然后抛出一个新的业务异常,新的业务异常中包含了用户的提示信息,这种处理方式被称为异常转译

 

Exception异常对象的捕捉编写在最后,以便捕捉到所有你所尚没考虑到的的异常

如果 fault,则会发生java.lang.AssertionError异常

测试运行程序将不运行这些测试,但是它会指出这些测试被跳过了。

 

但是一定要小心。最初编写这些测试可能有一定的原因。如果永远忽略这些测试,那么它们期望测试的代码可能会中断,并且这样的中断可能不能被检测到。忽略测试只是一个权宜之计,不是任何问题的真正解决方案。

 

 

 

 

 

Java语言规定标识符是以字母、下划线"_"或美元符号"$"开始,随后可跟数字、字母、下划线或美元符号的字符序列。

 

 

import java.util.*   [W1] 

静态导入 import static   导入指定类的单个静态属性或全部静态属性

 

loop:

...for()..

break loop;

 

42.3 % 10  [W2] 

-×××%××× [W3] 

10%10 [W4] 

 

数组定义:[W5] 

int intergerexample[10] ;

float floatSample[] = new float[10] ;

int []trueJava = new int[3] ;

int []intergerexample = {1,2,3,4} ;

 

为多维数组分配内存时,只需要为第一维指定大小和分配内存(与C语言相反),而其余维可以单独分配[W6] 

 

int[][][] a1 = new int[2][2][4];

int[][][] a2 = new int[2][][];

创建数组,对各种元素的默认赋值

boolean: false

byte: 0

char: '/u000'

short: 0

int: 0

long: 0L

float: 0.0f;

double: 0.0(D)

 

复制数组的方法:

1.for()遍历 [W7] 

2.System.arraycopy(arr1,0,arr2,0,arr1.length)

3.JDK6中,也为Arrays类新增了数组复制的copyOf()方法

Array.asList()此方法用于输出数组中的所有数 [W8] 

使用Arrays.binarySearch()执行快速查找。 [W9]  SE6新增功能

Arrays.copyOf()用法,这个方法是将原数组快速复制成一个新数组。如果新数组的长度小于旧数组的长度,将截取一部分旧数组中的元素,复制给新数组,反之,如果大于旧数组的长度,则将以0null,或false给予补充。

实例1       实例2

Arrays.copyOfRange()用法,这个方法与前面介绍的Arrays.copyOf()的用法相似 [W10] 

 

deepEquals deepToString实例

 

二分法查找 算法 DEMO

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------

排序数组:

选择排序,昌泡排序,快速排序[W11] 

 

韩顺平分类:  DEMO

内部排序【交换式排序法(昌泡排序Bubble Sort,快速排序Quick Sort),选择式排序法(选择排序,堆排序),插入式排序法(插入排序,谢耳排序,二叉树排序)】

外部排序【合并排序法,直接合并排序法】

 

一般数据处理工作25%的时间都在进行排序

 

 

对象:

student astudent = new student();

student bstudent;

...

bstudent = astudent;  [W12] 

 

 

 

switch()

case [W13] 

..

defalut [W14] 

 


不应该这样写,安全性问题

等于2.3

等于负数

0

 

JAVA把它们当作对象来实现;

PHPjsscript 等可以是不同类型的,但JAVA数组只是由若干个不同类型的变量组成

 

arr[0].lengh  //该行拥有的元素

arr.lengh    //拥有的行数

 

int intergerexample[][] = new int [3][];

intergerexample[0] = new  int[4];

//数组不赋值是默认:0 flase

for(int element:arr)    //数组arr[]

System.out.println(Arrays.asList(A));

Arrays.deepToString() 了将多维数组转换为字符串而设计的

 

Arrays.sort(a);

int index1 = Arrays.binarySearch(a, "f");

注意:不要对未排序的数组使用binarySearch();   二元搜索,

而一般用的是线性搜索,二元搜索要快得多

b = Arrays.copyOfRange(a, 2, 4);

 

最好的,但不稳定

如:java.lang.arrays类的sort方法

astudent ,bstudent引用相同的对象,但两变量没有关系

case 后可以是''字符,但不可以是""字符串

defalut 可以放到case 的前面

 

 

 

 

 

 

 

数据类型(都不支持无符号整数,但C语言.net支持)

 

PHP

JAVA

整数类型

 

interger  //可以八进制,十六进制

 

字节型  byte占位:8 [W1] 

短整型  short 占位:16 2字节

整型    int   占位:32 4字节

长整型  long  占位:64 [W2] 8字节

浮点类型

浮点型:float

倍浮点型:double

单精度浮点型  float 占位:32

双精度浮点型  double 占位:6[W3] 4

字符类型

 

Character

字符型  char  占位:16 [W4] 

StringBuilder

StringBuffer

字符串类型

string

字符串 string  " " [W5]  作为一个对象

布尔类型

boolean

布尔型 boolean 占位:8

 

数组  array

对象  object

资源  resource

NULL

数组s

对象

JAVA值的存储范围测试

 

 

 

 

 

 

表达式的数据类型自动提升:

1.所有的byte型,short型和char的值将被提升到int型;

2.如果一个操作数是long型,计算结果就是long型;

3. 如果一个操作数是float型,计算结果就是float

4. 如果一个操作数是double型,计算结果就是double

 

 

 

javasrcipt 支持4种数据类型:

对象(object)  数字(number)  字符串(string)  布尔值(boolean)

 

 

注释

JAVA

// 单行C++风格

/*   */  多行C风格

/**  */   [W6] 

PHP

//

/*   */

#   单行shell风格(Pell

Javasrcipt

// [W7] 

/*   */

Html

<!--  -->

CSS

/* */

jsp

输出注释       隐藏注释

<!--  -->             <%--         --%>

<%@ page info="this is a page" %>

<%=getServletInfo()%>

.net

<%--         --%>

 

 

toString方法转换成String类型

String x = "a" + 4 + "c";编译时等效于:

String x = new StringBuffer().append("a").append(4).append("c");

 

String s1 = "hello";       String s2 = "hello";  两个指向同一个对象

String s1 = new String("Hello");   String s2 = new String("Hello");           不是指向同一个对象

 

 

for(int i=0;i<100;i++)

{

builder.append(i);   //效率比string

}

StringBuilder类:单机非线程,没有处理同步问题,1.5后的新增类

StringBuffer类:多线程下用 [W8] 

//方法有:

append();

insert();

reverse();

replace();

setCharAt();

Capacity();  //返回的是字符串缓冲区的容量

setLength();

 


 

字节型  -128~127

短整型  -32768~32767

整型    -2147483648~2147483647

长整型 

 

byteshort混合运算,结果会是int类型

123L

默认为double,因为定义float要在数据后面加F,而double不用

float a;

a = 1.3;

这是不对的,因为高精度的不能赋给低精度的,1.3默认为double

应该改为 a = 1.3f;

C语言8的,因为JAVA使用Unicode来表示字符,是全世界很多字符集的组合

string a = "abcd";   //jvm首先会在strings pool中通过equels 方法查找对象池中是否存放该String对象,如有,则返回已有的String对象给用户,如没有,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。

string a = new string("abcd");   //jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。jvm不会主动把该对象放到strings pool里面的,除非程序调用 Stringintern方法

 

String str1 = new String("abc");      //jvm 在堆上创建一个String对象 

Stirng str2 = "abc";   //jvm strings pool中找不到值为“abc”的字符串,因此在堆上创建一个String对象,并将该对象的引用加入至strings pool  此时堆上有两个String对象 

String str3 = "abc";

 //此时,jvm发现strings pool中已有“abc”对象了,因为“abc”equels “abc” 因此直接返回str2指向的对象给str3,也就是说str2str3是指向同一个对象的引用

/**  */  文档注释

允许使用javadoc实用工具程序来提取文档注释信息,并放到一个HTML

文件中

JavaScript还能识别HTML注释的开始部分"<!--"JavaScript会将其看作为单行注释结束,如使用"//"一样。但JavaScript不能识别HTML注释的结果部分"-->"

JavaScript中,如果第一行以"<!--"开始,最后一行以"-->"结束,那么其间的程序就包含在一个完整的HTML注释中,会被不支持JavaScript的浏览器忽略掉,不能被显示。如果第一行以"<!--"开始,最后一行以"//-->"结束,JavaScript会将两行都忽略掉,而不会忽略这两行之间的部分。用这种方式可以针对那些无法理解JavaScript的浏览器而隐藏代码,而对那些可以理解JavaScript的浏览器则不必隐藏。

此类中的一些方法是同步的,当运行多线程时,确保类中的内容不被破坏

StringBuffer( ); /*分配16个字符的缓冲区*/ 

StringBuffer( int len ); /*分配len个字符的缓冲区*/ 

StringBuffer( String s ); /*除了按照s的大小分配空间外,再分配16 字符的缓冲区*/ 

 

 

 

 

原创粉丝点击