JavaSE (二)
this关键字
当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。
用法:对当前对象的默认引用 调用自己的的构造方法。
用在构造方法内部,区分同名的成员变量和局部变量;
this(name.age);调用构造方法,减少代码冗余;
可用于调用成员属性和成员方法(调用方法时可以省略)。
public class TestClass
{
int x,y;
void testShow(int x,int y){
this.x=x; //this.x 就是我们上 int x,y;中的x 。=x是我们传来的x
this.y=y;
}
}
继承中 this 和 super:
假如父类中有一个方法是 add()
子类没有重写父类的方法,super.add() 和this.add() 都是调的父类的方法, 没什么区别,如果重写了this.add()就默认调本类的方法,super就默认调父类的方法。
再在子类中,都不写的话,如果有重写父类的add()方法的话就默认调本类的add()方法, 如果本类没有重写就调父类的方法。
static关键字:
用法: 修饰成员变量,表示静态变量(类变量),可以被更改,所有实例对象共享;
修饰方法,表示静态方法(类方法);
可用类或实例对象调用,一般只用类调用。
static定义的属性一旦被某一个实例化对象更改,则其余对象调用的为更改后的值;
static修饰的变量一旦写入便生成空间,默认值为0,其他对象只有实例化后才被分配空间。
类的加载和对象实例化:
构造方法:创建类的对象时定义的初始化状态,无返回值,不能用void修饰,命名必须和类名相同。
不能被直接调用,只能在new运算符在创建对象时被自动调用,在定义一个类时,java编译器会自动生成一个无参构造函数。
普通方法:命名可以和构造方法相同,但必须带返回值,在程序执行到它时被调用。
public class Demo4 {
public static void main(String[]args){
System.out.println(A.instance.num2);
System.out.println(new A(1).num2);
}
}
class A{
static A instance=new A(1);
static int num1=5;
int num2;
A(int num3){
num2=num1-num3;
}
}
//用第一种方法调用时,A与num2均先开辟空间,在执行newA(1)时,5还未赋值给num1;
//执行后num1赋值为5;
//num1默认值为0.0-1=-1;
//用第二种方法调用时,先实例化了一个A对象,此时,num1=5,5-1=4.
静态块:
public class Test {
public Test() {// 构造方法
System.out.println("我是构造方法,创建对象的时候我会执行,我执行完,对象就造出来了");
}
static {
System.out.println("我是静态块,类加载的时候我就执行了,而且只执行这一次");
}
}
然后这样:
new Test();
new Test();
当创建Test类的一个对象的时候,比如new Test() ,是这样,首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个类在第一次被使用的时候会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!
对象的实例化:
创建对象:Student stu1 = new Student();
实例对象:Student stu2 = new Student("张三",21,"男");
可以看出实例对象调用了Student类的构造方法,为创建的对象赋了值,
而创建对象只是创建了一个对象。
程序阅读训练:
new A类.B方法(); 实例化一个对象并调用B方法
实例方法可调用静态方法或静态变量;
静态方法不可调用实例方法;
静态方法中不能有非静态的方法或变量。
继承:
在Java 术语学中,被继承的类叫超类(superclass ),继承超类的类叫子类(subclass )。子类是超类的一个专门用途的版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素。
语法:单根继承(接口可实现多继承),一个子类只能继承一个类,一个类可以有多个子类。
super:在子类中通过super调用父类的属性和行为;
super表示父类对象。
class Fu{
}
class Zi extends Fu{
}
子类不能继承父类的显式定义的构造方法,若想要继承父类的构造方法,需要通过覆盖该构造方法,并在方法中通过super调用父类的该构造方法的方式来继承。
继承的三种情况说明:
1、父类中没有显式定义任何构造方法,此时父类中实际有一个默认的无参数构造方法。这时,在子类中显式定义任何构造方法时,可以不用使用super调用父类的默认方法。
2、父类中显式定义了默认的无参数构造方法,那么子类可以定义任意的构造方法,而不必使用super调用父类的构造方法
3、父类中显示定义了构造方法,却没有显示定义默认的无参数构造方法,那么子类定义任何构造方法中都需要通过super调用父类的构造方法
import和package:
包名写法规范:域名倒置 即 公司名.项目名.模块名.子模块名...
语法---打包命令
javac-d.Table.java
package oop3
package oop2
a.通过全类名引用
oop2.类名+实例化对象=new oop2.类名();
b.直接导包
import+包名.类名;
import+包名.*;表示导入与此包中相关的所有类。
Java.lang 包:
是Java语言的核心类库,包括了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。
访问修饰符:
为了程序的安全,需要访问修饰符
a. public:同一类,同一包中的子类,不同包的子类,其他包的类均可访问。
b.protected:同一类,同一包的子类,不同包中的子类
c.default:默认(可省)同一类或同一包中的类可访问。
方法的重写:
方法的重写也称为方法的覆盖(override),对于某一个子类而言,他的方法与其父类的方法内容不尽相同。
条件:方法名称相同,参数特征完全相同,返回值类型相同;
访问修饰符范围不能缩小;
子类重写父类方法,没有继承,则不存在重写;
子类方法不能抛出比父类更大的异常。
public class TestStaticMethodExtends {
public static void main(String[] args) {
A a = new B(); //父类类型指向子类对象。
a.p(); //调用子类p方法。
}
}
class A {
public static void p() {
System.out.println("基类");
}
}
class B extends A {
public static void p() {
System.out.println("子类");
}
}
程序绑定:
概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定
动态绑定:在运行时根据具体对象的类型进行绑定。
栈区 | 方法栈 | 堆区 |
动态绑定的过程:
虚拟机提取对象的实际类型的方法表;
虚拟机搜索方法签名;
调用方法。
父类类型指向子类对象:
Animal a=new Animal();
Tiger t=new Tiger();
Animal a2=new Tiger();
Tiger t=new Animal(); //错误写法,不能使子类对象指向父类实例
引用对象 实例化对象
a | ------------------> | new Animal() |
t | ------------------> | new Tiger() |
a2 | ------------------> | new Tiger() |
实例代码(来源网络):
public class Father {
public void method() {
System.out.println("父类方法,对象类型:" + this.getClass());
}
}
public class Son extends Father {
public static void main(String[] args) {
Father sample = new Son();//向上转型
sample.method();
}
}
声明的是父类的引用,但是执行的过程中调用的是子类的对象,程序首先寻找子类对象的method方法,但是没有找到,于是向上转型去父类寻找静态绑定:
概念及用法:
在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。
针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定在处理java类中的成员变量时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类的属性。
Java当中只有final(无子类),static,private和构造方法是静态绑定。
示例代码(来源网络)
public class Father {
protected String name="父亲属性";
public void method() {
System.out.println("父类方法,对象类型:" + this.getClass());
}
}
public class Son extends Father {
protected String name="儿子属性";
public void method() {
System.out.println("子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();//向上转型
System.out.println("调用的成员:"+sample.name);
}
}
结论,调用的成员为父亲的属性。
toString和instance of:
一切对象皆Object类。
public class A extends Object{}
Object中的toString()方法:
Object中的toString()方法返回一个字符串,该字符串由类名(对象为该类的一个实例)、“@标识符”和此对象的哈希码的十六进制表示组成。
Object类中的toString()方法是打印类命和内存地址的。
比如String类就重写了Object的toString()方法.
如果一个object类里的成员有
String str;
float a;
int b;
String tostr;
tostr = new Object().str;这样才是得到Object类的str的值
但是Object是没有这个属性的.当你要得到一个类中的一个非static类型的属性的时候,你要得到它的值可以用
new 类名().属性名 来得到。
用System.out.println()输出一个对象的时候,java默认调用对象的toString()方法
一般要覆盖这个方法,这样根据覆盖逻辑就可以输出自己的对象
比如定义一个类User,有id,name属性,你直接输出一个user对象的话
System.out.println(user),得到的只是
全限定名@地址首地址
如果在User类里面覆盖这个toString方法的话就能输出你要的
比如
public String toString(){
return "user name is:"+this.name+";"+"user id is:"+this.id;
}
这样你输出一个user对象就是
User user = new User(1,"zhangshan");
System.out.println(user);
得到:user name is :zhangshan;user id is: 1;
instanceof 关键字:
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
A instanceof B 表示A是B的一个实例对象。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
final关键字:
用法:
当某个类不想被继承时
当某个方法不想被重写时
当某个变量值不想被更改时给final修饰的变量赋值:定义时赋值;初始化块;构造方法。
final String STR=“hello”;
public final void hello(){
}
static final String STR =“hello”; 静态字符串变量,避免每个实例对象都有一份相同的STR值造成的空间浪费。
类变量被final修饰,为宏变量,程序中用到的“Hello”值全部用STR替换。
命名规范与注释:
类和接口:首字母大写(第一个可以小写)
变量和方法:首字母小写,后面每个单词首字母大写,以字母、下划线或$开头。
包:全小写,域名倒置。
常量:全大写,多个单词之间用下划线“—”相连。
final int AGE;
对象与内存控制:
类的加载顺序:
a.父类静态代码块;
b.子类静态代码块;
c.父类非静态代码块;
d.父类构造函数;
e.子类非静态代码块;
f.子类构造函数; 某一个类初次被加载时,静态块会先执行。
例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
访问子类对象的实例变量:
private int i=22; 先给i分配空间,后赋值为22.
调用被子类重写的方法:
在子类中,用super调用父类的属性和方法。
调用父类无参构造函数:super()
调用父类有参构造函数:super(父类构造方法的参数)
super 为其父类
super.toString() 为调用其父类的toString方法;
static class Parent {
//父类方法
void who() {
System.out.println("I'm parent");
}
}
static class Child extends Parent {
//子类重写方法
@Override
void who() {
System.out.println("I'm child");
}
//通过supper调用父类方法
void parentWho(){
super.who();
}
}
public static void main(String[] args) {
Child child = new Child();
Parent parent = new Parent();
parent.who(); 结果: I'm parent
child.who(); I'm child
child.parentWho(); I'm parent
}
抽象类:
若一个方法无方法主体,在public后有abstract修饰,则该方法是抽象方法,有抽象方法的类称为抽象类。
抽象类不能直接用new实例化。但可以实例化实现了的子类,用父类引用指向子类实例
子类必须继承父类的所有方法,否则子类也是抽象的。
某个类为抽象类,但其中可以无抽象方法。
多态:
对象的向上转型和向下转型:
Tiger t=new Tiger(); 实例化一个Tiger类型t
Animal a=t ; 子类类型实例赋给父类类型对象 即向上转型
子类可以重写父类中的方法,向上转型时,由于子类已经扩充了父类的方法,父类调用的父类的方法已被子类重写,这样 间接的也扩充了父类的功能。
Animal a= new Tiger();父类类型(引用)指向子类对象
Tiger t=(Tiger) a; 子类对象 t 强转Tiger类赋给子类变量 即向下转型,使类型更明确
子类自己的方法无法用继从父类承来的类的实例对象调用,需实例一个子类自己的对象t来调用。
t.eat(); 调用子类特有的方法
向下转型可以调用父类没有定义,但子类实现的方法
比如父类有a()方法,子类重写了a()方法,而且额外添加了一个b()方法,父类中没有b方法
那么要调用子类的b方法,必须将父类变量向下转型为子类才可以调用b方法
A a=new B();
B b1=(B)a; a.fun1(); a.fun2(); b1.fun3(); 子类调用从父类继承的方法,利用多态可以直接调用。而fun3是子类自己的方法,使用父类定义的对象是没有办法调用的,所以必须 B b1=(B)a;转换定义类型来进行调用。 |
多态概念:父类的某一种类型在不同子类中表现出不同的形态。
Animal animal=new Monkey();
animal.sleep();
Animal animal=new Tiger();
animal.sleep();
多态的体现:
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的对象
多态的前提 :
必须是类与类之间只有关系,要么继承或实现
通常还有一个前提,存在覆盖
多态的好处:
多态的出现提高了程序的扩展性
多态的弊端 :
只能使用父类的引用访问父类的成员
接口:
使用规则:关键字+接口名称
接口中的所有变量属性为常量。public static final ,可省
接口中定义的全部方法为抽象方法。public abstract,可省
interface transfer Data(object data);
void charge();//电流传输
String STR="hello"; //实现USB功能
接口是最高的抽象,,其包含的所有方法都是抽象方法。
在java中,单根继承,但可多实现。
a,接口继承接口
public interface InterfaceA extends InterfaceB { }
接口继承接口可以不实现父接口中的方法,可以声明自己的新方法;
b, 类继承(实现)接口
public class MiChong implments Usb{ }
java类可以一次继承多个接口,用implements 接口1,接口2;
类实现接口时,一定要实现接口中声明的方法,如果接口中没有定义抽象方法则不需要,但是要注意,类实现了一个接口A,如
果B是A的父接口,且B中有抽象方法,则该类必须实现A和B中的所有抽象方法;
抽象方法只能定义在抽象类中,抽象类实现接口,可以不实现接口中的抽象方法。
c,继承加实现
public class KingSD extends A implement Usb,Istore{ }
集合概述:
父接口 Collection
子接口: List 列表 Set
ArrayList:
List接口中的一个实现类。
java.util→Collection→List→ArrayList→add(E,O)
接口 实现类 一个方法
------------------------------ |
------------------------------- |
------------------------------- |
------------------------------- |
------------------------------- |
实质为数组形式 ,便于查找元素。
LinkedList:
List接口中另一个实现类 List→LinkedList
实质为链表,链表结构的集合类,便于修改增删频繁的情况
泛型初步:
用途:
List personList=new ArrayList();
personList.add(person); add中参数为Object类型,可以add任何一个对象
personList.add(tiger);系统会默认为集合中全为person类 List<Person> personList=new ArrayList<erson>()//泛型,此时返回值是Person类型
而不是Object类型
personList.add(person1);
personList.add(tiger);//编译报错 泛型将运行时风险转变成为编译期异常。
泛型语法定义:
public class Person<T>{ //Person类中全为T证件
private String pname;
private T card;//证件
}
Set接口:
HashSet为Set的一个实现类。
Set不是线性结构,是以map方式存储。Set中元素按其哈希码存储,每个元素有其固定位置,不可有重复元素。
Set中无get[i]方法。
package set; import java.util.HashSet;
import java.util.Set; public class Demo01 {
public static void main(String[]args){
Set<String> set=new HashSet<String>();//创建一个参数为字符串的容器
set.add("ton");
set.add("lina");//
System.out.println(set.size());
/*下来进行其元素的迭代*/
/*for(int i=0;i<set.size();i++){
set.get(i);在Set中无get这个方法
}*/
//第一种迭代,增强for循环
for(String str:set){
System.out.println(str); }
//第二种迭代,转换成数组形式
Object[]objArr=set.toArray();
for(int i=0;i<objArr.length;i++){
System.out.println(objArr[i]);
}
}//第三种迭代:迭代器Iterator }
hashcode和equals:
equal方法用于判断对象内容是否相同;hashcode判断对象放置的位置是否相同。
Iterator迭代器:
接口:Iterator<E>
主要方法:hasNext() 判断指向的下一个位置是否还有元素
next() 返回迭代的下一个元素
remove() 从迭代器指向的集合中移除元素
iterator() Iterator中方法的总称
package set; import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; public class Demo02 {
public static void main(String[]args){
String p1="猫";
String p2="狗";
String p3="兔子";
Set <String>set = new HashSet<String>();
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("----------------"); //Iterator
Iterator<String> itor = set.iterator();
while(itor.hasNext()){
String str = itor.next();
System.out.println(str); }
TreeSet:
当中的元素有序。
Comparable接口:
TreeSet具有排序能力。
如果其元素类型是String,则根据字母先后顺序排序。
如果是Integer,则按数字大小来排。
如果是用户自定义类型如Person,则须告诉集合你的排序规则。
Comparable 表示可排序,要表明Person是可排序的。
缺点:排序规则单一。
public class Person inplements Comparable<Person>{
//compareTO()
} //compareTO()方法
public int CompareTO(Person o){
if(this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}
return 0;
} //该规则按年龄升序排列。
TreeSet 具有排序功能,但若元素为自定义类,则需先实现接口Comparable并调用其compere To方法说明排序规则。
Comparator接口:
特点:有多种排序规则。
public class AgeDesc inplements Comparator<Person>{
public int Compare(Person o1,Person o2){
if(o1.age>o2.age){
return -1;
}else if(o1.age<o2.age){
return 1;
}
return 0;
} //此方法为按年龄降序排序 AgeDesc为年龄降序去实现Comparator接口。
}
使用时需要进行实例化
Comparator<Person> ageDesc=new AgeDesc();
Set<Person>persons = new TreeSet<Person>(ageDesc);
若要进行身高升序或其他排序方式,则重新定义一个身高升序的类去实现接口Comparator,用主函数(需实例化这个类)进行调用即可。
HashMap:
List:
ArrayList |
LinkedList |
Collection:
List |
Set |
Set:
HashSet |
TreeSet |
Map接口的一个实现类。Map(K,V )
Map接口的一些方法:
返回map中的值
TreeMap:
容器中元素有序排列。可以对key进行有序排列。
异常语法:
try-catch
try-catch-......catch
try-catch......final 无论是否发生异常 final中的内容都会执行
try-final
异常是程序执行过程中一种不正常的情况,通过try-catch语法对其处理,使程序继续向下运行。
异常语法中的一个类及其两个子类:Throwable
Exception(异常)<—RuntimeException<—ArithemeticException、Nullpointerexception... |
Error (系统严重错误) |
先捕获具体的异常,后捕获宽泛的异常。
package yichangyuf; public class Hello {
public static void main(String[]args){ try{
int num1 = 9; int num2 = 0;
@SuppressWarnings("unused")
int NUM = num1/num2;
}catch(ArithmeticException ex){
System.out.println("it's ok!"); } } }
throws:
在方法的定义时使用,表明该方法有危险,调用需谨慎。
则在调用的时候需要try-catch处理。
1、调用危险方法时,当场处理。
public class Hellooo{
public static void main(String[]args){
A a = new A();
//1、调用危险方法时,当场处理 try{
a.hello();
}catch (IOException ex){
ex.printStackTrace(); }
}
}
class A{
public void hello() throws IOException{
System.out.println();
}
}
2、调用危险方法时,将异常上抛给调用者
ublic class Hellooo{
public static void main(String[]args) throws IOException{
A a = new A();
//2、异常上抛给定义者
a.hello();
}
}
class A{
public void hello() throws IOException{
System.out.println();
}
}
throw:
public class Hellooo{
public static void main(String[]args) throws IOException{
B b = new B();
b.hello();
}
} class B{
public void hello(){
System.out.println("hello world!");
try{
throw new IOException();//在内部引爆了一个炸弹
}catch(Exception ex){ }
}
}
向上抛出更大的异常
class B{
public void hello() throws Exception{
System.out.println("hello world!");
//try{
throw new IOException();//在内部引爆了一个炸弹
//}catch(Exception ex){ }
}
自定义异常:
特定情况下的异常
class MyException extends Exception{
}
JavaSE (二)的更多相关文章
- JavaSE二次学习之标识符和编程命名相关的内容
前段时间阿里开源了<阿里巴巴 JAVA 开发手册>,里面详细叙述了有关编程命名.sql规约.工程规约等内容,作为一个初学者,只讨论一下-编程规约-的部分. 这几天又重新回去看了看JavaS ...
- JavaSE(二) 关键字、标识符、注释
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1关键字与标识符 1.1 java关键字的使用 定义:被Java语言赋予了特殊含义,用做专门用途的字符串 ...
- JavaSE 手写 Web 服务器(二)
原文地址:JavaSE 手写 Web 服务器(二) 博客地址:http://www.extlight.com 一.背景 在上一篇文章 <JavaSE 手写 Web 服务器(一)> 中介绍了 ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- 【012】JavaSE面试题(十二):多线程(2)
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [012] - JavaSE面试题(十二):多线程(2) 第1问:多线程的创建方式? 方式一:继承 ...
- [002] - JavaSE面试题(二):基本数据类型与访问修饰符
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)
想了半天,发现单独的封装和多态没什么好讲的,我们就简单说说Java里面对应的语法吧. 相关内容如下: 一.访问修饰符 二.getter/setter方法 三.构造方法 四.super和this 五.s ...
- JavaSE(十二)之IO流的字节流(一)
前面我们学习的了多线程,今天开始要学习IO流了,java中IO流的知识非常重要.但是其实并不难,因为他们都有固定的套路. 一.流的概念 流是个抽象的概念,是对输入输出设备的抽象,Java程序中 ...
- 零基础学习JavaSE(二)——基础语法
二.Java 基础语法 2.1 Java 基础语法 java是一个面向对象的程序语言,及可把一切事物当做对象处理,而java的事物中最小的就是class (类),类中有方法,类可以创建对象,并且有一些 ...
随机推荐
- linux对文件赋权限的命令chmod的详细说明
指令名称 : chmod使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案调 ...
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...
- POJ 1046
#include<iostream> using namespace std; #define MAXN 16 #define inf 100000000 struct node { in ...
- Matlab 基础
命令行(Command Line) 1. help 格式:help 命令 2. cd 配合 Tab 使用 pwd: print current working directory,打印当前工作路径 ...
- 剑指offer二十八之数组中出现次数超过一半的数字
一.题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 漫谈NIO(1)之计算机IO实现
1.前言 此系列将尽可能详细介绍断更博客半年以来个人的一个成长,主要是对Netty的源码的一个解读记录,将从整个计算机宏观IO体系上,到Java的原生NIO例子最后到Netty的源码解读.不求完全掌握 ...
- 《Android应用性能优化》1——代码
1.Java代码优化 1.1 代码执行 通常情况下,不必看应用的字节码.在平台是Android2.2(Froyo)和更高版本的情况下尤其如此,因在Android2.2中引入了实时(JIT)的编译器.D ...
- css !important的作用
css !important的作用是提高指定CSS样式规则的应用优先权. 注意:这个不是万能的,在神奇的IE6下仍然有问题,请参见:http://www.w3chtml.com/css3/rules/ ...
- jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
实现基本异步数据传输,略去与数据库交换,先直接在PHP端判断:用户名为 user1 即为不可用, 测试时外加了 普遍的 “Loading..." 功能,此功能可直接在PHP中循环延时 for ...
- 17.async 函数
async 函数 async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 ...