一、Java标识符:在Java源程序中凡是程序员有权利自己命名的单词
标识符的命名规则:
-合格的标识符只能由数字,字母,下划线,美元符组成
-不能由数字开头
-关键字不能做标识符
注意:所以汉字、日语、韩文都可做标识符
例题:
下列不可做为Java语言标识符的是:A,D,F,H
A. /aa B. $2 C. _2 D. 22 E.二二
F. Float G. a2 H. 2a
二、Java关于继承性的规定
-一个类可以被多个子类继承
-Java类的单继承性:一个类只能一个父类
-子父类是相对概念
-子类直接继承的父类,称为:直接父类、间接继承的父类称为:间接父类
-子类继承父类以后,就获取直接以及所有间接父类的属性或方法
例题:Java中:C
A.一个子类可以有很多个父类,一个父类也可以有多个子类
B.一个子类可以有很多父类,但一个父类只可以有一个子类
C.一个子类可以有一个父类,但一个父类可以有多个父类
D.以上说法都不对
三、接口:是抽象方法和常量值的定义的集合
从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现
接口的特点:
-接口中所有的方法都默认是由public abstract修饰的
-接口没有构造方法
-实现接口的类中必须提供接口中所有方法的具体实现内容
-多个无关的类可以实现同一个接口
-一个类可以实现多个无关接口
-接口也可以继承另一个接口,使用extends
-与继承性类似,接口与实现类之间存在多态性
例题:以上继承性的述序正确的是:A
A.在Java中类只允许单一继承
B.在Java中一个类只能实现一个接口
C.在Java中一个类不能同时继承一个类分实现一个接口
D.在Java中接口只允许单一继承
例题:下列关于接口的叙述错误的是:B,E
A.接口中的方法默认是public abstract方法
B.接口中的方法默认都是静态的
C.接口中的属性,都是静态常量
D.类在实现接口的方法时,必须显示地使用public修饰符
E.抽象方法必须在抽象类中,所有抽象类中的方法都必须是抽象方法
四、
1.在一个编辑器中编写好的Java代码,是拓展名为jie.class的文件
2.字节码文件是与平台的二进制,执行时是由解释器解释成本地机器码
3.Java的各种数据类型占用固定长度,与平台软硬件环境无关(数据类型长度只与Java虚拟机)
4.在实例方法或构造器中,this用来引用当前对象,通过this可引用当前对象的任何成员
例题:下面代码的结果是什么?还是抛出异常?
public class Test2{
public static void main(String[] args){
int i1 = 10,i2 = 10;
System.out.println("i1 + i2 = " + i1 + i2);
System.out.println("i1 - i2 = " + i1 - i2);
System.out.println("i1 * i2 = " + i1 * i2);
System.out.println("i1 / i2 = " + i1 / i2);
}
}
结果:
i1 + i2 = 1010
抛出异常
i1 * i2 = 100
i1 / i2 = 1
注意:-,+优先级相同,且-,+是自左向右结合,第二个输出字符串不能进行加减运算
例题:以下代码的结果是什么?
class Base{
}
public class Test4{
public static void main(String[] args){
new Test4().method();
}
//注:getSuperclass()方法的作用是获取当前类继承的父类
public void method(){
System.out.println(this.getClass().getName());
System.out.println(super.getClass().getName());
System.out.println(this.getClass().getSuperclass().getName());
System.out.println(super.getClass().getSuperclass().getName());
}
}
结果:
Test4
Test4
java.lang.Object
java.lang.Object
注意:所有类的根父类是java.lang.Object
例题:输出什么?
public class Test5{
public static void main(String[] args){
String str1 = "666";
System.out.println(str1=="666");
System.out.println(12 - 11.9 == 0.1);
}
}
结果:
true
false
注意:两个float的数进行加减乘除会存在一定的误差
例题:请从下列的抽象类shape类扩展出一个名为Rectangle的类表示矩形,这个类包括:两个名为width和height的double型数据域作为私有成员,它们分别表示矩形的宽和高。width和height的默认值都为1,一个无参构造法,一个名为width和height指定值的矩形构造方法。一个名为getArea()的方法返回这个矩形的面积。一个名为getPerimeter()的方法返回这个矩形的周长。
public abstract class shape{//求抽象类
public abstract double getArea();//求面积
public abstract double getPrimeter();//求周长
}
结果:
```java
class Rectangle{
private double width;//矩形宽
private double height;//矩形高
public Rectangle(){
width = 1;
height = 1;
}
public Rectangle(double width,double height){
this.width = width;
this.height = height;
}
public double getArea(){
return width * height;
}
public double getPerimeter(){
return (width + height)*2;
}
public void setWidth(double width){
this.width = width;
}
public double getWidth(){
return width;
}
public void setHeight(double height){
this.height
}
}
算法题:
1.删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。
示例1:
给定数组nums = [1,1,2],函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1,2。你不需要考虑数组中超出新长度后面的元素。
示例2:
给定nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度5,并且原数组nums的前五个元素被修改为0,1,2,3,4。你不需要考虑数组中超出新长度后面的元素。
说明:为什么返回数值是整形,但输入的答案是数组呢?
请注意:输入数组是以[引用]方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
//nums是以”引用“方式传递的,也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);
//在函数里修改输入数组对于调用者是可见的
//根据你的函数返回的长度,它会打印数组中该长度范围内的所有元素
for(int i =0 ;i < len;i++){
print(nums[i]);
}
模板:
class Solution{
public int removeDuplicates(int[] nums){
}
}
代码:
public int solve(int[] nums, int num){
int s1 = 0;
int s2 = s1 + 1;
while(s2 < num){
if(nums[s1] == nums[s2]){
s2++;
}
else{
nums[s1++] = nums[s2];
s2++;
}
}
return s1 + 1;
}
思路:需要两个参数指针s1,s2,将其中是s1赋值为0,s2赋值为1,然后s2遍历数组如果与s1数组元素不相等就将该元素赋给s1的下一个,然后接着遍历,直到数组遍历结束,然后返回s1最终的值加1
加分题:
1.String字符串类对象有哪两种创建方法,这两种方法有什么不同?
2.两个对象值相同(x.equals(y)==true),但却有不同的hash code,这句话对不对?
结果:
1.String字符串类型的两种创建方式:
***1>直接赋值
***2>通过String类型的构造方法创建对象
不同点:直接赋值方式创建对象是在方法区的常量池(方法区里存储着class文件的信息和动态常量池,class文件的信息包括类信息和静态常量池。可以将类的信息是对class文件内容的一个框架,里面具体的内容通过常量池来存储。),而构造方法的方式创建对象是在堆空间
2.不对,如果两个对象 x 和 y 满足 x.equals(y) == true
,它们的hash code应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个对象相同(equals 方法返回 true ),那么它们的 hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,它们并不一定相同。
补充:equals()方法没有重写的话,用于判断对象的内存储值是否用同一个地址;重写之后一般比较对象的内容是否相等