黑马程序员_高薪技术_7

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

第一点:包名的命名习惯,前面是公司的域名,后面是功能。Egcn.itcast.day1

第二点:高版本的Java能运行低版本的Javac,低版本的Java不能运行高版本的javac

第三点:在eclipse中配置java模版代码。配置地址是 windows - Preferences - Java - Editor- Template

第四点:导入Jar包。Jar包里面有好多Class文件。Jar库里面可以包含多个Jar包。

第五点:import 语句可以导入一个类或某个包中的所有类。

Import static 语句可以导入一个类中的某个静态方法或者全部静态方法。这种方法叫做静态导入。

    第六点:可变参数:注意点a、只能出现在参数列表的最后;b...位于变量类型和变量名之间,前后有无空格都可以;c、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。下面是演示:

import static java.lang.Math.*;
public class VariableParemetersDemo {
public static void main(String[] args) {
	System.out.println(compare(1, 2, 3, 4, 5));
	System.out.println(compare(1, 2, 3, 4, 5, 8));
}

public static int compare(int... list) {
	int max = list[0];
	for (int i = 0; i < list.length; i++) 
		max = max(max, list[i]);
	return max;
}

}

第七点:自动打包和解包。 Int 类型的变量可以自动打包变成 Integer 类型。 Integer 类型的可以自动解包成为 int 类型的。需要注意的是 : Integer i1 = 13 ;  Integer i2 = 13 ;  i1 == i2 ----->true Integer i1 = 1311 ;  Integer i2 = 1311 ;  i1 == i2 ----->false 。在一个字节( -128---127 )内的就会封装成一个引用。这是享元设计模式。

第八点:享元模式:它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件。它适合用于大量物件只是重复而导致无法令人接受的使用大量内存。

第九点:枚举enum。枚举是指变量的值一一列出来,变量的值只限于列举出来的值的范围内。下面是一种比较复杂的枚举运用:

public class EnumDemo {

public static void main(String[] args) {
	System.out.println(TrafficLight.GREEN);
	System.out.println(TrafficLight.GREEN.getTime());
	System.out.println(TrafficLight.RED.name());
	System.out.println(TrafficLight.RED.ordinal());
	System.out.println(TrafficLight.valueOf("GREEN"));
}

}
enum TrafficLight{
GREEN(20) {
	@Override
	public TrafficLight nextLight() {
		// TODO Auto-generated method stub
		return YELLOW;
	}
},YELLOW(3) {
	@Override
	public TrafficLight nextLight() {
		// TODO Auto-generated method stub
		return RED;
	}
},RED(5) {
	@Override
	public TrafficLight nextLight() {
		// TODO Auto-generated method stub
		return GREEN;
	}
};
private int time;
private TrafficLight(int time){
	this.time = time;
}

public int getTime() {
	return time;
}
abstract public TrafficLight nextLight();

}

需要注意的是,枚举在前面列举出来全部的对象,这些对象是枚举类型的对象。可以有抽象方法。同样也可以有构造方法。如果枚举只有一个成员的时候,就可以作为单例设计方式。

第十点:反射。反射就是把Java类中的各种成分映射到相应的类。反射要用到一个类,就是Class类。Class类描述的是,Java程序中的各个Java类,他们是否属于同一类事物,是不是用一个类来描述,这个类就是ClassClass的对象是字节码。如Person.class 或者 person.getClass()Class类中常用的方法有isPrimitive()是否是原始类型。原始类型指的是int, double, boolean 等。Integer.TYPE就是代表原始类型的字节码。即int.class == Integer.TYPE。数组类型的Class实例对象可以用isArray()来判断。总之在源程序中出现的类型,都有对应的Class实例对象。

反射中常用到的类有Constructor,代表某个类中的一个构造方法;Field 类代表类中的一个成员变量。 Method 类代表某个类中的方法。下面是获取各个类对象的演示。

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassDemo {
public static void main(String[] args) throws Exception{
	Class clazz = Class.forName("it.cast.day3.DemoClassByPerson");
	System.out.println("------- constructors start -----------");
	Constructor[] constructors = clazz.getConstructors();
	for (Constructor constructor : constructors) {
		StringBuilder sb = new StringBuilder();
		sb.append(constructor.getName());
		sb.append('(');
		Class[] classes = constructor.getParameterTypes();
		for (Class class1 : classes) {
			if (classes.length != 0) {
				sb.append(class1.getName());
				sb.append(",");
			}
		}
		if(classes.length != 0)
			sb.deleteCharAt(sb.length() - 1);
		sb.append(')');
		System.out.println(sb);
	}	

	System.out.println("------- Field start -----------");
	Field field = clazz.getDeclaredField("age");
	System.out.println(field.getName());

	System.out.println("------- Method start -----------");
	DemoClassByPerson person = (DemoClassByPerson)clazz.newInstance();
	Method method1 = clazz.getDeclaredMethod("setAge", int.class);
	method1.invoke(person, 20);
	Method method2 = clazz.getDeclaredMethod("setName", String.class);
	method2.invoke(person, "lailongwei");
	System.out.println(person);

}
}
class DemoClassByPerson {
int age;
String name;
public DemoClassByPerson() {
	age = 0;
	name = "";
}

public DemoClassByPerson(int age, String name) {
	this.age = age;
	this.name = name;

}

public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}

@Override
public String toString() {
	// TODO Auto-generated method stub
	return "Person [" + name + " : " + age + "]";
}
}

 

第十一点:内存泄漏,内存泄漏:动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。

JAVA中的内存泄漏:当一个对象被存储进Hash表中后,修改那些参与计算哈希值的字段,就会照成内存泄漏。下面是内存泄漏的演示:

import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashSet;

public class RamOutCon {
public static void main(String[] args) throws Exception{
	Collection<Person> coll = new HashSet<>();
	Person person1 = new Person(22, "lailongwei");
	Person person2 = new Person(22, "lailong");
	coll.add(person1);
	coll.add(person2);
	Method method = person1.getClass().getMethod("setAge", int.class);
	method.invoke(person1, 21);
	method.invoke(person2, 21);

	System.out.println(coll.contains(person1));
	coll.remove(person1);
	System.out.println(coll.size());

}
}
class Person {
int age;
String name;
public Person(int age, String name) {
	this.age = age;
	this.name = name;
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + age;
	result = prime * result + ((name == null) ? 0 : name.hashCode());
	return result;
}
@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Person other = (Person) obj;
	if (age != other.age)
		return false;
	if (name == null) {
		if (other.name != null)
			return false;
	} else if (!name.equals(other.name))
		return false;
	return true;

}


public int getAge() {
	return age;
}

 
public void setAge(int age) {
	this.age = age;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

}

 

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值