java基础的详细了解第三天
作者:zsr6135 发布时间:2023-10-05 23:47:04
1、private实现封装处理
如果像想要知道封装,首先必须清楚如果没有封装会怎么样?
没有封装方法中的属性,在所有方法被调用后都可以进行无权限的访问。而当进行了封装操作之后,在实例化对象访问该方法的时候会出现无法访问的问题。
TestDemo1.java:11: 错误: name 在 Person 中是 private 访问控制
per.name = "张三";
^
TestDemo1.java:12: 错误: age 在 Person 中是 private 访问控制
per.age = 13;
^
2 个错误
解决该问题就需要通过getter、setter进行赋值、取值的操作。
class Person{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void info(){
System.out.println("name = "+ name +" \nage = " + age);
}
}
public class TestDemo1{
public static void main(String args[]){
Person per = new Person();
per.setName("张三");
per.setAge(13);
per.info();
}
}
private实现封装的最大特征在于:只允许本类,而不允许外类访问
private只是封装的第一步,如果要学明白,还需要学习多态、继承。
2、构造方法与匿名对象
构造方法就是在使用关键字new实例化新对象的时候进行调用,但是对于构造方法需要遵守以下原则
方法名称必须与类名称相同,并且构造的方法没有返回值,每个类中一定至少有一个构造方法,如果类中没有明确的定义任何一个构造方法,如果类中没有定义任何一个构造方法,那么将自动生成一个无参的构造方法
构造方法是在new对象的时候才执行
疑问:既然构造方法中没有返回数据,为什么不使用void囊?
现在类中的组成:属性、普通方法、构造方法
属性是在对象开辟堆内存的时候开辟空间
构造方法是在使用关键字new的同时调用
普通方法是在new实例化对象完成之后进行调用的
构造方法的作用:
构造方法的调用和对象的内存分配几乎是同步完成,所以可以利用构造方法设置类中的属性内容,构造帆帆噶可以给类中的属性进行初始化
通过构造方法设置内容,实际上可以避免重复的setter调用了
setter方法除了具备有设置内容之外,也可以承担修改数据的操作。
既然构造方法本身属于方法,那么方法就一定可以重载,而构造方法的重载更加简单,因为方法名称就是类名称所以能够做的只是实现参数的类型和个数的不同。
在定义若干个构造方法的时候按照参数的个数采用升序或降序进行排列。
class Person{
private String name;
private int age;
public Person(){}
public Person(String name){
name = name;
}
public Person(String name, int age){
name = name;
age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void info(){
System.out.println("name = "+ name +" \nage = " + age);
}
}
public class TestDemo1{
public static void main(String args[]){
Person per = new Person("李四",80);
per.setName("张三");
per.setAge(13);
per.info();
}
}
3、简单java类
class Emp{
private int empno;
private String ename;
private String job;
private double sal;
private double comm;
public Emp(int no,String name,String j,double s,double c){
setEmpno(no);
setEname(name);
setJob(j);
setSal(s);
setComm(c);
}
public void setEmpno(int no){
empno = no;
}
public void setEname(String name){
ename = name;
}
public void setJob(String job){
job = job;
}
public void setSal(double s){
sal = s;
}
public void setComm(double c ){
comm = c;
}
public int getEmpnoP(){
return empno;
}
public String getEname(){
return ename;
}
public String getJob(){
return job;
}
public double getSal(){
return sal;
}
public double getComm(){
return comm;
}
public String getInfo(){
return "empno = " + empno + "\n" +
"ename = " +ename + "\n" +
"job = " +job + "\n" +
"sal = " +sal + "\n" +
"comm = " +comm ;
}
}
public class TestDemo2{
public static void main(String args[]){
//测试类
System.out.printf(new Emp(2021,"Joker","CEO",2000.0,0.0).getInfo());
}
}
4、数组
数组属于引用类型,所以在使用前一定要开辟空间,本身除了声明并开辟空间之外还有另一种开辟模式,采用我们的分布模式开辟数组空间。如果使用数组不开辟空间,会出现NullPointerException异常。
public class TestDemo3{
public static void main(String args[]){
//第一种声明的方式
int [] num = new int [3];
//第二种声明数组的方式
int [] num = null;
num = new int [3];
num[0] = 0;
num[1] = 1;
num[2] = 2;
for(int i = 0;i < num.length ; i++){
System.out.println(num[i]);
}
}
}
数组在开发之中一定会使用,但是像一些讲解的时候这么用的数组少了,在以后实际开发,会更多使用数组概念,而直接使用数组99%的情况下只是做for循环数组。
来源:https://blog.csdn.net/zsr6135/article/details/119155187


猜你喜欢
- C++中的函数模板 对于类的声明来说,也有同样的问题。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:cl
- 本文实例讲述了C#实现基于Base64的加密解密类。分享给大家供大家参考。具体如下:这个C#类是一个基于Base64的加密和解密类,用户可以
- 目录前言:一、IronPython二、Python打包exe调用三、Python提供WebApi接口(推荐)总结:前言:在平时工作中,需求有
- 一 应用规划: ※ 确定功能。 ※ 必须的界面及界面跳转的流程。
- 实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实现Runnable:线程代码存放在
- 简介FTP是TCP/IP协议组中的协议之一,包括两个组成部分,一是FTP服务端,二是FTP客户端,其中FTP服务器用来存储文件,用户可以使用
- 很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆。  
- 本文实例为大家分享了opencv实现轮廓高斯滤波平滑的具体代码,供大家参考,具体内容如下一个小测试的题目:在图像上点选,找到与点选处相邻的颜
- 数组array和集合的区别:(1) 数值是大小固定的,同一数组只能存放一样的数据。(2) java集合可以存放不固定的一组数据(3) 若程序
- Java String源码分析什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这
- char 字符char代表一个Unicode字符,它是System.Char的别名char someChar = 'a';/
- 下文笔者讲述SpringBoot配置log4j的方法分享,如下所示SpringBoot日志输出springboot框架中默认使用logbac
- 引言在第一篇文章中我们分析了协程启动创建过程启动过程,在本文中,我们将着重剖析协程中协程调度的逻辑流程。主要是分析解答如下2个问题:涉及到协
- 在android开发中,通常使用xml格式来描述布局文件。就目前而言,熟悉android布局及美化的人员少之又少,出现了严重的断层。大部分企
- 五丶封装(1)包的概念与创建1>概念在我们的电脑上有许多的文件,我们为了方便管理,大致给它们进行了不同的命名。然后在不同的文件夹下面再
- 前言定时任务动态管理分为两种方式:方式一:Web前台配置Trigger触发器(关联Cron)、ThreadPoolTaskScheduler
- 之前看到过一个数字进度条,一直想写,今天就把这个实现下,想起来也是很简单的,先看下实现的效果:思路:绘制2根线 绘制进度条的文字,不断的改变
- 一、ArrayListArrayList是一个可以处理变长数组的类型,这里不局限于“数”组,ArrayList是一个泛型类,可以存放任意类型
- 项目比较大有时候会比较卡,虽然有GC自动清理机制,但是还是有不尽人意的地方。所以尝试在项目启动文件中,手动写了一个定时器,定时清理内存,加快
- 单例模式有一下特点:1、单例类只能有一个实例。2、单例类必须自己自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。单例模式确