编程语言 - webdancer's Blog
重新拾起C(1)-关键字
前记: 以前自学的C语言,但是很肤浅!决定,再认真地学一遍。认真的看看C语言,学习的书是陈正冲老师的《C语言深度解析》。套用一句话,永远给我记住一点:结果对,并不代表程序真正没有问题。
c 的关键字:
auto | break | case | char | const | continue | default | do |
double | else | enum | extern | float | for | goto | if |
int | long | register | return | short | signed | sizeof | static |
struct | switch | typedef | union | unsigned | void | volatile | while |
2)register:寄存器变量修饰,其变量必须是单一的值,且不能用&,取得地址。
3)static:静态修饰符,只能被本文件引用,其他文件不可用。
4)short:短整型。
3)int:整型。
4)long:长整型。
5)float:单精度浮点数。
6)double:双精度浮点数。
7)char:字符类型。
8)enum:枚举类型。(应该是基本类型吧!)
1 2 3 4 5 6 | enum ColorT {red, orange, yellow, green, blue, indigo, violet}; ... ColorT c1 = indigo; if ( c1 == indigo ) { cout << "c1 is indigo" << endl; } |
8)struct:结构体。
1 2 3 4 5 | struct Date { int day; int month; int year; } today; |
9)union:共用体。
1 2 3 4 | union Data { int i; char c; }; |
10)void:函数,返回值为空。指针,可以指向任何类型数据。
11)sizeof:计算参数大小。
12)signed:有符号。
13)unsigned:无符号。
14)if :条件。
15)else:其他,条件语句。
16)switch:条件分支语句。
17)case:条件分支语句。
18)do :循环语句。
19) while :循环语句。
20)for:循环语句。
21)break:跳出循环体。
22)continue:结束本次循环,进入下次循环。
23)goto:跳转语句,应该禁用,破坏结构化。当然,还是自己的习惯!
24)return:返回值。
25)const:常量,在c与c++有区别。
26)volatile:可变的,编译器不会自作主张优化其声明的变量。
27)extern :可以置于变量或者函数前,以标示变量或者函数的定义在别的文件
28)typedef:分一个新名字,与原来的一样用。
1 2 3 4 | typedef unsigned int * pui_t; // data1 and data2 have the same type pui_t data1; unsigned int * data2; |
clone 创建对象副本
-
public interface Cloneable
此类实现了 Cloneable
接口,以指示方法Object.clone()
可以合法地对该类实例进行按字段复制。
如果在没有实现 Cloneable
接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException
异常。
按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。请参阅 Object.clone()
, 以获得有关重写此方法的详细信息。
但是如果直接查询JDK文档会发现Cloneable接口中并没有任何的方法定义,所以此接口在设计上称为是一种标识接口,表示对象可以被克隆。
- class Person implements Cloneable { //
必须实现Cloneable接口- private String name = null;
- public Person(String name) {
- this.name = name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getName() {
- return this.name;
- }
- // 需要子类覆写clone方法
- public Object clone() throws
CloneNotSupportedException {- return super.clone(); //
具体的克隆操作由父类完成- }
- public String toString() {
- return "姓名:" + this.getName();
- }
- };
- public class CloneDemo01 {
- public static void main(String[] args)
throws Exception {- Person p1 = new Person("张三");
- Person p2 = (Person) p1.clone();
- p2.setName("李四");
- System.out.println("原始对象:" + p1);
- System.out.println("克隆之后的对象:" + p2);
- }
- }
Math类及类型转换
1)Math类,位于java.lang包里。里面封装了数学常量及常用的函数。
2)类型转化:1)低精度向高精度转。
:
2)强制类型转换。使用()。
注意:通常,不将布尔类型与其它类型转化,防止一些错误。
3)大数值问题。
BigInteger表示是大整数类,定义在java.math包中,如果在操作时一个整型数据已经超过了整数的最大类型长度long,数据无法装入,此 时可以使用.
同时,提供了基本的算术运算。+ - * / 等。(有时很有用的吆!)
java基本输入输出
输入:
利用scanner类,jdk5.0以后新增类。
1)Scanner
使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。它附属于标准输入流System.in。
2)基本用法:
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
3)包:Java.util.*
输出:
1)System.out类封装了很多输出方法。print,println,当然还有我们c里面的printf。(jdk1.5沿用了c)
2)printf的格式方法:
整数: d(10) , x(16), o(8)
浮点数:f (定点),e(指数) ,g(通用) ,a (16浮点)
字符:c
字符串:s
布尔: b
时间:t
(详细:printf)。
真悲哀,当时学的时候只用了print ,println!