java类与对象举例(Java基础知识 - 对象与类)java基础 / Java类与对象...

wufei123 发布于 2024-06-17 阅读(3)

1、类1)类(class)是构造对象的模板;2)类可以理解为制作材料的模具,对象可以理解为是通过模具制作出来的材料;3)由类构造对象的过程称为创建类的实例(instance);4)*.class 字节码文件只是存在硬盘上的一种文件,需要通过 ClassLoader 加载器把 *.class 文件内容加载到内存中;

5)使用 javac 命令编译源文件时:1、如果存在相同的部分,可以使用通配符一次编译多个源文件,如:javacEmployee*.java;2、如果A类中依赖了B类,那在编译A类源文件时会自动查找依赖的

B类字节文件,如果没找到则会查找B类源码文件并编译;5)UML类图> Unified Modeling Language,统一建模语言;

> 推荐画图工具draw.io,支持网页版、客户端,非常好用;2、对象与对象变量1)首先要区分清楚变量和对象变量的概念,变量包含对象变量和基础类型变量,如:// 要认识到变量 nowDate 不是一个对象,

// 在没有初始化之前不能使用该变量上的任何方法,因为这些方法是对象的;Date nowDate,是定义一个Date类型对象变量; int a = 0,是定一个基础类型变量,并赋值0;2)对象可以理解为是通过模具制作出来的材料,而类就是这个制作材料的模具,new 操作符会构造一个新对象出来,在内存中划分空间;

// 这里是创建一个Date类的实例对象,并把引用赋值给变量nowDateDate nowDate = newDate();3)对象变量 nowDate 中存放的是 new 出来的对象的引用,即变量的值是一个引用;

4)new Date(),new 操作符构造一个对象时返回的是该对象的引用,可以不把引用赋值给变量而直接使用;

5)变量初始化赋值;

3、隐式参数和显式参数1)user.setName(String name),user 被称为隐式参数,setName 方法括号中的 String name 是显式参数;4、基于类的访问权限1)一个类中的方法可以访问,调用该方法的对象的私有字段;

如:channel1.handle(channel2); 解释: handle() 方法是属于ClueChannelDTO类对象的, 当对象 channel1 调用它的 handle() 方法时,在handle

()方法内部是可以直接 访问 channel1 对象的私有字段的;2)一个方法可以访问所属类的所有对象的私有字段;如:在 channel1 对象的 handle() 方法中可以直接 访问同一个类的 channel2

对象中的私有字段;

5、final修饰实例成员字段1)final 修饰的字段必须在构造对象时初始化,即实例化对象后这个字段就已经有值了,且之后不可再改变;

> 手动写一个无参构造函数,不给final 修饰的字段赋值,也会编译报错;

> final 修饰的字段,lombok组件的@Data 注解不会为该 final 字段生成 setXxx 方法;

2)final 修饰的类称为不可变类,String 类就是不可变的;3)final 修饰的类不能被继承,即不会有子类;4)final 修饰方法,表示该方法不能被子类重写;6、静态字段和静态方法静态字段1)静态字段也叫

类字段,属于类而不是属于类的对象;静态常量1)使用 static final 两个关键字修饰的字段称为静态常量;2)已经赋值的 final 变量的值是不可以修改,这是 java 规范,但是 System 类中的 setOut() 方法可以修改 out 变量的值,这是因为 setOut() 方法调用了

原生方法,绕过了 java 语言的访问控制机制;> 我们一般写程序时不建议这样做;静态方法1)使用 static 修饰的方法被称为静态方法;静态工厂方法1)通过一个静态方法来创建本类的对象,那该静态方法可以称为静态工厂方法;

7、方法参数1)Java 是按值传递参数给方法的;2)基本类型是直接把值传递给方法,方法参数会生成一个传递值的副本;> 在方法内对基本类型的参数做处理并不会影响传入的原变量的值;

3)对象类型是把变量的值(即对象的引用)传递给方法,方法参数会生成一个副本,值是对象的引用,即这个副本也是指向对象的;

8、对象构造重载1)一个类中存在多个方法名相同,参数个数不同或参数类型不同的方法,这就叫方法重载;2)方法名+参数类型叫做方法的签名,方法签名不包含返回类型;3)方法名和参数类型相同但是返回类型不同的两个方法是不能存在的;

默认值和字段初始化1)在类构造器中没有显式的为字段赋初始值,就会自动的为字段赋默认值,数值默认0,boolean 类型默认 false,对象类型默认 Null;

无参构造器1)当类中没有任何构造器时,会有一个默认的构造器;2)使用无参构造器在构建对象时,会为对象所有字段赋默认值;显式字段初始化1)可以在实例字段定义时赋值;

在构造器中通过 this 关键字调用另一个构造器1)this 表示当前对象;2)this 也可以用作当前类的构造器;

初始化块(静态与非静态)1)初始化数据字段的方法有三种:> 在构造器中初始化字段值;

> 在类中声明字段时初始化;

> 在初始化块中进行自动初始化;2)在类中可以包含任意多个代码块,构建对象时就会执行这些代码块;> 首先运行初始化代码块,之后才运行构造器主体部分;

3)静态初始化块;> 在类第一次加载的时候,会进行静态字段初始化;> 静态字段初始化方法或静态初始化块,都是按照出现的顺序执行;

4)执行顺序,静态初始化块 > 初始化块 > 构造器;调用构造器的处理步骤1)在构造器的第一行调用了另一个构造器,则会先执行另一个构造器;2)所有数据字段初始化为默认值;3)按照出现的顺序,执行所有字段初始化方法和初始化块;

4)执行构造器主体代码;new 一个对象的过程1)JVM 看到 new 指令,会先去检查在常量池中是否存在指定类的全限定名称,如果存在则进一步检查该类是否被加载、解析、初始化过,即检查是否第一次使用该类;

如果是第一次使用该类,则先进行加载、解析、初始化; 初始化是指对类的 static 变量做初始化;2)申请内存空间,创建对象;3)初始化对象中的变量(赋默认值),执行普通代码块或调构造方法初始化;4)把对象的引用赋值给引用变量;

注意:3)和 4)可能发生指令重排序;9、public / private / protected / 无修饰符1)访问权限有四种,public / private / protected / 无修饰符;

2)类定义只能使用 public 修饰或无修饰符:> 无修饰符时只能在同一个 package 包中被访问到;

3)一个类源文件中只能有一个 public 修饰的 class,其他需是无修饰符;4)public / private / protected / 无修饰符 可以修饰字段和方法;

10、清单文件 Manifest.MF1)jar 文件 META-INF 目录中有清单文件 MANIFEST.MF;2)打包成可执行的 jar 文件时,可以在清单文件中指定程序的主类,如:Main-Class

: xx.xx.AppMainClass(这里不需要.class扩展名)3)清单文件必须以换行符结束,不然无法被正确的读取;4)在 windows 系统有包装器工具,可以将 jar 文件转换成 windows 系统的可执行文件,即 .exe 扩展名的文件,工具诸如:Launch4J / IzPack;

11、其他1)写一个当月日历表:publicstaticvoidmain(String[] args) {         String[] weeks = {"星期一", "星期二", "星期三",

"星期四", "星期五", "星期六", "星期日"};         for (int i=0; i

-1 ? "  " : ""));         }         System.out.println();                  LocalDate now = LocalDate.now();        

int daysOfMonth = now.lengthOfMonth();         int today = now.getDayOfMonth();         int weekWithFirstDayOfMonth = now.minusDays(today

-1).getDayOfWeek().getValue();         int weekWithLastDayOfMonth = now.minusDays(today-1).plusDays(daysOfMonth

-1).getDayOfWeek().getValue();         int totalLen = (weekWithFirstDayOfMonth-1) + daysOfMonth + (weeks.length-weekWithLastDayOfMonth);         String space =

"     ";                  for (int i=0; i

if ((weekWithFirstDayOfMonth-1) > i) {                 System.out.print(space);             } elseif (i+

1 > (weekWithFirstDayOfMonth-1) + daysOfMonth) {                 System.out.print(space);             }

else {                 String day = String.valueOf((i+1)-weekWithFirstDayOfMonth+1);                

if ((i+1) == today + (weekWithFirstDayOfMonth-1)) {                     day = day + "*";                 }                 System.

out.print(day + space.substring(0, space.length()-day.length()));             }                         

if (mod != 0) {                 System.out.print("  ");             }             if (mod == 0 && i !=

0 && i != totalLen-1) { // 换行                 System.out.println();             }         }     }

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻89960