在Java语言中,定义一个类是非常简单的,其基本语法是:
修饰符 class 类名{
构造方法(const); 切记类里面不能写逻辑语句
方法(method);
属性(field);
}
}
java中只要调用子类的构造函数就要调用父类无参数的构造函数吗?若父类中不存在无参数构造函数会出错吗?
答:Java中只要调用子类的构造函数就一定会调用父类的构造函数,这是毋庸置疑的!有时我们并没有在父类中写有参和无参的构造方法,但是这样我们在定义子类对象时调用子类构造函数时,其实也调用父类的构造函数,这是系统自动为我们添加的“public Pen(){}”。但是如果我们在父类中已经自己定义了有参的构造方法,却没有定义无参的构造方法,那么此时系统是不会为我们自动添加无参的构造方法的,此时程序结果就会提醒你父类没有无参的构造方法,程序就会报错。构造方法是类所必需的,是类实例化对象的基础,在java中每个类都会默认分配一个无参的构造函数,即使不写也会自动生成一个,否则就不能像Person person = new Person();这样进行实例化对象。
无参构造函数是隐式的,如果你不创建构造函数,在实例化对象时系统会自动帮你自动创建。如果你自己写了构造函数,就不会自动创建,要自己手写。
java访问权限
http://jingyan.baidu.com/article/bad08e1e8e9a9b09c851219f.html
while ((String str=bin.readLine())!=null)这个报错。str为什么只能定义在while外面?
while括号里是boolean值,不能定义变量
类体里面只能出现变量和方法,不能出现语句
JAVA的类名.this
this指的是当前正在访问这段代码的对象,当在内部类中使用this指的就是内部类的对象,
为了访问外层类对象,就可以使用外层类名.this来访问,一般也只在这种情况下使用这种
"equals"和"=="的区别
简单的说:==表示比较的是地址,而equals比较的是内容
如:String s1 = new String ("a");
String s2 = new String ("a");
syso(s1==s2)//输出false,因为创建了两个String对象,存在栈中的地址不一样
syso(s1.equals(s2))//输出true,因为里面的内容都是“a”
java 中只有引用地址相同的两个变量才被视为==如果明白值传递与地址传递的话,这个问题应该不难理解null放在前面就是为了避免变量为空时 引了空指针异常
如: if(a==null) 如果a 真为空时,现在就相当用调用了变量a的方法,a 都为空了还调用他的方法,当然会引发空指针异常了,但写成if(null==a)就不会了
==会调用hashcode()方法
1、java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
2、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
3、equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
4、==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true。
java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- // for(int i=0;i<100;i++)
- // create c = new create();
- // 这样写是不对的,编译是不会通过的,
- // 因为:JAVA语言规范规定不允许一个本地变量声明语句作为一条语句在for 、while 、do while 循环中重复执行
- // 一个本地变量声明作为一条语句只能直接出现在一个语句块中(一个语句块是由一对花括号以及包含在这对花括号以及包含在这对花括号中的语句和声明构成的,)
- // 下面的这种也是错误的。
- // for(int i=0;i<44;i++)
- // int a =3;
- // 第一中解决办法,加语句块的括号解决
- for(int i=0;i<100;i++)
- {
- create c = new create();
- }
- //第二种解决办法,不写本地变量名。
- for(int i=0;i<100;i++)
- new create();
- System.out.println(create.getnum());
- }
- }
- class create
- {
- public static long num = 0;
- public create()
- {
- num++;
- }
- public static long getnum()
- {
- return num;
- }
- }
在使用Java局部内部类或者匿名内部类时,若该类调用了所在方法的局部变量,则该局部变量必须使用final关键字来修饰。
Float int double
float赋值的时候后面必须加f是(有区分大小写吗):
这个f必须加上,不然程序会认为是double类型,不区分大小写之分。
double赋值不需要加D,double b=12,输入一个int类型的值都没问题,它会自动转换为double类型,无大小写之分。
int<float<double,你记着这点,就不会错了,double能直接存float和int,float不能直接存double,需要转换,int比float,double都小。
自动转型:是你左边的类型比右边的大,所以能直接放进去。
“如图中a大于b所以就自动转型了)如果是a*b(a大于b)会自动转为浮点型,若(a小于b)那还会自动转为浮点型”,这句话你理解错误了,不是a的值比b的值大,在java里面不是比值大就是什么类型,而是谁的类型大,就是什么类型。
比如说:a*b,一个是int类型,一个是float类型,我上边说了,float类型比int类型大,你觉得你能把一个大的类型值放在小的类型值里面吗?[除非你强制转换],要么a*b就是float类型。