合肥网站设计哪家公司好,北京国贸网站建设公司,济宁网站建设 帮站,成都建设企业网站1、一个程序有且仅有一个main方法启动#xff0c;main方法是作为java程序启动的唯一入口。 public static void main(String[] args) {Student student new Student(11,111);System.out.println(student);}
权限修饰符#xff1a;public:修饰一个类是公开的 pub…1、一个程序有且仅有一个main方法启动main方法是作为java程序启动的唯一入口。 public static void main(String[] args) {Student student new Student(11,111);System.out.println(student);}
权限修饰符public:修饰一个类是公开的 public修饰的类一定和文件名一致一个类中有且仅有一个 public类protect private:修饰类 私有类default默认不写
修饰类修饰方法修饰域public公开类都可以访问都可以访问private私有类该方法只能在本类中被访问不能被其他类访问该方法只能在本类中被访问不能被其他类访问protect子类可以继承可以访问 同包下的类也可以访问子类可以继承可以访问 同包下的类也可以访问default只有同包的可以访问 当前类可以访问只有同包的可以访问
作用域 当前类 同包 子类 其他
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开public对于不是同一个包中的其他类相当于私有private。受保护protected对子类相当于公开对不是同一包中的没有父子关系的类相当于私有。
2、static关键字
1、修饰类 静态类静态内部类
2、修饰静态域类的所有对象共享这个域
3、修饰方法 静态方法不用创建对象直接 通过方法名加传参就可以调用 只能访问静态属性不能访问非静态属性和对象
static修饰变量static修饰的变量属于类变量该变量被该类所产生的所有对象共享
static修饰的是方法this修饰的是类
static修饰的方法属于类方法
1this关键字不能在static方法中使用。
2静态方法不能使用非静态方法
3非静态方法能使用静态方法。
4静态方法可以调用静态方法
static代码块static修饰的代码块在main方法之前执行以便于优化程序优化main方法
3、final
final修饰的变量
final修饰的变量叫做常量只能被赋值一次值不能变化
基本数据类型其数值一旦在初始化之后便不能更改
引用数据类型在对其初始化之后便不能再让其指向另一个对象但指向该对象的内容可以改变
final固定的是一个地址
final修饰全局变量必须赋值否则变量出栈时需要修改方法区中的值这样不符合final得到特性
final修饰局部变量存在方法区中final修饰的局部变量可以不赋初始值但是要想使用这个局部变量就必须赋值
final修饰的方法不能被重写如果你有两个方法该方法必须被子类重写那么一定不能定义成final类型
final修饰的类不能被继承
final的作用:防止变量被二次赋值防止方法重写防止类被继承防止指令重排序
4、基本数据类型
整型byte-128~127 8位 1个字节short int long
浮点型float double 字符char boolean public static void main(String[] args) {byte c 10;c c1;//会报错 需要强制类型转换 c1;//不会报错System.out.println(c);
}
自动拆装箱是一个编译器行为 是java编译器做的一个语法糖行为
装箱 valueOf
拆箱对象.intvalue 对象.longValue() Integer a 1;int c a.intValue();int intValue 42;Integer integerValue Integer.valueOf(intValue); // 将int转换为Integer对象
128陷阱 博客
5、String类
string不可变 我们对字符串做出的操作都会产生不同的字符串
string类型没有提供任何修改字符串的方法防止他的值可以变
final修饰string类 不能被继承 也就是没法通过重写父类方法的方式 修改值
final修饰了char类型数组数组也是private修饰的 保证一旦被赋值之后指向不可变 但是他的值可以变
好处可以共享数据
提高处理字符串拼接的效率 stringbuffer线程安全对类中大部分方法都加了synchronized 锁 stringbuilder单线程下效率高
每一个数组都是java中的一个新创建的类型 比如int[] 数组 他的类型时 int数组类型
冒泡、快排、堆排序、要熟练掌握 Arrays.sort应用
6、抽象类和接口的区别
语义上
继承抽象类是为了代码复用提供一种模版描述事务本身的特质特点和属性
实现接口更多是为了定义一个规范或者行为准则接口更多是描述某种行为和能力比如我定义一个飞的接口那么所有实现这个接口的类都具有飞的能力
现实使用上区别不大。
java中是单继承多实现的
抽象类可以有普通方法、构造函数 普通域。
接口这些都没有。
7、面向对象编程的特点
封装、继承、多态
如何体现
封装把现实世界中的客观事物抽象成一个java类然后在类中存放属性和方法比如抽象一个汽车类其中有发动机、车轮等属性又有启动、前进等方法。
多态:子类继承父类
子类重写父类方法
父类引用指向子类对象
8、程序执行第一步只是给静态变量和静态块赋初始值0null等不会直接将对应的值给他
第二轮才是给对应的值 这个时候如果给静态的对象实例化 从上往下执行先不管其他对象的实例化非静态的初始语句初始化块执行
9、类加载的先后顺序
10、Object类所有类的基类
没重写调用的就是Object里面的equals就是
equals和区别
基本类型 比较值
引用类型 equals比较两个对象的值是否相同
重写equals就要重写hashCode
因为我们重写equals就是为了实现只要两个对象的值相同那么 返回就是true 比如在hashmap里面
如果我们重写了equals方法让他实现值相同就返回true理论上euqals返回true说明值相同那么他们的hashCode值应该相同如果不重写它是根据对象的地址生成的hashCode他的值不同所以我们要重写hashcode保证他时根据对象内容生成的hashcode
基本方法getClass 、toString、clone、notifyALL 、notify、equals hasCode
11、内部类
局部内部类、
普通内部类
静态内部类
匿名内部类匿名内部类不能定义任何静态成员、方法和类只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面用其隐含实现一个接口或实现一个类。
public class Test2 {public static void main(String[] args) {Thread a new Thread(new Test3());a.start();Thread b new Thread(new Runnable() {Overridepublic void run() {System.out.println(122223);}});b.start();}
}
class Test3 implements Runnable{
Overridepublic void run() {System.out.println(123);}
} new Runnable(){}; 代替了Test3实现Runnable接口的步骤不用写实现类的类名直接在小括号后面加大括号里面写实现相应的方法
lamndan表达式
public class Test2 {public static void main(String[] args) {Thread c new Thread(()- System.out.println(123457),c);c.start();}
}
//,后面的c 是起了一个名字有没有都可以