HeadFirstJava——10_数字与静态
来源:互联网 发布:绝对中立知乎 编辑:程序博客网 时间:2024/06/03 01:20
一、静态方法
1 概念
静态方法不需要实例变量,用static关键词标记方法即为静态方法;
以类的名称调用静态的方法,以实例变量调用非静态的方法;
如下是非静态方法:
public class Song{// 实例变量的值会影响play()方法的行为String title;public Song(String t){title = t;}public void play(){SoundPlayer player = new SoundPlayer();player.playSound(title);}}
如下是静态方法,没有实例变量,直接用类的名字调用方法Math.min(1988, 1991);
public static int min(int a, int b){// 返回a和b中较小的值}
2 静态/非静态方法对静态/非静态变量的调用
2.1 静态方法不能直接调用非静态变量;
public class Duck{private int size;public static void main(String[] args){// 编译器报错,无法确定是哪个实例的变量System.out.println(size);/*但可new一个对象,来对其非静态的变量进行访问Duck duck = new Duck();System.out.println(duck.size);*/}public void setSize(int s){size = s;}public int getSize(){return size;}}
2.2 静态方法不能直接调用非静态方法;
public class Duck{private int size;public static void main(String[] args){// 编译器报错,无法确定是哪个实例的方法System.out.println(getSize());/*但可new一个对象,来对其非静态的变量进行访问Duck duck = new Duck();System.out.println(duck.getSize());*/}public void setSize(int s){size = s;}public int getSize(){return size;}}
2.3 静态方法可调用静态变量;
2.4 非静态方法可调用静态变量和静态方法;
二、静态变量
静态变量是共享的,同一类所有的实力共享一个静态变量;
静态变量只在类第一次载入的时候被初始化;
每个实例一个实例变量,每个类一个静态变量;
以类的名称调用静态变量,以实例变量调用非静态变量;
静态变量在该类的任何对象创建之前就完成初始化,在该类的任何静态方法执行之前初始化;
三、静态final常数
1 概念
静态的final变量是常数,即常数是把变量同时标记为static和final的;
常数变量的名称应该都是大写字母,并以下划线将字符隔开;
一旦被初始化就不会改动;
2 静态final变量的初始化方法:
2.1 声明的时候
public class Foo{public static final int FOO_X = 5;}
2.2 在静态初始化程序中
public calss Bar{public static final double BAR_SIGN;static{BAR_SIGN = (double)Math.random();}}
3 final修饰变量、方法、类
final的变量一旦复制就不能更改;
final的方法不能被覆盖;
final的类不能被继承;
注意:若一个类不能被子类化,则其方法根本无法被覆盖;若只是想要限制部分的方法不能被覆盖,则单独标记其为final;
四、Math的方法
1 Math.random()
返回介于0.0~1.0之间的双精度浮点数;
double r1 = Math.random();int r2 = (int)(Math.random()*5);
2 Math.abs()
返回双精度浮点数类型参数的绝对值;
该方法有覆盖版本,传入整型返回整型,传入双精度浮点数返回双精度浮点数;
int x = Math.abs(-325);double d = Math.abs(325.829);
3 Math.round()
根据参数是浮点数或双精度浮点数,返回四舍五入后的整型或长整型值;
int x = Math.round(-3.25f);long y = Math.round(8.29);
4 Math.min()
返回两个参数中较小的一个;
该方法有int、long、float或double的覆盖版本;
int x = Math.min(325, 829);double y = Math.min(3.25, 8.29);
5 Math.max()
返回两个参数中较大的一个;
该方法有int、long、float或double的覆盖版本;
五、包装类
1 概念
每个primitive主数据类型都有一个包装用的类,且因为这些包装类都在java.lang包中,因此无需import它们;
包装类包括Boolean、Character、Byte、Short、Integer、Long、Float、Double;
1.1 包装值
int i = 829;Integer iWrap = new Integer(i);
1.2 解开包装
int unWrapped = iWrap.intValue();
2 自动打包autoboxing
不必把primitive主数据类型与对象分得太清楚;
public void doNumsNewWay(){// 创建Integer类型的ArrayListArrayList<Integer> listOfNumbers = new ArrayList<Integer>();// 虽然ArrayList没有add(int)方法,但编译器会自动包装listOfNumbers.add(3);// 编译器自动解开Integer对象的包装,可直接赋值给intint num = listOfNumbers.get(0);}
注意:ArrayList<int>无法通过编译,因为generic类型的规则是只能指定类或接口类型;
2.1 方法的参数
若参数是某种包装类型,可传入相对应的primitive主数据类型,反之亦然;
// 可传入int类型或Integer对象void takeNumber(Integer i){}
2.2 返回值
若方法声明为返回某种primitive主数据类型,可返回兼容的primitive主数据类型或该primitive主数据类型的包装类型;
int giveNumber(){// x可以是int类型或Integer对象return x;}
2.3 boolean表达式
任何预期boolean值得为之都可用求出boolean的表达式代替;
// bool可以是boolean类型或Boolean对象if(bool){System.out.println("true");}
2.4 数值运算
可在使用primitive主数据类型作为运算子的操作中以包装类型代替;
Integer i = new Integer(29);i++;Integer k = i + 3;
2.5 赋值
可将包装类型或primitive主数据类型赋值给声明成相对应的包装或primitive主数据类型;
// x可以是int类型或Integer对象Double d = x;
3 包装类型的方法
3.1 将String转换成primitive主数据类型值
String str = "520";int num = Integer.parseInt(str);
3.2 将primitive主数据类型转换成String
方法1 "+"操作数
double d = 3.25;String doubleString = "" + d;
方法2 使用Double包装类的静态方法
double d = 8.29;String doubleString = Double.toString(d);
六、数字格式化
1 导入类
import java.util.Formatter;
2 静态方法
String s = String.format(<格式指令>, <要格式化的值>);
3 格式化说明
格式化说明最多有5个部分(不包括%),以下[]都是可选项,因此只有%和type是必须的;
格式化说明的顺序是有规定的,必须要以这个顺序来指定;
"% [argument number] [flags] [width] [.precision] type"
其中,[argument number]——若要格式化的参数超过一个以上,可在此处指定哪一个;
[flags]——特定类型的特定选项,如数字要加逗号或正负号;
[width]——最小的字符数,但不是总数,输出可以超过次宽度,若不足则自动补零;
[.precision]——精确度,注意前面有个圆点符号;
type——一定要指定的类型标识,d表示参数与int相容,f表示参数是浮点型,x表示参数必须是byte/short/int/long/BigInteger,c表示参数必须是byte/short/int/long;
int one = 19880325;double two = 19910829.00000;String s = String.format("The rank is %,d out of %,.2f", one, two);// The rank is 19,880,325 out of 19,910,829.00
- HeadFirstJava——10_数字与静态
- HeadFirstJava 10数字与静态
- HeadFirstJava——2_类与对象
- HeadFirstJava——7_继承与多态
- HeadFirstJava——8_接口与抽象类
- HeadFirstJava——13_网络与线程
- 数字与静态(HeadfirstJava随笔)(转)
- HeadFirstJava——1_基本概念
- HeadFirstJava——3_变量
- HeadFirstJava——5_编写程序
- HeadFirstJava——11_异常处理
- HeadFirstJava——14_数据结构
- HeadFirstJava——9_构造器与垃圾收集器
- HeadFirstJava学习——数字和日期格式化
- HeadFirstJava——4_对象的行为
- Head First Java#10_数字与静态
- HeadFirstJava——12_序列化和文件的输入/输出
- HeadFirstJava学习心得——javaGUI编程
- IOS UITableView-FDTemplateLayoutCell框架高度返回问题
- Java swing实现音乐播放器之Java开发图形界面程序音乐播放器仿酷狗音乐播放器
- HBase处理中文字符串
- 图解Javascript this指向什么
- HTML 5本地存储之兼容性与存储监听
- HeadFirstJava——10_数字与静态
- Codeforces #352 Recycling Bottles
- mongodb 安全认证
- 30分钟做一个二维码名片应用,有源码!
- 8.平面阴影
- 编写Django自定义manage命令
- Android学习笔记二十八之AlertDialog提示对话框和几个常用的提示框
- 佳肴_纪中1420_dfs
- 大数据时使用索引实例