(JAVA自学笔记)静态导入
2013-01-10 14:03
323 查看
day:20130110
今天看的是张孝祥的视频。写的笔记在笔记本上,晚上我放上来。
我开始今天的学习记录。前面的几段视频我看过好多次,不再一一附上。按知识点写。
1. import语句可以导入一个类或某个包中的所有类。static import语句导入一个类中的某个静态方法或所有静态方法。
语法举例:使用求两个数的最大值和相减结果的绝对值进行举例。
System.out.println(Math.max(3, 6));
System.out.println(Math.abs(3 - 6));
但是使用静态导入,我们只需要在代码开始的地方写上import static java.lang.Math.max;代码部分可改为System.out.println(max(3, 6));即可
或者直接改为import static java.lang.Math.*;就将Math下的所有方法直接导入进来,下面的代码页相应可以简化。
(overload(重载) 与override(重写)的区别:class A{})
2.可变参数
一个方法接受的参数个数不固定,例如
System.out.println(add(3, 6));
System.out.println(add(3, 6,5));
可变参数的特点:只能出现在参数列表的最后;...位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
(eclipse里面复制整行快捷键:Ctrl + Alt + 向下箭头)
实现代码:
public class VariableParameter {
public static void main(String[] args) {
System.out.println(add(2,3));
System.out.println(add(2,3,5));
}
public static int add(int x,int ...args ){
int sum = x;
for(int i = 0;i < args.length; i++)
sum += args[i];
return sum;
}
}
输出:5
10
3.增强for循环
语法:for(type 变量名:集合变量名){...}
注意事项:迭代变量必须在()中定义!集合变量可以再数组或实现了Iterable接口的集合类
举例:(变量名可以根据后面的集合变量名取)
上例改为
public static int add(int x,int ...args ){
int sum = x;
/* for(int i = 0;i < args.length; i++){
sum += args[i];
}*/
for(int arg:args){
sum += arg;
}
return sum;
}
}
(提示:学习SUN公司的语言规范。)
4.基本数据类中的自动拆箱与装箱
前面学到过,包装类的自动装箱,自动拆箱。所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类对象,或者把double包装成Double等等。所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
实例代码:
public class AutoBox {
public static void main(String[] args) {
Integer iObj = 3;//装箱
System.out.println(iObj + 12);//拆箱
}
}
输出:15
思考问题:
代码改成如下:
public class AutoBox {
public static void main(String[] args) {
Integer iObj = 3;//装箱
System.out.println(iObj + 12);//拆箱
String s1 = new String("abc");
String s2 = new String("abc");
Integer i1 = 13;
Integer i2 = 13; //i1,i2分别装箱成一个Integer对象,是否是一个对象
System.out.println(i1 == i2);
}
}
当i1=13,i2=13时,i1、i2是同一个对象,如果改为i1=137,i2=137,不是同一个对象。
对于基本类型的整数要装箱成Integer对象的时候,如果数字在一个字节之内(即-128~127之间的数字),一旦包装成为一个Integer对象,就把他缓存起来,缓存在一个池里面,下次再要把一个整数包装成Integer对象时,先看池子里面有没有,有的话直接从池子里面取,节省内存空间。
享元模式flyweight:(例如在word里面要输入很多 个字符,这时候可以不用很多个小对象,直接定义26个字母为对象,然后根据字母的位置来显示)如果很多很小的对象,它们有很多相同的属性,那么就可以把它们变成一个对象,不同的东西变成很多外部的属性,成为外部状态,作为方法的参数传入。
思考:
Integer i3 = Integer.valueOf(3);//手工调用静态方法,把一个整数包装成为Integer对象
Integer i4 = Integer.valueOf(3);
System.out.println(i3 ==i4);//这两个对象是否是同一个
结论:这两个对象是同一个对象,但是如果改为>127,就不为同一个对象。
5枚举
枚举就是让某个类型的变量的取值是能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中天蝎的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。(私有的构造方法;每个元素分别用一个共有的静态成员变量表示;可以有若干公有方法或抽抽象方法,例如要提供nextDay方法必须是抽象的)。
实例代码:
EnumTest.java;
package cn.itcast.day1;
public class EnumTest{
public static void main(String[] args){
WeekDay weekDay = WeekDay.MON;
System.out.println(weekDay.nextDay());
}
}
WeekDay.java:
package cn.itcast.day1;
public class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}
public String toString(){
return this == SUN?"SUN":"MON";
}
}
输出结果:SUN
另外一种写法:
package cn.itcast.day1;
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this == SUN?"SUN":"MON";
}
}
采用抽象方法定义nextDay将大量的if else语句转移成了一个个独立的类。
写一个基本枚举类:
今天看的是张孝祥的视频。写的笔记在笔记本上,晚上我放上来。
我开始今天的学习记录。前面的几段视频我看过好多次,不再一一附上。按知识点写。
1. import语句可以导入一个类或某个包中的所有类。static import语句导入一个类中的某个静态方法或所有静态方法。
语法举例:使用求两个数的最大值和相减结果的绝对值进行举例。
System.out.println(Math.max(3, 6));
System.out.println(Math.abs(3 - 6));
但是使用静态导入,我们只需要在代码开始的地方写上import static java.lang.Math.max;代码部分可改为System.out.println(max(3, 6));即可
或者直接改为import static java.lang.Math.*;就将Math下的所有方法直接导入进来,下面的代码页相应可以简化。
(overload(重载) 与override(重写)的区别:class A{})
2.可变参数
一个方法接受的参数个数不固定,例如
System.out.println(add(3, 6));
System.out.println(add(3, 6,5));
可变参数的特点:只能出现在参数列表的最后;...位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
(eclipse里面复制整行快捷键:Ctrl + Alt + 向下箭头)
实现代码:
public class VariableParameter {
public static void main(String[] args) {
System.out.println(add(2,3));
System.out.println(add(2,3,5));
}
public static int add(int x,int ...args ){
int sum = x;
for(int i = 0;i < args.length; i++)
sum += args[i];
return sum;
}
}
输出:5
10
3.增强for循环
语法:for(type 变量名:集合变量名){...}
注意事项:迭代变量必须在()中定义!集合变量可以再数组或实现了Iterable接口的集合类
举例:(变量名可以根据后面的集合变量名取)
上例改为
public static int add(int x,int ...args ){
int sum = x;
/* for(int i = 0;i < args.length; i++){
sum += args[i];
}*/
for(int arg:args){
sum += arg;
}
return sum;
}
}
(提示:学习SUN公司的语言规范。)
4.基本数据类中的自动拆箱与装箱
前面学到过,包装类的自动装箱,自动拆箱。所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类对象,或者把double包装成Double等等。所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
实例代码:
public class AutoBox {
public static void main(String[] args) {
Integer iObj = 3;//装箱
System.out.println(iObj + 12);//拆箱
}
}
输出:15
思考问题:
代码改成如下:
public class AutoBox {
public static void main(String[] args) {
Integer iObj = 3;//装箱
System.out.println(iObj + 12);//拆箱
String s1 = new String("abc");
String s2 = new String("abc");
Integer i1 = 13;
Integer i2 = 13; //i1,i2分别装箱成一个Integer对象,是否是一个对象
System.out.println(i1 == i2);
}
}
当i1=13,i2=13时,i1、i2是同一个对象,如果改为i1=137,i2=137,不是同一个对象。
对于基本类型的整数要装箱成Integer对象的时候,如果数字在一个字节之内(即-128~127之间的数字),一旦包装成为一个Integer对象,就把他缓存起来,缓存在一个池里面,下次再要把一个整数包装成Integer对象时,先看池子里面有没有,有的话直接从池子里面取,节省内存空间。
享元模式flyweight:(例如在word里面要输入很多 个字符,这时候可以不用很多个小对象,直接定义26个字母为对象,然后根据字母的位置来显示)如果很多很小的对象,它们有很多相同的属性,那么就可以把它们变成一个对象,不同的东西变成很多外部的属性,成为外部状态,作为方法的参数传入。
思考:
Integer i3 = Integer.valueOf(3);//手工调用静态方法,把一个整数包装成为Integer对象
Integer i4 = Integer.valueOf(3);
System.out.println(i3 ==i4);//这两个对象是否是同一个
结论:这两个对象是同一个对象,但是如果改为>127,就不为同一个对象。
5枚举
枚举就是让某个类型的变量的取值是能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中天蝎的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。(私有的构造方法;每个元素分别用一个共有的静态成员变量表示;可以有若干公有方法或抽抽象方法,例如要提供nextDay方法必须是抽象的)。
实例代码:
EnumTest.java;
package cn.itcast.day1;
public class EnumTest{
public static void main(String[] args){
WeekDay weekDay = WeekDay.MON;
System.out.println(weekDay.nextDay());
}
}
WeekDay.java:
package cn.itcast.day1;
public class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay();
public final static WeekDay MON = new WeekDay();
public WeekDay nextDay(){
if(this == SUN){
return MON;
}else{
return SUN;
}
}
public String toString(){
return this == SUN?"SUN":"MON";
}
}
输出结果:SUN
另外一种写法:
package cn.itcast.day1;
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString(){
return this == SUN?"SUN":"MON";
}
}
采用抽象方法定义nextDay将大量的if else语句转移成了一个个独立的类。
写一个基本枚举类:
相关文章推荐
- JAVA封装学习笔记1--静态方法导入--其他
- java笔记2:java静态导入
- 【JAVA学习笔记】静态导入
- (35)Java学习笔记——集合框架 / 增强for /静态导入 /可变参数
- Java基础笔记 – 枚举类型的使用介绍和静态导入
- Java学习笔记---静态导入
- Java基础学习笔记16——(List的子类,泛型类,增强for循环,静态导入,可变参数)
- Java学习笔记之JDK1.5新特性(一):静态导入
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
- Java基础笔记 – 枚举类型的使用介绍和静态导入
- Java学习笔记(三)——静态导入,package-info,Fall-through
- JavaWeb学习笔记-java基础-2-静态导入
- Java中静态导入(传智播客毕老师视频讲解)
- 黑马程序员_Java高新技术(静态导入、可变参数、增强for循环、自动拆装箱、枚举、反射)
- 大龄屌丝自学笔记--Java零基础到菜鸟--010
- 黑马程序员---2015.6.14java基础笔记--静态方法--单例
- Java静态导入
- 笔记-Android开发-导入环信后导致的java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout异常处理
- java基础入门-----静态导入
- java1.5新特性:静态导入import static